Операционная система Microsoft Windows 3.1 для программиста -том 2


Листинг 1.16. Файл cursor\wndproc.cpp


// ===================================== // Функция 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); }

Обратите внимание на способ, при помощи которого функция окна рисует изображение курсора. Вначале она получает идентификатор курсора, вызывая функцию LoadCursor:

hCursor = LoadCursor(0, IDC_ARROW);

Затем функция окна рисует курсор при помощи функции DrawIcon, передавая ей в качестве второго параметра полученный идентификатор курсора.

DrawIcon(hdc, xCursor/2, yCursor/2, hCursor);

При создании окна функции окна передается сообщение WM_CREATE, которое используется для получения размеров курсора. С этой целью обработчик сообщения вызывает рассмотренную нами ранее функцию GetSystemMetrics:

case WM_CREATE: { xCursor = GetSystemMetrics(SM_CXCURSOR); yCursor = GetSystemMetrics(SM_CYCURSOR); break; }

Файл определения модуля для приложения CURSOR представлен в листинге 1.17.




Начало  Назад  Вперед



Книжный магазин