Створення корисних можливостей для атрибутів шрифтів

Прикладом у цьому розділі описано виконання таких завдань:

Ці завдання є дослідження в контексті застосування, що включає меню Символ і відповідні корисні можливості, які дозволяють користувачеві вибрати атрибути поточного шрифту.

Така частина файлу ресурсів визначення визначає "Символ" та пов'язані прискорювач таблиці. Зауважте, що пункти меню Показати прискорювач натискання клавіш і що кожна прискорювач тим самим ідентифікатором, що свого пов'язаних меню.

# включити 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; 
} 
 

Index