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

#define STRICT
#include <windows.h>
#include <stdio.h>

LRESULT CALLBACK _export
WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
  HDC hdc;             // индекс контекста устройства
  PAINTSTRUCT ps;      // структура для рисования

  // Координаты окна
  static WORD   xPos;
  static WORD   yPos;

  switch (msg)
  {
    case WM_PAINT:
    {
      char buf[80]; 

      hdc = BeginPaint(hwnd, &ps);

      sprintf(buf, "%4.4dx%4.4d   ", xPos, yPos);

      // Выводим координаты окна
      TextOut(hdc, 0, 0, buf, 12);

      EndPaint(hwnd, &ps);
      return 0;
    }

    case WM_MOVE:
    {
      // X-координата левого верхнего угла
      // внутренней области окна
      xPos = LOWORD(lParam);

      // Y-координата левого верхнего угла
      // внутренней области окна
      yPos = HIWORD(lParam);

      // Отмечаем все окно как требующее
      // обновления
      InvalidateRect(hwnd, NULL, TRUE);

      // Посылаем себе сообщение WM_PAINT
      UpdateWindow(hwnd);
      return 0;
    }

    case WM_SIZE:
    case WM_LBUTTONDOWN:
    {
      RECT rc;
      char buf[80];

      hdc = GetDC(hwnd);

      // Определяем размеры прямоугольника,
      // ограничивающего окно
      GetWindowRect(hwnd, &rc);

      sprintf(buf, "%4.4dx%4.4d %4.4dx%4.4d      ",
	rc.top,
	rc.left,
	rc.right,
	rc.bottom);

      // Выводим размеры внутренней области окна
      TextOut(hdc, 0, 20, buf, 25);

      ReleaseDC(hwnd, hdc);
      return 0;
    }

    case WM_DESTROY:
    {
      PostQuitMessage(0);
      return 0;
    }
  }
  return DefWindowProc(hwnd, msg, wParam, lParam);
}
