Icon in Toolbar einfügen // Transparentes Icon in Toolbar einfügen
-
Hallo,
Ich versuch grade ein selbstgezeichnetes Icon in eine Toolbar einzufügen.
Dazu habe ich das Bspl. aus der FAQ angepasst, aber in der Toolbar erscheint nur ein weißes Quadrat.
und so lade ich das Icon:h_bitmap = LoadImage(NULL, File, IMAGE_ICON, 16, 16, LR_LOADFROMFILE);GetLastError liefert 0.
Und so füge ich es zur Toolbar hinzu.
bitid.hInst = NULL; bitid.nID = (UINT)h_bitmap; tbbutton.iBitmap = SendMessage(hWndTB, TB_ADDBITMAP, 1, (long)&bitid); tbbutton.idCommand = CmdId; tbbutton.fsState = TBSTATE_ENABLED; tbbutton.fsStyle = TBSTYLE_BUTTON; tbbutton.dwData = 0; tbbutton.iString = 0; SendMessage(hWndTB, TB_ADDBUTTONS, (WPARAM) 1, (LPARAM) (LPTBBUTTON) &tbbutton);Weiß jemand woran das liegt?
MfG gosha16
-
Hi,
also ich hatte auch mal das Problem eigene Bitmaps auf ne Toolbar zu kriegen.
Ich poste hier einfach mal mein Beispielcode:
// eigene Toolbar TBBUTTON Btn; Btn.idCommand = 0; Btn.fsStyle = TBSTYLE_SEP; Btn.fsState = TBSTATE_ENABLED; Btn.iString = 0; Btn.iBitmap = 0; Btn.dwData = 0; if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC)) { TRACE0("Fehler beim Erstellen der Symbolleiste.\n"); return -1; // Fehler beim Erstellen } CBitmap bm; m_img.Create(16, 16, ILC_COLOR32, 7, 0); m_wndToolBar.SetButtons(NULL, 7); m_wndToolBar.GetToolBarCtrl().InsertButton(0, &Btn); // Separator einfügen bm.LoadBitmap(MAKEINTRESOURCE(IDB_NEWDOC)); m_img.Add(&bm, RGB(0,0,0)); m_wndToolBar.SetButtonInfo(1, ID_FILE_NEW, TBSTYLE_BUTTON, 0); m_wndToolBar.GetToolBarCtrl().InsertButton(2, &Btn); ::SendMessage(m_wndToolBar, TB_CHANGEBITMAP, (WPARAM)(int)ID_FILE_NEW, (LPARAM) (UINT)0);Ich erstell mir meine Toolbar hier "händisch". Die Bitmaps sind alle 32bit, 16x16 und sind als Ressourcen in meinem Projekt hinzugefügt.
Meine Toolbar kriegt 7 Buttons, der Button wird eingefügt, vorher noch ne Imagelist erstellt und die Bitmaps hinzugefügt.
Und dann per Sendmessage sage ich, dass das Bitmap auf den Button kommt.Wenn ich mit dem Hinzufügen fertig bin, binde ich noch meine Imagelist an meine Toolbar:
m_wndToolBar.GetToolBarCtrl().SetImageList(&m_img); // Imagelist an Toolbar bindenund bin dann fertig und es funktioniert.

Du könntest sogar per SetHotImageList ne weitere List hinzufügen mit Bitmaps, die beim Mouseover über einen bestimmten Toolbarbutton angezeigt werden.
Soviel dazu...
-
Erstmal danke für die Antwort, aber ich benutze kein C++.
Und ich habs mal mit TB_CHANGEBITMAP versucht. Button bleibt weiß. Ich denke es liegt an LoadImage.
-
gosha16 schrieb:
...aber ich benutze kein C++.
Sieht aber danach aus.
Versuchs mal mit: http://www.sibcode.com/icon-editor/ da kannst du Bilder in Icons konvertieren.
Ist außerdem ein guter Icon Editor glaube ich, hab ihn noch nicht viel benutzt.
-
Halbexperte schrieb:
gosha16 schrieb:
...aber ich benutze kein C++.
Sieht aber danach aus.
Ich wüsste nicht wo.
Aber ich habe jetzt heraus gefunden woran es lag, läd man ein Icon wird ein HICON Handle zurückgeliefert, und kein HBITMAP.
hIcon = LoadImage(NULL, File, IMAGE_ICON, 16, 16, LR_LOADFROMFILE | LR_LOADTRANSPARENT); GetIconInfo(hIcon, & iconInfo); hBitmap = iconInfo.hbmColor;Nun leider habe ich immer noch ein Problem... der Iconhintergrund ist nicht Transparent in der Toolbar.
Hat dazu vllt. jemand eine Idee?

-
Naja das "(long)&bitid" sah mir danach aus. Könnte aber auch ne andere Sprache sein, kA beschäftige mich nur mit C++.
Welche ist es denn?
-
Es ist C, und die unnötigen Casts hab ich auch schon entfernt. Der Quellcode ganz oben war z.T. aus der FAQ.
//Edit:
habs mehr oder weniger gelöst.Habe statt:
hBitmap = iconInfo.hbmColor;hBitmap = iconInfo.hbmMask;genommen, nun ist das Icon zwar transparent, aber hat nur noch schwarz weiß.
-
Du kannst halt nur Bitmaps in die Toolbar einfügen und Icons sind keine Bitmaps sondern "Bitmaps mit Transparenz".
-
Probier mal die BMP mit Bittiefe 8 (256 Farben)
mfg Maxx175
-
h_bitmap = (HBITMAP)LoadImage(GetModuleHandle (NULL), MAKEINTRESOURCE(ID_BMP), IMAGE_BITMAP, 0, 0, LR_DEFAULTCOLOR| LR_LOADMAP3DCOLORS |LR_LOADTRANSPARENT); bitid.nID = (UINT_PTR)h_bitmap;bei mir funzt es so