Napríklad položka ponuky bitové mapy

Napríklad v tejto téme vytvorí dve ponuky obsahujú niekoľko položiek ponuky bitová mapa. Pre každú menu aplikácie pridá zodpovedajúce názov ponuky na hlavnom okne s ponukami.

Prvé menu obsahuje položky menu zobrazujúce každý z troch typov grafov: koláč, riadok a bar. Bitové mapy pre tieto položky ponuky sú definované ako zdroje a sú načítané pomocou LoadBitmap funkciu. Spojené s touto ponukou je "Graf" názov ponuky na paneli s ponukami.

Druhá ponuka obsahuje položky menu zobrazujúci každej z piatich riadok štýly použité s CreatePen funkciou: PS_SOLID, PS_DASH, PS_DOT, PS_DASHDOT, a PS_DASHDOTDOT. Aplikácia vytvára bitové mapy pre tieto položky ponuky v čase spustenia pomocou GDI Kreslenie funkcie. Spojené s touto ponukou je "Riadkov" názov ponuky na paneli s ponukami.

Definované v podávaní okne sú dve statické polia kľučiek bitová mapa. Jednu anténovú sústavu obsahuje rukoväte troch rastrové využívaného ponuka Graf. Druhý obsahuje rukoväte päť rastre používa pre ponuky riadky. Pri spracovaní správ WM_CREATE okno postup načíta bitové mapy graf, vytvorí riadok bitové mapy a potom pridá príslušné položky menu. Pri spracovaní správ WM_DESTROY postupu okno odstráni všetky bitové mapy.

Nasledujú príslušných častí aplikácie hlavička súboru.

/ / Položka ponuky identifikátory # define IDM_PIE 1 # define IDM_LINE 2 # define IDM_BAR 3 # define IDM_SOLID 4 # define IDM_DASH 5 # define IDM_DASHDOT 6 # define IDM_DASHDOTDOT 7 / / počet položiek grafu a riadky ponukách # define C_LINES 5 # define C_CHARTS 3 / / bitmapové zdrojov identifikátory # define IDB_PIE 1 # define IDB_LINE 2 # define IDB_BAR 3 / / rozmery bitmáp riadok # define CX_LINEBMP 40 # define CY_LINEBMP 10 
 

Nasledujú príslušných častí okno postupu. Okno postup vykonáva väčšina jeho Inicializácia volaním definovanom aplikáciou LoadChartBitmaps, CreateLineBitmaps a AddBitmapMenu funkcie opísané neskôr v tejto téme.

