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