Toolbar aus ressource laden



  • wie lade ich die Toolbar, wenn ich eine erstellt habe, aus der Res Datei?

    MFC hat, glaube ich, die Funktion LoadToolbar().. wie mache ich das mit std C++ API? Ist es dafür eigentlich gedacht? Oder ist dieser Ressource Toolbareditor nur zum erstellen der Buttons??

    thanks!

    [ Dieser Beitrag wurde am 19.11.2002 um 16:17 Uhr von personenkult editiert. ]

    [ Dieser Beitrag wurde am 19.11.2002 um 16:18 Uhr von personenkult editiert. ]



  • Viel Spass beim Übersetzen der Funktion. 😉

    BOOL CToolBar::LoadToolBar(LPCTSTR lpszResourceName)
    {
        ASSERT_VALID(this);
        ASSERT(lpszResourceName != NULL);
    
        // determine location of the bitmap in resource fork
        HINSTANCE hInst = AfxFindResourceHandle(lpszResourceName, RT_TOOLBAR);
        HRSRC hRsrc = ::FindResource(hInst, lpszResourceName, RT_TOOLBAR);
        if (hRsrc == NULL)
            return FALSE;
    
        HGLOBAL hGlobal = LoadResource(hInst, hRsrc);
        if (hGlobal == NULL)
            return FALSE;
    
        CToolBarData* pData = (CToolBarData*)LockResource(hGlobal);
        if (pData == NULL)
            return FALSE;
        ASSERT(pData->wVersion == 1);
    
        UINT* pItems = new UINT[pData->wItemCount];
        for (int i = 0; i < pData->wItemCount; i++)
            pItems[i] = pData->items()[i];
        BOOL bResult = SetButtons(pItems, pData->wItemCount);
        delete[] pItems;
    
        if (bResult)
        {
            // set new sizes of the buttons
            CSize sizeImage(pData->wWidth, pData->wHeight);
            CSize sizeButton(pData->wWidth + 7, pData->wHeight + 7);
            SetSizes(sizeButton, sizeImage);
    
            // load bitmap now that sizes are known by the toolbar control
            bResult = LoadBitmap(lpszResourceName);
        }
    
        UnlockResource(hGlobal);
        FreeResource(hGlobal);
    
        return bResult;
    }
    


  • So, jetzt gibt's erstmal a biserl API-Code:
    toolbar.h

    #include "stdafx.h"
    
    HWND CreateToolbar(HWND hwndParent);
    

    Toolbar.cpp:

    #include "stdafx.h"
    #include "resource.h"
    #include "commctrl.h"
    #include "ToolBar.h"
    
    HWND CreateToolbar(HWND hwndParent)
    {
        HBITMAP hbm = LoadBitmap((HINSTANCE)GetModuleHandle(0),MAKEINTRESOURCE(IDR_TOOLBAR1));
        HWND hWndToolbar;
        int iNumButtons;
    
        TBBUTTON tbButtonsCreate [] =
        {
         {0, ID_RIP, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0},
         {1, 15, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0},
         {2, 15, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0},
         {3, 15, TBSTATE_ENABLED, TBSTYLE_SEP, 0, 0},
         {4, 15, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0},
         {5, 15, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0},
         {6, 15, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0},
        };
    
        iNumButtons = sizeof(tbButtonsCreate)/sizeof(TBBUTTON);
        hWndToolbar = CreateToolbarEx (hwndParent,
            WS_CHILD|WS_VISIBLE,//|TBSTYLE_TRANSPARENT,
            0, 16, 0, (UINT)hbm, tbButtonsCreate, iNumButtons, 20, 20, 20, 20, sizeof (TBBUTTON));
        MoveWindow(hWndToolbar, 0, 0, 1000, 25, TRUE);
        return hWndToolbar;
    }
    

    In deiner Fenster Funktion rufst bu beim erstellen da hier auf:

    hWndToolBar = CreateToolbar(hWnd); /* hWnd ist das Handle zum Fenster, auf das die Toolbar abgebildet werden soll */
    

    [ Dieser Beitrag wurde am 19.11.2002 um 17:13 Uhr von hackbert editiert. ]



  • Danke! Das war genau das was ich gebraucht habe:)



  • wieso funktioniert TBSTYLE_TRANSPARENT eigentlich nicht richtig? Geht es bei dir? Bei mir sehe ich den Desktop durch und es scheint nicht richtig zu refreshen.. ich habe win2000

    EDIT:
    ich glaube das ist garnicht was ich meine.. ich wollte die Buttons flach machen.. mit TBSTYLE_FLAT scheint es nicht zu gehen..

    [ Dieser Beitrag wurde am 19.11.2002 um 17:53 Uhr von personenkult editiert. ]



  • wenn ich TBSTYLE_FLAT benutze, dann steht zumindest in der MSDN, dass die Buttons + Hintergrund transparent sind.. aber was macht das fürn Sinn wenn ich dann den Desktop durchsehe.. ich wollt da einfach nur die std Farbe...


Anmelden zum Antworten