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


Листинг 2.5. Файл ownbut\ownbut.cpp - часть 3


// Это сообщение приходит при изменении состояния // дочернего окна органа управления, когда окно // нужно перерисовать case WM_DRAWITEM: { // Перерисовываем кнопку DrawButton( (LPDRAWITEMSTRUCT)lParam ); break; }

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

// ===================================== // Функция DrawButton // Перерисовывает кнопку // =====================================

void DrawButton(LPDRAWITEMSTRUCT lpInfo) { HBITMAP hbm; int ResourceID;

// Обрабатываем сообщение WM_DRAWITEM // только если оно поступило от кнопки if(lpInfo->CtlType != ODT_BUTTON) return;

// Так как в приложении может быть несколько // кнопок, посылающих сообщение WM_DRAWITEM, // проверяем идентификатор кнопки switch (lpInfo->CtlID) { case IDB_Button1: { // Загружаем идентификатор изображения // кнопки в нормальном (отжатом) состоянии ResourceID = IDR_BUTTONUP; break; } default: return; }

// Если кнопка выбрана, рисуем ее в нажатом // состоянии if (lpInfo->itemState & ODS_SELECTED) { ResourceID = IDR_BUTTONDOWN; }

// если кнопка неактивна, загружаем идентификатор // изображения кнопки в неактивном состоянии else if (lpInfo->itemState & ODS_DISABLED) { ResourceID = IDR_BUTTONGR; }

// Загружаем изображение кнопки из ресурсов приложения hbm = LoadBitmap(hInst, MAKEINTRESOURCE(ResourceID));

// При ошибке ничего не рисуем if(!hbm) return;

// Если кнопка выбрана и ее надо целиком // перерисовать, вызываем функцию DrawBitmap if((lpInfo->itemAction & ODA_DRAWENTIRE) (lpInfo->itemAction & ODA_SELECT)) { // Рисуем кнопку DrawBitmap(lpInfo->hDC, (lpInfo->rcItem).left, (lpInfo->rcItem).top , hbm); }

// Удаляем изображение кнопки, так как оно // нам больше не нужно DeleteObject(hbm); }

В начале своей работы функция WinMain сохраняет идентификатор текущей копии приложения в глобальной переменной:

hInst = hInstance;

Затем она инициализирует главное окно приложения и создает пять кнопок, первая из которых имеет стиль BS_OWNERDRAW:




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



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