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

Файл 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.



Содержание раздела