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...