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


Листинг 1.9. Файл ico\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 xIcon, yIcon;

// Идентификатор пиктограммы HICON hIcon;

switch (msg) { case WM_CREATE: { // Определяем размеры пиктограммы xIcon = GetSystemMetrics(SM_CXICON); yIcon = GetSystemMetrics(SM_CYICON); break; }

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

// Загружаем и рисуем встроенные пиктограммы hIcon = LoadIcon(0, IDI_APPLICATION); DrawIcon(hdc, xIcon/2, yIcon/2, hIcon);

hIcon = LoadIcon(0, IDI_ASTERISK); DrawIcon(hdc, xIcon/2 + xIcon*2, yIcon/2, hIcon);

hIcon = LoadIcon(0, IDI_EXCLAMATION); DrawIcon(hdc, xIcon/2 + xIcon*4, yIcon/2, hIcon);

hIcon = LoadIcon(0, IDI_HAND); DrawIcon(hdc, xIcon/2 + xIcon*6, yIcon/2, hIcon);

hIcon = LoadIcon(0, IDI_QUESTION); DrawIcon(hdc, xIcon/2 + xIcon*8, yIcon/2, hIcon);

// Загружаем и рисуем свою пиктограмму, // указанную в файле описания ресурсов hIcon = LoadIcon(hInst, "AppIcon"); DrawIcon(hdc, xIcon/2, yIcon/2 + yIcon*2, hIcon);

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

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

При создании окна в функцию окна поступает сообщение WM_CREATE, по которому определяются размеры пиктограммы:

xIcon = GetSystemMetrics(SM_CXICON); yIcon = GetSystemMetrics(SM_CYICON);

Эти размеры будут использованы для размещения пиктограмм в окне.

При обработке сообщения WM_PAINT функция окна загружает и рисует пиктограммы. Для загрузки пиктограмм используется функция LoadIcon, для рисования - DrawIcon.

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




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