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.


Anmelden zum Antworten