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


Листинг 1.16. Файл gmenu/gmenu.cpp - часть 4


// Выбрали строку "About..." в меню "Help" case CM_HELPABOUT: { MessageBox(hwnd, "Приложение GMENU\n(C) Фролов А.В., 1994", szWindowTitle, MB_OK | MB_ICONINFORMATION); return 0; }

// Завершаем работу приложения case CM_FILEEXIT: { DestroyWindow(hwnd); return 0; } default: return 0; } }

case WM_DESTROY: { // Уничтожаем созданные ранее меню DestroyMenu(hmenuFile); DestroyMenu(hmenuHelp); DestroyMenu(hmenuLineStyle); DestroyMenu(hmenu);

// Удаляем изображения DeleteObject(hbmpLine1); DeleteObject(hbmpLine2); DeleteObject(hbmpLine3); DeleteObject(hbmpLine4); DeleteObject(hbmpLineStyle); DeleteObject(hbmpChecked); DeleteObject(hbmpUnchecked);

PostQuitMessage(0); return 0; } default: break; } return DefWindowProc(hwnd, msg, wParam, lParam); }

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

hbmpLine1 = LoadBitmap(hInst, "LINE1"); hbmpLine2 = LoadBitmap(hInst, "LINE2"); hbmpLine3 = LoadBitmap(hInst, "LINE3"); hbmpLine4 = LoadBitmap(hInst, "LINE4"); hbmpLineStyle = LoadBitmap(hInst, "LINESTYLE"); hbmpChecked = LoadBitmap(hInst, "CHECKED"); hbmpUnchecked = LoadBitmap(hInst, "UNCHECKED");

Для строки "Demo Version" мы используем созданные нами и описанные в ресурсах приложения изображения bitmap, для чего вызываем функцию SetMenuItemBitmaps :

SetMenuItemBitmaps(hmenuFile, CM_FILEDEMO, MF_BYCOMMAND, hbmpUnchecked, hbmpChecked);

Далее мы отмечаем указанную строку:

CheckMenuItem(hmenuFile, CM_FILEDEMO, MF_BYCOMMAND | MF_CHECKED);

Затем мы переходим к формированию временного меню, содержащего графические изображения. Для этого в меню hmenuLineStyle, созданное ранее как пустое, мы добавляем четыре строки:

AppendMenu(hmenuLineStyle, MF_ENABLED | MF_BITMAP, CM_LINE1, (LPCSTR)(DWORD)hbmpLine1); AppendMenu(hmenuLineStyle, MF_ENABLED | MF_BITMAP, CM_LINE2, (LPCSTR)(DWORD)hbmpLine2); AppendMenu(hmenuLineStyle, MF_ENABLED | MF_BITMAP, CM_LINE3, (LPCSTR)(DWORD)hbmpLine3); AppendMenu(hmenuLineStyle, MF_ENABLED | MF_BITMAP, CM_LINE4, (LPCSTR)(DWORD)hbmpLine4);

Как видно из рис. 1.21, для строки "Line Style" используется нестандартный шрифт. Точнее говоря, для этой строки мы использовали изображение bitmap, на котором написаны слова "Line Style":

AppendMenu(hmenu, MF_ENABLED | MF_POPUP | MF_BITMAP, (UINT)hmenuLineStyle, (LPCSTR)(DWORD)hbmpLineStyle);

Перед завершением работы приложения мы удаляем все загруженные изображения bitmap для освобождения системных ресурсов:

DeleteObject(hbmpLine1); DeleteObject(hbmpLine2); DeleteObject(hbmpLine3); DeleteObject(hbmpLine4); DeleteObject(hbmpLineStyle); DeleteObject(hbmpChecked); DeleteObject(hbmpUnchecked);

Символические константы, использованные в приложении GMENU, описаны в файле gmenu.cpp (листинг 1.17).




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



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