Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Ch-10.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
681.98 Кб
Скачать

Соберем все вместе

В функции WinMain программы GRAFMENU при создании меню используются функции StretchBitmap и GetBitmapFont. В программе GRAFMENU имеется два меню, определенных ранее в файле описания ресурсов. Они станут всплывающими меню для опций File и Edit.

Программа GRAFMENU начинается с получения описателя пустого меню:

hMenu = CreateMenu () ;

Всплывающее меню File (содержащее четыре опции New, Open, Save и Save As) загружается из файла описания ресурсов:

hMenuPopup = LoadMenu (hInstance, "MenuFile") ;

Битовый образ, в котором содержится слово "FILE", также загружается из файла описания ресурсов, а затем с помощью функции StretchBitmap, увеличивается его размер:

hBitmapFile = StretchBitmap (LoadBitmap (hInstance, "BitmapFile")) ;

Описатели битового образа и всплывающего меню становятся параметрами функции AppendMenu:

AppendMenu (hMenu, MF_BITMAP | MF_POPUP, (int) hMenuPopup,

(PSTR) (LONG) hBitmapFile) ;

Аналогичные действия выполняются для меню Edit:

hMenuPopup = LoadMenu (hInstance, "MenuEdit") ;

hBitmapEdit = StretchBitmap (LoadBitmap (hInstance, "BitmapEdit")) ;

AppendMenu (hMenu, MF_BITMAP | MF_POPUP, (int) hMenuPopup,

(PSTR) (LONG) hBitmapEdit ) ;

Всплывающее меню трех шрифтов создается при последовательных вызовах функции GetBitmapFont :

hMenuPopup = CreateMenu () ;

for (i = 0 ; i < 3 ; i++)

{

hBitmapPopFont[i] = GetBitmapFont (i) ;

AppendMenu (hMenuPopup, MF_BITMAP, IDM_COUR + i,

(PSTR) (LONG) hMenuPopupFont[i]) ;

}

Затем всплывающее меню добавляется к основному меню:

hBitmapFont = StretchBitmap (LoadBitmap (hInstance, "BitmapFont")) ;

AppendMenu (hMenu, MF_BITMAP | MF_POPUP, (int) hMenuPopup,

(PSTR) (LONG) hBitmapFont) ;

Меню окна готово. Теперь можно включить описатель меню hMenu в вызов функции CreateWindow:

hwnd = CreateWindow (szAppName, "Bitmap Menu Demonstration",

WS_OVERLAPPEDWINDOW,

CW_USEDEFAULT, CW_USEDEFAULT,

CW_USEDEFAULT, CW_USEDEFAULT,

NULL, hMenu, hInstance, NULL) ;

После получения hwnd, программа GRAFMENU может изменить системное меню. Сначала программа получает его описатель:

hMenu = GetSystemMenu (hwnd, FALSE) ;

Следующая инструкция загружает битовый образ "Help" и увеличивает его до соответствующего размера:

hBitmapHelp = StretchBitmap (LoadBitmap (hInstance, "BitmapHelp")) ;

Теперь к системному меню добавляется разделитель и увеличенный битовый образ:

AppendMenu (hMenu, MF_SEPARATOR, NULL, NULL) ;

AppendMenu (hMenu, MF_BITMAP, IDM_HELP,

(PSTR) (LONG) hBitmapHelp) ;

Запомните, что битовые образы являются объектами GDI и должны быть явно удалены при завершении программы. В программе GRAFMENU эта задача решается после выхода из цикла обработки сообщений:

DeleteObject (hBitmapHelp) ;

DeleteObject (hBitmapEdit) ;

DeleteObject (hBitmapFile) ;

DeleteObject (hBitmapFont) ;

for (i = 0 ; i < 3 ; i++)

DeleteObject (hBitmapPopFont[i]) ;

В заключении раздела приведем несколько общих замечаний:

  • Высоту панели главного меню Windows изменяет таким образом, чтобы туда уместился самый высокий битовый образ. Другие битовые образы (или символьные строки) выравниваются по верхней границе панели меню. Размер панели меню, полученный от функции:

GetSystemMetrics (SM_CYMENU)

  • изменяется, поскольку в меню добавлены битовые образы.

  • При работе с программой GRAFMENU, можно использовать метки пунктов всплывающих меню, заданных в виде битовых образов, но метки при этом имеют обычный размер. Если это вам не нравится, то можно создать свои метки и использовать функцию SetMenuItemBitmaps.

  • Другим подходом к использованию в меню не текста (или текста, набранного не системным шрифтом) является меню, отображаемое владельцем (owner-draw).

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]