// =====================================
// Функция 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 WPARAM fwSizeType;
  static WORD   nWidth;
  static WORD   nHeight;

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

      hdc = BeginPaint(hwnd, &ps);

      sprintf(buf, "%4.4dx%4.4d (%1.1d)",
        nWidth, nHeight, fwSizeType);

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

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

    case WM_SIZE:
    {
      // Способ изменения размера окна
      fwSizeType = wParam;

      // Ширина внутренней области окна
      nWidth = LOWORD(lParam);

      // Высота внутренней области окна
      nHeight = HIWORD(lParam);

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

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

    case WM_LBUTTONDOWN:
    {
      RECT rcWndSize;
      char buf[80];

      hdc = GetDC(hwnd);

      // Определяем размеры внутренней
      // области окна
      GetClientRect(hwnd, &rcWndSize);

      sprintf(buf, "%4.4dx%4.4d",
	rcWndSize.right,
	rcWndSize.bottom);

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

      ReleaseDC(hwnd, hdc);
      return 0;
    }

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