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