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


Листинг 1.13. Файл smartpad/toolbar.cpp - часть 2


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

// ====================================================== // Функция DrawButton // Перерисовывает кнопку // ====================================================== void DrawButton(LPDRAWITEMSTRUCT lpInfo) { HBITMAP hbm;

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

hbm = TbMain::hbmpUp[(lpInfo->CtlID) - TbMain::nFirstId];

// Если кнопка выбрана, рисуем ее в нажатом // состоянии if (lpInfo->itemState & ODS_SELECTED) { hbm = TbMain::hbmpDown[(lpInfo->CtlID) - TbMain::nFirstId]; }

// Если кнопка неактивна, загружаем идентификатор // изображения кнопки в неактивном состоянии else if (lpInfo->itemState & ODS_DISABLED) { hbm = TbMain::hbmpGrayed[(lpInfo->CtlID) - TbMain::nFirstId]; }

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

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

Конструктор класса Toolbar сбрасывает признак ошибки errno, инициализирует члены класса TbMain, определяет размеры внутренней области родительского окна, размеры дочернего окна, регистрирует класс дочернего окна и создает само дочернее окно.

Работа деструктор заключается в уничтожении дочернего окна, для чего используется функция DestroyWindow.

Функция дочернего окна ToolbarWndProc обрабатывает сообщение WM_COMMAND, поступающее от кнопок, и формирует это же сообщение для дочернего окна. Кроме того, эта функция обеспечивает работу кнопок, для чего в ней предусмотрены обработчик сообщения WM_DRAWITEM.Этот обработчик вызывает функцию DrawButton, предназначенную для рисования кнопок.

Функция DrawButton рисует кнопку в нужном виде, выбирая идентификаторы соответствующих изображений bitmap из массивов, определенных в классе TbMain. Для рисования изображения вызывается функция DrawBitmap (листинг 1.14). Мы уже пользовались этой функцией.




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



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