Spätné volanie LRESULT MainWindowProc (HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {statické HBITMAP aHbmLines [C_LINES]; 
    statické HBITMAP aHbmChart [C_CHARTS]; 
    int som; 
 
    prepínač (uMsg) {prípad WM_CREATE: / / hovorové definovanom aplikáciou funkcie Načítať / / bitové mapy pre ponuka Graf a vytvoriť pre / / menu riadky. 
 
            LoadChartBitmaps(aHbmChart); 
            CreateLineBitmaps(aHbmLines); 
 
             / / Zavolať funkciu definovanom aplikáciou na vytváranie / / ponuky obsahujúce položky menu bitová mapa. Funkcia / / tiež pridá názov ponuky v okne panel s ponukami. 
 
            AddBitmapMenu (hwnd, / / menu bar vlastník okno "amp;Graf", / / text ponuky názov v ponuke baru IDM_PIE, / / ID pre prvú položku v ponuke aHbmChart / / pole bitová mapa kľučky C_CHARTS / počet položiek v ponuke); 
            AddBitmapMenu (hwnd, "& riadky", IDM_SOLID, aHbmLines, C_LINES); 
            prerušiť; 
 
        prípad WM_DESTROY: na (i = 0; som < C_LINES; i ++) DeleteObject(aHbmLines[i]); 
            pre (i = 0; som < C_CHARTS; i ++) DeleteObject(aHbmChart[i]); 
            PostQuitMessage(0); 
            prerušiť; 
 
        / / Procese dodatočnú správy tu. 
 
        predvolené: návrat (DefWindowProc (hwnd, uMsg, wParam, lParam)); 
    } Vráti hodnotu 0; 
} 
 

LoadChartBitmaps funkcia definovaná aplikácie načte bitová mapa zdroje pre ponuka Graf volaním LoadBitmap funkcia takto.

Neplatný WINAPI LoadChartBitmaps(HBITMAP *paHbm) {paHbm [0] = LoadBitmap (g_hinst, MAKEINTRESOURCE(IDB_PIE)); 
    paHbm [1] = LoadBitmap (g_hinst, MAKEINTRESOURCE(IDB_LINE)); 
    paHbm [2] = LoadBitmap (g_hinst, MAKEINTRESOURCE(IDB_BAR)); 
} 
 

CreateLineBitmaps funkcia definovaná aplikácia vytvorí bitové mapy pre riadky menu pomocou GDI Kreslenie funkcií. Funkcia vytvorí rámci pamäťové zariadenia (DC) s rovnaké vlastnosti ako pozadia okna DC. Pre každý štýl čiary funkciu vytvára bitovú mapu, vyberie do pamäte DC a čerpá v ňom.

Neplatný WINAPI Create&LineBitmaps(HBITMAP *paHbm) {HWND hwndDesktop = GetDesktopWindow(); 
    HDC hdcDesktop = GetDC(hwndDesktop); 
    HDC hdcMem = CreateCompatibleDC(hdcDesktop); 
    COLORREF clrMenu = GetSysColor(COLOR_MENU); 
    HBRUSH hbrOld; 
    HPEN hpenOld; 
    HBITMAP hbmOld; 
    int fnDrawMode; 
    int som; 
 
     / / Create kefa pomocou menu Farba pozadia, / / a vyberte ju do pamäte DC. 
 
    hbrOld = VybraťObjekt (hdcMem, CreateSolidBrush(clrMenu)); 
 
     / / Create bitové mapy. Vyberte každú z nich do pamäte / DC, bola vytvorená a kresliť v ňom. 
 
    pre (i = 0; som lt; C_LINES; i ++) {/ / vytvorte bitovú mapu a vyberte do DC. 
 
        paHbm, [i] = CreateCompatibleBitmap (hdcDesktop, CX_LINEBMP, CY_LINEBMP); 
        hbmOld = VybraťObjekt (hdcMem, paHbm[i]); 
 
        / / Výplň pozadia pomocou štetcom. 
 
        PatBlt (hdcMem, 0, 0, CX_LINEBMP, CY_LINEBMP, PATCOPY); 
 
        / / Vytvorte pero a vyberte do DC. 
 
        hpenOld = VybraťObjekt (hdcMem, CreatePen (PS_SOLID + ja, 1, RGB (0, 0, 0))); 
 
         / / Nakreslite čiaru. Ak chcete zachovať farbu pozadia kde / / pero je biely, použite R2_MASKPEN re3im kreslenia. 
 
        fnDrawMode = SetROP2 (hdcMem, R2_MASKPEN); 
        MoveToEx (hdcMem, 0, CY_LINEBMP/2, NULL); 
        LineTo (hdcMem, CX_LINEBMP, CY_LINEBMP/2); 
        SetROP2 (hdcMem, fnDrawMode); 
 
        / / Odstrániť pero a vyberte starú pero a bitová mapa. 
 
        OdstrániťObjekt (VybraťObjekt (hdcMem, hpenOld)); 
        VybraťObjekt (hdcMem, hbmOld); 
    } / / Odstrániť nástroj štetec a vyberte pôvodné štetcom. 
 
    OdstrániťObjekt (VybraťObjekt (hdcMem, hbrOld)); 
 
    / / Vymazať pamäť DC a uvoľnenie pozadia DC. 
 
    DeleteDC(hdcMem); 
    ReleaseDC (hwndDesktop, hdcDesktop); 
} 
 

AddBitmapMenu funkcia definovaná aplikácia vytvára ponuku a pridá zadaný počet položiek ponuky bitová mapa. Potom pridá príslušné názov ponuky na zadané okno s ponukami.

 VOID WINAPI AddBitmapMenu (HWND hwnd, / / okno, vlastnené ponukami ukončený nulou LPSTR lpszText / / text ponuky názov v ponuke baru UINT uID, / / ID prvé bitová mapa menu položka HBITMAP * paHbm, / / bitové mapy pre ponuku položiek int cItems) / / číslo bitovej mapy položky menu {HMENU hmenuBar = GetMenu(hwnd); 
    HMENU hmenuPopup = CreatePopupMenu(); 
    MENUITEMINFO mii; 
    int som; 
 
    / / Pridať položky menu bitovej mapy do ponuky. 
 
    pre (i = 0; som lt; cItems; i ++) {mii.fMask = MIIM_ID | MIIM_TYPE | MIIM_DATA; 
        mii.fType = MFT_BITMAP; 
        mii.wID = uID + i; 
        mii.dwTypeData = ukončený nulou (LPSTR) (paHbm[i]); 
        InsertMenuItem (hmenuPopup, i pravda & mii); 
    } / / Pridať názov ponuky na paneli s ponukami. 
 
    mii.fMask = MIIM_TYPE | MIIM_DATA | MIIM_SUBMENU; 
    mii.fType = MFT_STRING; 
    mii.hSubMenu = hmenuPopup; 
    mii.dwTypeData = lpszText; 
    InsertMenuItem (hmenuBar, GetMenuItemCount(hmenuBar), pravda & mii); 
} 
 

Index