000
08.04.2009, 11:21 Uhr
okraits
|
Hallo zusammen,
ich habe hier eine Applikation mit Toolbar, zu der ich nach den Standard-Buttons noch eigene Buttons hinzufügen möchte. Mein Code sieht folgendermaßen aus:
C++: |
HWND hwndToolBar = ::CreateWindowEx( 0, TOOLBARCLASSNAME, "", WS_CHILD | WS_CLIPCHILDREN | WS_CLIPSIBLINGS | TBSTYLE_FLAT | TBSTYLE_TOOLTIPS | CCS_NORESIZE, 0, 0, 100, heightTools, MainHWND(), reinterpret_cast<HMENU>(IDM_TOOLWIN), hInstance, 0); wToolBar = hwndToolBar;
::SendMessage(hwndToolBar, TB_BUTTONSTRUCTSIZE, sizeof(TBBUTTON), 0); ::SendMessage(hwndToolBar, TB_LOADIMAGES, IDB_STD_SMALL_COLOR, reinterpret_cast<LPARAM>(HINST_COMMCTRL));
TBADDBITMAP addbmp = { hInstance, IDR_CLOSEFILE }; ::SendMessage(hwndToolBar, TB_ADDBITMAP, 1, (LPARAM)&addbmp);
TBBUTTON tbb[ELEMENTS(bbs)]; for (unsigned int i = 0;i < ELEMENTS(bbs);i++) { if (bbs[i].cmd == IDM_CLOSE) tbb[i].iBitmap = STD_PRINT + 1; else tbb[i].iBitmap = bbs[i].id; tbb[i].idCommand = bbs[i].cmd; tbb[i].fsState = TBSTATE_ENABLED; if ( -1 == bbs[i].id) tbb[i].fsStyle = TBSTYLE_SEP; else tbb[i].fsStyle = TBSTYLE_BUTTON; tbb[i].dwData = 0; tbb[i].iString = 0; }
::SendMessage(hwndToolBar, TB_ADDBUTTONS, ELEMENTS(bbs), reinterpret_cast<LPARAM>(tbb));
std::map<int, SString> elements(GetToolsImages()); std::map<int, SString>::iterator it = elements.begin(); while (it != elements.end()) { HBITMAP h_bitmap; h_bitmap = (HBITMAP)LoadImage(NULL, ((*it).second).c_str(), IMAGE_BITMAP, 16, 16, LR_LOADFROMFILE);
TBADDBITMAP bitid; bitid.hInst = NULL; bitid.nID = (UINT)h_bitmap;
TBBUTTON tbbutton; tbbutton.iBitmap = SendMessage(hwndToolBar, TB_ADDBITMAP, 1, (long)&bitid); tbbutton.idCommand = (*it).first; tbbutton.fsState = TBSTATE_ENABLED; tbbutton.fsStyle = TBSTYLE_BUTTON; tbbutton.dwData = 0; tbbutton.iString = NULL;
SendMessage(hwndToolBar, TB_ADDBUTTONS, (WPARAM) 1, (LPARAM) (LPTBBUTTON) &tbbutton); it++; }
|
Ich habe mich an
www.c-plusplus.de/forum/viewtopic-var-t-is-111101.html
orientiert.
Zuerst wird die Toolbar erstellt, dann werden in der ersten for-Schleife die Standardbuttons aus einem Feld hinzugefügt, dann werden in der zweiten for-Schleife aus einer Map (ID und Pfad zum Image) die eigenen Buttons hinzugefügt.
Das Problem ist, daß für die eigenen Buttons nicht die übergebenen Images verwendet werden, sondern Images der Standard-Buttons.
Wenn ich mir tbbutton.iBitmap ausgeben lasse, so hat diese Variable die Werte 1, 2, usw. So wie ich das verstanden habe, müßte sie aber Indizes größer als die Indizes der Standard-Buttons haben.
Für jegliche Tipps wäre ich sehr dankbar! -- www.okraits.de/ Dieser Post wurde am 08.04.2009 um 11:23 Uhr von okraits editiert. |