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

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

extern HINSTANCE hInst;

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

  // Размеры курсора
  static int xCursor, yCursor;

  // Идентификатор курсора
  HCURSOR hCursor;

  switch (msg)
  {
    case WM_CREATE:
    {
      // Определяем размеры курсора
      xCursor = GetSystemMetrics(SM_CXCURSOR);
      yCursor = GetSystemMetrics(SM_CYCURSOR);
      break;
    }

    case WM_PAINT:
    {
      hdc = BeginPaint(hwnd, &ps);

      // Загружаем и рисуем встроенные курсоры
      hCursor = LoadCursor(0, IDC_ARROW);
      DrawIcon(hdc, xCursor/2, yCursor/2, hCursor);

      hCursor = LoadCursor(0, IDC_IBEAM);
      DrawIcon(hdc, xCursor/2 + xCursor, yCursor/2, hCursor);

      hCursor = LoadCursor(0, IDC_WAIT);
      DrawIcon(hdc, xCursor/2 + xCursor*2, yCursor/2, hCursor);

      hCursor = LoadCursor(0, IDC_CROSS);
      DrawIcon(hdc, xCursor/2 + xCursor*3, yCursor/2, hCursor);

      hCursor = LoadCursor(0, IDC_UPARROW);
      DrawIcon(hdc, xCursor/2 + xCursor*4, yCursor/2, hCursor);

      hCursor = LoadCursor(0, IDC_SIZE);
      DrawIcon(hdc, xCursor/2 + xCursor*5, yCursor/2, hCursor);

      hCursor = LoadCursor(0, IDC_ICON);
      DrawIcon(hdc, xCursor/2 + xCursor*6, yCursor/2, hCursor);

      hCursor = LoadCursor(0, IDC_SIZENWSE);
      DrawIcon(hdc, xCursor/2 + xCursor*7, yCursor/2, hCursor);

      hCursor = LoadCursor(0, IDC_SIZENESW);
      DrawIcon(hdc, xCursor/2 + xCursor*8, yCursor/2, hCursor);

      hCursor = LoadCursor(0, IDC_SIZEWE);
      DrawIcon(hdc, xCursor/2 + xCursor*9, yCursor/2, hCursor);

      hCursor = LoadCursor(0, IDC_SIZENS);
      DrawIcon(hdc, xCursor/2 + xCursor*10, yCursor/2, hCursor);

      // Загружаем и рисуем свой курсор,
      // указанный в файле описания ресурсов
      hCursor = LoadCursor(hInst, "AppCursor");
      DrawIcon(hdc, xCursor/2, yCursor/2 + yCursor*2, hCursor);

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

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