Бітові прапори, що визначають поводження й вид елемента меню

Прапор Опис
MF_BITMAP Замість рядка в якості меню застосовується bitmap
MF_BYCOMMAND Значення, наведене в параметрі uItem функції EnabledMenuItem, являє собою ідентифікатор пункту меню
MF_BYPOSITION Значення, наведене в параметрі uItem функції EnabledMenuItem, являє собою відносну позицію пункту меню зі звітом від нуля
MF_CHECKED Елемент відмічуваний (з "значком")
MF_DISABLED Елемент заборонений
MF_GRAYED Елемент заборонений і відображається сірими кольорами
MF_HILITE Елемент підсвічений
MF_MENUBREAK Горизонтальні меню розміщають наступні елементи в новому рядку, а вертикальні – у новому стовпці
MF_MENUBARBREAK Те ж, що й попереднє, але у випадку вертикального меню стовпці розділяють вертикальною лінією
MF_MOUSESELECT Елемент обраний мишею
MF_OWNERDRAW За промальовування елемента відповідає не система, а програма
MF_POPUP Елемент викликає поява POPUP-меню більше низького рівня
MF_SEPARATOR Горизонтальна риса
MF_STRING Як елементи меню використається рядок символів
MF_SYSMENU Елемент із системного меню

 

Вибір довільного пункту меню може в операційній системі Windows супроводжуватися комбінацією клавіш. У цьому випадку пункт меню вибирається автоматично. При виконанні лабораторної роботи варто врахувати:

- по-перше, необхідність створення у файлі ресурсів таблиці гарячих клавіш;

- по-друге, можливість використання як клавіші або код ASCII-символу, або код віртуальної клавіші (VK);

- по-третє, можливість використання при комбінуванні клавіш керування SHIFT, CTRL або ALT.

Крім того, кожне натискання комбінації оперативних клавіш генерує повідомлення WM_COMMAND. Для перетворення в циклі обробки повідомлень програми уведених комбінацій у команди, зазначені в таблиці оперативних клавіш, застосовується функція TranslateAccelerator().

Якщо функція TranslateAccelerator() повертає ненульове значення, це означає, що вона успішно перетворила комбінацію клавіш і відправила команду у функцію обробки повідомлень програми. Додаток не повинне повторно дозволяти звичайним функціям TranslateMessage() і DispatchMessage() повторно обробляти ці комбінації клавіш. Для запобігання такої ситуації в циклі обробки повідомлень програми у функції WinMain() повинна застосовуватися наступна структура

while( GetMessage( &msg, NULL, 0, 0) )

{

if (!hAccel || !TranslateAccelerator(hWnd, hAccel, &msg))

{

TranslateMessage( &msg );

DispatchMessage( &msg );

}

}

Для того щоб відобразити інформацію про поточний стан програми, виконуваних операціях і режимах, у ній може використатися елемент керування, що називають вікном або рядком стану (status bar).

Рядок стану може бути включена в опис діалогового вікна у файлі ресурсів. Але тому що вікно стану є стандартним вікном, те, природно, що для його створення можуть бути використані функції й стандартні функції CreateWindow() і CreateWindowEX(). При цьому як ім'я класу вікна необхідно задати "STATUSCLASSNAME". Проте, для створення вікна стану передбачена й окрема функція CreateStatusWindow().

ПРОсобенность цієї функції й, природно, рядка стану виступає їсти єдиний власний стиль, SBARS_SIZEGRIP, що дозволяє в правий кут рядка стану додати "ручку". Однак наявність у рядка стану єдиного стилю не заважає комбінувати його зі стандартними стилями вікон, наприклад, з WS_CHILD й WS_VISIBLE.

Після того, як рядок стану промальований, іноді буває необхідно розділити її на кілька панелей для того, щоб у кожній панелі відображати інформацію, логічно не пов'язану з відображуваної в інших панелях. Для того щоб зробити це, необхідно послати рядку стану повідомлення SB_SETPARTS. При цьому wParam цього повідомлення повинен визначати число панелей, a lParam повинен містити покажчик на масив цілих чисел (число елементів масиву повинне бути дорівнює wParam). Кожен елемент у цьому масиві повинен визначати позицію (у координатах батьківського вікна) правої границі відповідної частини. Якщо елемент дорівнює -1, то границею панелі вважається права границя рядка стану.

Додаток може визначити число панелей, на які розділений рядок стану, і їхньої координати за допомогою повідомлення SB_GETPARTS. Якщо lParam цього повідомлення дорівнює нулю, то функція, що послала повідомлення, повертає число панелей рядка її стану. При цьому значення wParam ролі не грає. Для того щоб одержати координати панелей, wParam повинен визначати панелей, для яких потрібно одержати координати. А lParam повинен указувати на масив цілих чисел, у який будуть записані координати. У цьому випадку функція також повертає число панелей

Для того щоб відобразити певний текст у рядку стану, потрібно послати їй повідомлення SB_SETTEXT. У якості wParam цього повідомлення використається результат логічного додавання двох величин. Перша (iPart) - номер (уважаючи від нуля) панелі, у якій необхідно відобразити текст. Друга (uтуре) визначає, як буде виглядати текст. У якості uType можуть бути використані значення, наведені в табл. 7.2.

 

Таблиця 7.2