Buttonstate in Toolbar ändern
-
Hi
Ich hab so ne schöne Toolbar und ich hab aus ein paar Buttons Checkbox-Buttons gemacht, so dass die mal gedrückt mal nicht gedrückt angezeigt werden.
Jetzt bräuchte ich nur noch ne Methode, mit der ich von Hand sagen kann, dass ein anderer Button markiert ist. Denn wenn man ein Shortcut benutzt, bekommt das der Button nicht mit.Kann mir da jemand helfen? Ich weiß nämlich gar nicht, wie ich überhaupt an den Handle des Buttons rankomme, geschweige denn, ob der überhaupt ein Handle hat, oder ob das alles von der Toolbar geregelt wird.
Tschö,
Jan.
-
-
Das Ding ist ein BTNS_CHECKGROUP.
Mit den oberen Messages hats nicht geklappt. Aber vielleicht hab ich auch die ButtonID nicht richtig angegeben. Ich hab einfach die Nummer des Buttons angegeben (also der wievielte das in der Toolbar ist). Bin mir aber nicht sicher, ob das erlaubt ist.
Jan.
-
Was genau hast du da jetzt angegeben? Du müsstest wohl die ID (hMenu, das du bei CreateWindow angegeben hast) angeben
-
Ein Stück Quellcode sagt mehr als tausend Worte...
HWND hwndParent=hWnd; UINT uiCtrlID=IDR_TOOLBAR; UINT uiToolBarID=IDR_TOOLBAR; UINT uiWindowStyle=TBSTYLE_TOOLTIPS; TBBUTTON* pItems; HRSRC hRsrc; HGLOBAL hGlobal; PTOOLBARDATA pData; HWND hwndBar; int i, iBmpID;; INITCOMMONCONTROLSEX icc; icc.dwICC = sizeof (icc); icc.dwICC = ICC_BAR_CLASSES|ICC_COOL_CLASSES; InitCommonControlsEx (&icc); hRsrc = FindResource(hInstance, MAKEINTRESOURCE(uiToolBarID), RT_TOOLBAR); hGlobal = LoadResource(hInstance, hRsrc); pData = (PTOOLBARDATA)LockResource(hGlobal); //Speicher für die Items belegen pItems = (TBBUTTON*) calloc(pData->wItemCount, sizeof(TBBUTTON)); //Items setzen for (iBmpID = 0, i = 0; i < pData->wItemCount; i++) { if(pData->aItems[i] == 0)//Separator { pItems[i].fsStyle = TBSTYLE_SEP; } else pItems[i].iBitmap = iBmpID++; pItems[i].idCommand = pData->aItems[i]; pItems[i].fsState = TBSTATE_ENABLED; if ((i == 0) || (i == 6) || (i == 14) || (i == 22) || (i == 26)) pItems[i].fsStyle = BTNS_SEP; else if ((i >= 9) && (i <= 20)) pItems[i].fsStyle = BTNS_CHECKGROUP; else if ((i == 25)) pItems[i].fsStyle = BTNS_CHECK; else pItems[i].fsStyle = TBSTYLE_BUTTON; if ((i == 9) || (i == 15)) pItems[i].fsState |= TBSTATE_CHECKED; } //Toolbar erstellen hwndBar = CreateToolbarEx( hwndParent, WS_CHILD | uiWindowStyle, uiCtrlID, pData->wItemCount, hInstance, uiToolBarID, pItems, pData->wItemCount, pData->wWidth, pData->wHeight, pData->wWidth * pData->wItemCount, pData->wHeight, sizeof(TBBUTTON)); SetWindowLong(hwndBar, GWL_STYLE, GetWindowLong(hwndBar, GWL_STYLE) | TBSTYLE_FLAT); free (pItems); UnlockResource(hGlobal); FreeResource(hGlobal);
Das ist die Funktion, mit der ich meine Toolbar erstelle. Wie du siehts, sind die Buttons im Grunde durchnummeriert von 0 bis irgendwas. Ich hab keine Ahnung, wie ich nachher an die IDs oder Handles der Buttons rankommen soll, mit Menüzeugs kenn ich mich nicht so gut aus.
Weißt du vielleicht, wie ich den Status von z.B. Button 15 verändern kann?Würde mich echt ein ganzes Stück vorwärts bringen bei dem Versuch anwenderfreundlich Software zu schreiben
Tschö,
Jan.