Прапор | Опис |
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