Прикладом у цьому розділі описано виконання таких завдань:
Ці завдання є дослідження в контексті застосування, що включає меню Символ і відповідні корисні можливості, які дозволяють користувачеві вибрати атрибути поточного шрифту.
Така частина файлу ресурсів визначення визначає "Символ" та пов'язані прискорювач таблиці. Зауважте, що пункти меню Показати прискорювач натискання клавіш і що кожна прискорювач тим самим ідентифікатором, що свого пов'язаних меню.
# включити lt;windows.h > # включити "acc.h" MainMenu меню {СПЛИВАЮЧИХ "& характер" {MENUITEM "& Regular\tF5", IDM_REGULAR елемент меню "& Bold\tCtrl + B", IDM_BOLD елемент меню "& Italic\tCtrl + I", IDM_ITALIC елемент меню "& Underline\tCtrl + U", IDM_ULINE}
} ПРИСКОРЮВАЧІ FontAccel {VK_F5, IDM_REGULAR, VIRTKEY "B", IDM_BOLD, керування, VIRTKEY "Я", IDM_ITALIC, керування, VIRTKEY "U", IDM_ULINE, керування, VIRTKEY}
У наведених нижче розділах з файлу джерела програми показати те, як здійснювати на прискорювачі.
HWND hwndMain; // handle to main window
HANDLE hinstAcc; // handle to application instance
int WINAPI WinMain(HINSTANCE hinst, HINSTANCE hinstPrev, LPSTR lpCmdLine, int nCmdShow)
{
MSG msg; // application messages
HACCEL haccel; // handle to accelerator table
// Perform the initialization procedure.
// Create a main window for this application instance.
hwndMain = CreateWindowEx(0L, "MainWindowClass",
"Sample Application", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT,
CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL,
hinst, NULL );
// If a window cannot be created, return "failure."
if (!hwndMain)
return FALSE;
// Make the window visible and update its client area.
ShowWindow(hwndMain, nCmdShow);
UpdateWindow(hwndMain);
// Load the accelerator table.
haccel = LoadAccelerators(hinstAcc, "FontAccel");
if (haccel == NULL)
HandleAccelErr(ERR_LOADING); // application defined
// Get and dispatch messages until a WM_QUIT message is
// received.
while (GetMessage(&msg, NULL, NULL, NULL))
{
// Check for accelerator keystrokes.
if (!TranslateAccelerator(
hwndMain, // handle to receiving window
haccel, // handle to active accelerator table
&msg)) // address of message data
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
return msg.wParam;
}
LRESULT APIENTRY MainWndProc(HWND hwndMain, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
BYTE fbFontAttrib; // array of font-attribute flags
static HMENU hmenu; // handle to main menu
switch (uMsg)
{
case WM_CREATE:
// Add a check mark to the Regular menu item to
// indicate that it is the default.
hmenu = GetMenu(hwndMain);
CheckMenuItem(hmenu, IDM_REGULAR, MF_BYCOMMAND |
MF_CHECKED);
return 0;
case WM_COMMAND:
switch (LOWORD(wParam))
{
// Process the accelerator and menu commands.
case IDM_REGULAR:
case IDM_BOLD:
case IDM_ITALIC:
case IDM_ULINE:
// GetFontAttributes is an application-defined
// function that sets the menu-item check marks
// and returns the user-selected font attributes.
fbFontAttrib = GetFontAttributes(
(BYTE) LOWORD(wParam), hmenu);
// SetFontAttributes is an application-defined
// function that creates a font with the
// user-specified attributes the font with
// the main window's device context.
SetFontAttributes(fbFontAttrib);
break;
default:
break;
}
break;
// Process other messages.
default:
return DefWindowProc(hwndMain, uMsg, wParam, lParam);
}
return NULL;
}