Toolbar vergrössern ...
-
Ich habe in einem CFrameWnd Fenster eine Toolbar mit vier Schaltflächen
eingebaut. Folgendermasen:class "Name" : CFrameWnd
CToolBar toolbar;Konstruktor:
toolbar.Create(this);
toolbar.LoadToolBar(IDR_TOOLBAR1),Es erscheint eine Toolbar mit 16 x 15 Pixel grossen Schaltflächen.
Ich wollte sie vergrössern auf 50 x 50 Pixel, und mit einer Bitmap überzeichnen.
Folgendes hat nicht geklappt:
Im Konstruktor:SIZE size1, size2;
size1.cx = 16;
size1.cy = 15;
size2.cx = 50;
size2.cy = 50;toolbar.SetHeigh(50);
toolbar.SetSizes(size1, size2);
toolbar.LoadBitmap("Bitmap.bmp");Bitmap.bmp hat eine Grösse von 200 x 50 Pixel, dürfte also genau über
die Toolbar passen. Wie geht es richtig ?
-
ich erstelle meine toolbars immer so das ich ein ImageList erstelle
// imagelist und toolbar in der klasse erstellen
CImageList ToolBarImage1;
CToolBar m_wndToolBar1;//imagelist erstellen und fuellen
ToolBarImage1.Create(16, 16, ILC_COLOR32, 1, 6);
ToolBarImage1.Add(AfxGetApp()->LoadIcon(IDI_ICON));// imagelist an toolbar weisen
m_wndToolBar1.GetToolBarCtrl().SetImageList(&ToolBarImage1);in der "ILC_COLOR32" erstellste du die bit tiefe, und mit den ersten parametern die groesse, schau dir einfach die imagelisten selber an
die reihenfolge der icons in der imagelist und der toolbar muessen nur 1 zu 1 sein
-
Wie weise ich dann den Schaltflächen einen Eventhandler zu ?
-
die toolbar wird doch weiterhin per
m_wndToolBar1.LoadToolBar(IDR_BAR1)
erstellt
und danach die imagelist als aussehen drueber gelegt
man kann weiterhin eine id vergeben und dannON_COMMAND(...)
also
in der klasse toolbar und imagelist deklarieren
imagelist initialisieren und fuellen
nach der toolbar erstellung {mit LoadToolbar aus der resource heraus} die imagelist zuweisen {das aussehen der toolbar in der rc ist nun unwichtig, wird ueberdeckt mit den images}
ON_COMMAND verwenden mit den ID's der toolbar elemente
nix problem woischt #gg
-
So einfach wie das klingt, ist es bei mir nicht. Mein CFrameWnd-Fenster
ist nicht vom Framework generiert, sondern "selbst" erstellt.
Muss man vielleicht bei der CFrameWnd Klasse irgend etwas einstellen ?
-
Wo muss der oben gezeigte Code hin ?
In den Konstruktor der CFrameWnd-Klasse ?
-
eine toolbar mit 5 elementen welche icons bekommen sollen
die toolbar ist als "IDR_BAR1" in der resource hinzugefuegt, und ein element davon hat die id "ID_DOIT"/*Snipp*/
MainFrm.h
class CMainFrame : public CFrameWnd { private: /* ... */ CToolBar m_wndToolBar1; CImageList ToolBarImage1; afx_msg void OnDoIt(); /* ... */ };MainFrm.cpp
BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd) /* ... */ ON_COMMAND(ID_DOIT, &CMainFrame::OnDoIt) /* ... */ END_MESSAGE_MAP() CMainFrame::CMainFrame() { ToolBarImage1.Create(16, 16, ILC_COLOR32, 1, 6); ToolBarImage1.Add(AfxGetApp()->LoadIcon(IDI_ICON1)); ToolBarImage1.Add(AfxGetApp()->LoadIcon(IDI_ICON2)); ToolBarImage1.Add(AfxGetApp()->LoadIcon(IDI_ICON3)); ToolBarImage1.Add(AfxGetApp()->LoadIcon(IDI_ICON4)); ToolBarImage1.Add(AfxGetApp()->LoadIcon(IDI_ICON5)); } int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) { /* ... */ if(!m_wndToolBar1.CreateEx(this, TBSTYLE_TRANSPARENT, WS_CHILD|WS_VISIBLE|CBRS_TOP|CBRS_GRIPPER|CBRS_TOOLTIPS|CBRS_FLYBY|CBRS_SIZE_DYNAMIC) || !m_wndToolBar1.LoadToolBar(IDR_BAR1)) { TRACE0("Failed to create tool bar\n"); return -1; } m_wndToolBar1.EnableDocking(CBRS_ALIGN_ANY); EnableDocking(CBRS_ALIGN_ANY); DockControlBar(&m_wndToolBar1); m_wndToolBar1.GetToolBarCtrl().SetImageList(&ToolBarImage1); /* ... */ } void CMainFrame::OnDoIt() { AfxMessageBox(_T("You have clicked at element one")); }
-
Warum verwendest Du nicht LoadToolbar!
LOadToolbar nimmt die Höhe der Bitmap und errechnet aus der Anzahl der Items die weite der Buttons...
Wenn Du es manual machen willst wi in Deinem letzten Posting, solltest Du alles nach OnCreate packen. Und in jedem Falle -1 returnieren wenn was schief geht.
In den Konstruktor gehört es nicht!Wenn Du es so machst wie in Deinem letzten Posting verzeichte ganz auf LoadToolbar!