Toolbar mit CreateWindowEx, TB_ADDBITMAP und der TBADDBITMAP struktur erstellen



  • ich habe jetzt für meine Anwendung eine Toolbar mit vordefinierten Buttons (Drucken, Speichern, Seitenvorschau usw.) fertig, die funktioniert auch wunderbar, soweit ich das beurteilen kann, auch wenn ich einige teile immer noch nicht verstehe. Meine Frage ist nun wie ich nun eigene Bitmaps verwenden kann. Ich habe es mal mit LoadImage versucht aber es klappt nicht hier ist mein versuchter Code bitte postet mal was falsch ist und was man besser machen kann:

    HWND CreateToolbar (HWND hWindow)
    {
        HWND toolbar;
        HIMAGELIST mi;
        INITCOMMONCONTROLSEX mc;
    
        //Struktur initialisieren
        memset (&mc, 0, sizeof (INITCOMMONCONTROLSEX));
        mc.dwSize = sizeof (INITCOMMONCONTROLSEX);
        mc.dwICC = ICC_BAR_CLASSES | ICC_WIN95_CLASSES;
    
        //Common Dialog initialisieren
        InitCommonControlsEx (&mc);
    
            //Toolbar erzeugen
        toolbar = CreateWindowEx (0, 
                                  TOOLBARCLASSNAME, 
                                  NULL, 
                                  WS_CHILD | WS_VISIBLE, 
                                  0, 0, 
                                  0, 0,
                                  hWindow, 
                                  (HMENU) "IDR_TOOLBAR", 
                                  hGlobInstance, 
                                  NULL);
    
        //Imageslist anlegen
        mi = ImageList_Create (16, 16, ILC_COLOR24, 0, 12);
    
        //Bilder in Imagesliste transferieren
        ImageList_Add(mi, LoadBitmap(hGlobInstance, MAKEINTRESOURCE("IDB_BITMAP1")),NULL);
    
        //initialisierung durch Initialisierungsliste
        TBBUTTON toolbutton [] =
    
        {
    
            {STD_FILENEW,    IDM_NEW,        TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0},  //Neu
            {STD_FILEOPEN,   IDM_LOAD,       TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0},  //Laden
            {STD_PRINT,      IDM_PRINT,      TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0},  //Drucken
            {STD_FILESAVE,   IDM_SAVE,       TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0},  //Speichern
            {STD_COPY,       IDM_COPY,       TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0},  //Kopieren
            {STD_DELETE,     IDM_DELETE,     TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0},  //Löschen
            {STD_PASTE,      IDM_PASTE,      TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0},  //Einfügen
            {STD_CUT,        IDM_CUT,        TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0},  //Hinstory
            {STD_FIND,       IDM_FIND,       TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0},  //find
            {STD_HELP,       IDM_HELP,       TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0},  //Hilfe
            {STD_PRINTPRE ,  IDM_PRINTVIEW,  TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0},  //Konsole 
            {STD_PROPERTIES, IDM_PROPERTY,   TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0},  //Programm beenden 
            {STD_REDOW,      IDM_REDOW,      TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0},  //wiederholen
            {STD_REPLACE,    IDM_REPLACE,    TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0},  //weitersuchen
            {STD_UNDO,       IDM_UNDO,       TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0},  //rückgängig
            {IDB_BITMAP1,    IDM_CONSOLE,    TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0}, //Konsole
            //{}, //userinformation
            //{}, //Exit
            //{}, //Verbinden
            //{}  //trennen
        };
    
        //Button anzeigen
        SendMessage(toolbar, TB_SETIMAGELIST, 0, (LPARAM) mi);
    
        SendMessage (toolbar, TB_INSERTBUTTON, 0, (LPARAM) (LPTBBUTTON) &toolbutton[0]);  //neu
        SendMessage (toolbar, TB_INSERTBUTTON, 0, (LPARAM) (LPTBBUTTON) &toolbutton[1]);  //laden
        SendMessage (toolbar, TB_INSERTBUTTON, 0, (LPARAM) (LPTBBUTTON) &toolbutton[2]);  //drucken
        SendMessage (toolbar, TB_INSERTBUTTON, 0, (LPARAM) (LPTBBUTTON) &toolbutton[3]);  //speichern
        SendMessage (toolbar, TB_INSERTBUTTON, 0, (LPARAM) (LPTBBUTTON) &toolbutton[4]);  //Kopieren
        SendMessage (toolbar, TB_INSERTBUTTON, 0, (LPARAM) (LPTBBUTTON) &toolbutton[5]);  //Löschen
        SendMessage (toolbar, TB_INSERTBUTTON, 0, (LPARAM) (LPTBBUTTON) &toolbutton[6]);  //einfügen
        SendMessage (toolbar, TB_INSERTBUTTON, 0, (LPARAM) (LPTBBUTTON) &toolbutton[7]);  //ausschneiden
        SendMessage (toolbar, TB_INSERTBUTTON, 0, (LPARAM) (LPTBBUTTON) &toolbutton[8]);  //finden
        SendMessage (toolbar, TB_INSERTBUTTON, 0, (LPARAM) (LPTBBUTTON) &toolbutton[9]);  //hilfe
        SendMessage (toolbar, TB_INSERTBUTTON, 0, (LPARAM) (LPTBBUTTON) &toolbutton[10]); //druckvorschau
        SendMessage (toolbar, TB_INSERTBUTTON, 0, (LPARAM) (LPTBBUTTON) &toolbutton[11]);  //eigenschaften
        SendMessage (toolbar, TB_INSERTBUTTON, 0, (LPARAM) (LPTBBUTTON) &toolbutton[12]);   //wiederholen
        SendMessage (toolbar, TB_INSERTBUTTON, 0, (LPARAM) (LPTBBUTTON) &toolbutton[13]);   //weitersuchen 
        SendMessage (toolbar, TB_INSERTBUTTON, 0, (LPARAM) (LPTBBUTTON) &toolbutton[14]);   //rückgängig
    
        SendMessage (toolbar, TB_INSERTBUTTON, 0, (LPARAM)(LPTBBUTTON) &toolbutton[15]);  //Konsole
    
        // Send the TB_BUTTONSTRUCTSIZE message, which is required for backward compatibility.
        SendMessage(toolbar, TB_BUTTONSTRUCTSIZE, (WPARAM) sizeof (TBBUTTON), 0);
    
        //Bitmapstruktur anlegen
        TBADDBITMAP mybit;
        memset (&mybit, 0, sizeof (TBADDBITMAP));
        mybit.hInst = HINST_COMMCTRL;
        mybit.nID = IDB_STD_SMALL_COLOR  ;
    
        TBADDBITMAP dabit;
        HBITMAP mybitmap = (HBITMAP) LoadImage (0, 
                                                "icons.bmp",
                                                IMAGE_BITMAP,
                                                0,0,  
                                                LR_LOADFROMFILE | LR_DEFAULTSIZE | LR_CREATEDIBSECTION);
    
        memset (&dabit, 0, sizeof (TBADDBITMAP));
        dabit.hInst = NULL;
        dabit.nID = (UINT) mybitmap;
    
        int n = SendMessage (toolbar, TB_ADDBITMAP, 0, (LPARAM) &mybit);
        n = SendMessage (toolbar, TB_ADDBITMAP, 1, (LPARAM) &dabit);
    
        //Fensterhandle zurückliefern
        return toolbar;
    
    }
    

    auch wenn der Code schon länger geworden ist danke ich euch schonmal für eure Hilfe. Achja, auf Kommentare wie nerv nicht oder du bist ja so schlecht kann ich verzichten, für kontruktive Kritik bin ich immer offen.

    Müssen die Bitmaps eigendlich eine Abmessung von 16x16 Pixel haben oder ist das egal?! was passiert wenn sie nicht auf den Button passen (zu groß oder zu klein sind) werden sie dann trotzdem angezeigt oder nicht?

    Vielen Dank schonmal im Vorraus.

    Cu Para


Anmelden zum Antworten