// =====================================
// Функция WndProc
// =====================================

#define STRICT
#include <windows.h>

LRESULT CALLBACK _export
WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
  HDC        hdc;
  WORD       xPosScr, yPosScr, nSizeScr;
  WORD       xPos, yPos, nSize;
  BYTE       szBuf[80];

  static TEXTMETRIC tm;
  static int cxChar, cyChar;

  switch (msg)
  {
	 case WM_CREATE:
    {
      // Получаем контекст отображения,
      // необходимый для определения метрик шрифта
      hdc = GetDC(hwnd);

      // Выбираем шрифт с фиксированной шириной букв
      SelectObject(hdc, GetStockObject(SYSTEM_FIXED_FONT));

		// Заполняем структуру информацией
      // о метрике шрифта, выбранного в
      // контекст отображения
      GetTextMetrics(hdc, &tm);

      // Запоминаем значение ширины для
      // самого широкого символа
      cxChar = tm.tmMaxCharWidth;

      // Запоминаем значение высоты букв с
      // учетом межстрочного интервала
      cyChar = tm.tmHeight + tm.tmExternalLeading;

      // Освобождаем контекст
      ReleaseDC(hwnd, hdc);

		return 0;
    }

	 case WM_NCHITTEST:
    {
		// Если убрать знак комментария со следующей строки,
		// можно будет передвигать окно не только
		// при помощи заголовка окна, но и просто
		// установив курсор мыши в любую область
		// окна

      //	return HTCAPTION;

		// Сохраняем координаты курсора мыши
		xPosScr  = LOWORD(lParam);
		yPosScr	= HIWORD(lParam);

      hdc = GetDC(hwnd);

      // Подготавливаем текстовую строку, содержащую
      // координаты курсора мыши
		nSize = wsprintf(szBuf, "(%-3d, %-3d)",
		  xPosScr, yPosScr);

		// Выбираем шрифт с фиксированной шириной букв
      SelectObject(hdc, GetStockObject(SYSTEM_FIXED_FONT));

		// Выводим экранные координаты курсора мыши
		TextOut(hdc, cxChar, 0, szBuf, nSize);

      ReleaseDC(hwnd, hdc);
		break;
	 }

	 case WM_MOUSEMOVE:
    {
		// Сохраняем координаты курсора мыши
      xPos   = LOWORD(lParam);
      yPos   = HIWORD(lParam);

      hdc = GetDC(hwnd);

      // Подготавливаем текстовую строку, содержащую
      // координаты курсора мыши
      nSize = wsprintf(szBuf, "(%-3d, %-3d)", xPos, yPos);

		// Выбираем шрифт с фиксированной шириной букв
      SelectObject(hdc, GetStockObject(SYSTEM_FIXED_FONT));

		// Выводим оконные координаты курсора мыши
		TextOut(hdc, cxChar, cyChar, szBuf, nSize);

      ReleaseDC(hwnd, hdc);
		break;
	 }

	 // Двойной щелчок левой клавишей мыши
    // завершает работу приложения
    case WM_LBUTTONDBLCLK:
	 case WM_DESTROY:
	 {
		PostQuitMessage(0);
      return 0;
    }
  }
  return DefWindowProc(hwnd, msg, wParam, lParam);
}

