Toolbar, tooltip/disable
-
Hallo!
ich habe eine klasse geschrieben zum erzeugen einer toolbar...#include <commctrl.h> #include <windows.h> class Toolbar { public: Toolbar(HINSTANCE instance, HWND hwnd, int style); ~Toolbar(); void addButton( int command, char* filename, int style=TBSTYLE_BUTTON); void addStandardButton( int command, int std_ID, int style=TBSTYLE_BUTTON); void addSeparator(); private: HINSTANCE hInst; HWND hwnd; }; Toolbar::Toolbar(HINSTANCE instance, HWND hwnd, int style) { hInst = instance; Toolbar::hwnd= CreateWindowEx( 0, TOOLBARCLASSNAME, (LPSTR) NULL, WS_CHILD | style, 0, 0, 0, 0, hwnd, (HMENU) 1, instance, NULL ); TBADDBITMAP bitid; bitid.hInst = HINST_COMMCTRL; bitid.nID = IDB_STD_SMALL_COLOR; SendMessage(Toolbar::hwnd, TB_ADDBITMAP, 1, (long)&bitid); SendMessage(Toolbar::hwnd, TB_BUTTONSTRUCTSIZE, (WPARAM) sizeof(TBBUTTON), 0); //Backward compatiblity ShowWindow(Toolbar::hwnd, SW_SHOW); //Show Toolbar! } void Toolbar::addButton(int command, char* filename, int style) { HBITMAP h_bitmap; h_bitmap = (HBITMAP)LoadImage( NULL, filename, // name or identifier of image IMAGE_BITMAP, // type of image 16, // desired width 16, // desired height LR_LOADFROMFILE // load flags ); //fill ADDBITMAP-Structur and overgive Bitmap-Handle TBADDBITMAP bitid; bitid.hInst = NULL; bitid.nID = (UINT)h_bitmap; TBBUTTON tbbutton; //Create TBBUTTON-Structur for saving infos about button which is to add tbbutton.iBitmap = SendMessage(hwnd, TB_ADDBITMAP, 1, (long)&bitid); tbbutton.idCommand = command; //Command-Parameter to Command-Message to recognize clicks on Toolbar-Button tbbutton.fsState = TBSTATE_ENABLED; tbbutton.fsStyle = style; tbbutton.dwData = 0; tbbutton.iString = NULL; //At last, add the button to the Toolbar SendMessage(hwnd, TB_ADDBUTTONS, (WPARAM) 1, (LPARAM) (LPTBBUTTON) &tbbutton); } void Toolbar::addSeparator() { TBBUTTON tbbutton; //Create TBBUTTON-Structur for saving infos about button which is to add tbbutton.iBitmap = NULL; tbbutton.idCommand = NULL; //Command-Parameter to Command-Message to recognize clicks on Toolbar-Button tbbutton.fsState = NULL; tbbutton.fsStyle = TBSTYLE_SEP; tbbutton.dwData = NULL; tbbutton.iString = NULL; SendMessage(hwnd, TB_ADDBUTTONS, (WPARAM) 1, (LPARAM) (LPTBBUTTON) &tbbutton); } void Toolbar::addStandardButton(int command, int std_ID,int style) { TBBUTTON tbbutton; //Create TBBUTTON-Structur for saving infos about button which is to add tbbutton.iBitmap = std_ID; tbbutton.idCommand = command; //Command-Parameter to Command-Message to recognize clicks on Toolbar-Button tbbutton.fsState = TBSTATE_ENABLED; tbbutton.fsStyle = style; tbbutton.dwData = 0; tbbutton.iString = NULL; SendMessage(hwnd, TB_ADDBUTTONS, (WPARAM) 1, (LPARAM) (LPTBBUTTON) &tbbutton); }jetzt will ich irgendwie zu den buttons noch einen Tooltip hinzufügen, bzw buttons enablen, disablen können hab aber kA, wie ich das anstellen soll...
-
-
Also die Tooltips von Hand per eigenem Tooltipfenster erzeugen ist schon etwas Aufwand, die einfachste Methode ist über den Resourceneditor falls du VS benutzt. Desweiteren kannst du die Buttenstates (und noch einiges mehr) mit dem Befehl TB_SETBUTTONINFO setzen.
-
hmm... hab mich da a bissl gespielt, aber da is nie was sinnvolles rausgekommen.. wie würd das denn in meinem beispiel ausschauen, wenn ich in der addButton noch einen parameter char* tooltip drin hab und will, dass der dann beim button aufscheint?
-
Das kann ich dir jetzt nicht sagen wie man das unter c++ implementiert, da ich nur winapi+c kann. Aber die Tooltips sind definitiv ein eigenes Fenster und werden mit TTM_ADDTOOL einem anderen Fenster zugewiesen für das Tolltips angezeigt werden sollen. In deinem Fall die Tollbar. Die Toolbar musst du subclasen und die Events WM_MOUSELEAVE und WM_MOUSEMOVE auswerten, d.h. bei WM_MOUSEMOVE per Hittest schauen was sich unter dem Mauscursur befindet und entsprechen dem Button den Tooltiptext mit TTM_UPDATETIPTEXT anzeigen. Das war mal ganz grob erklärt.
-
In der Hoffnung dass es doch mit TB_SETBUTTONINFO funktioniert hab ich mal herumprobiert..
es funktioniert aber nicht :((void addTooltip(HWND hwnd, char* tooltip, int id) { TBBUTTONINFO info; info.cbSize = sizeof(info); info.dwMask = TBIF_TEXT; info.pszText = tooltip; int i=SendMessage(hwnd, TB_SETBUTTONINFO, id,(LPARAM)&info); if(i<=0) MessageBox ( NULL, "FALSCH", "Mein erstet Windowsprogramm!", MB_OK); else MessageBox ( NULL, "RICHTIG", "Mein erstet Windowsprogramm!", MB_OK); }es kommt auch immer falsch raus...
-
Ich vermnte mal, daß du bei hwnd den Handle deines Hauptfensters oder irgendeinen andern Handle übegibst, aber nicht den Handle der Toolbar.
-
nein, das is der handle zur toolbar... ich weiß nur bei der id nicht, was da hingehört..