Rebar mit Toolbar funktioniert unter Vista/Wine, aber nicht unter XP/Win200
-
Hallo,
ich beisse mir seit 3 Tagen die Zähne an einer simplen Rebar mit einer Toolbar die Zähne aus.
Mein Problem ist nun, der unten genannte Code funktioniert unter Vista einwandfrei, nur sobald man die Manifest-Datei weglässt, auf ein altes Theme schaltet oder das Programm unter XP (Moderne Themes, Luna etc..) ausführt, ist von einer Toolbar oder eine Rebar nichts zu sehen.
Ich habe mich schon viel mit den Werten und Einstellungen gespielt, mein bisher bestes Ergebnis unter XP war die normale Toolbar mit weißem Hintergrund, aber den Verlaufseffekt der Rebar ist mir noch nicht gelungen.
Ich habe schon sämtliche Beispiele der MSDN oder anderen Seiten probiert und habe keine unter XP zum laufen gebracht.
Dazu muss gesagt sein, Windows XP läuft in einer virtuellen Maschine.
Hat jemand eine Lösung für das Problem, oder einen Ratschlag?
Ich benutze Visual Studio 9
Beispiel mit 2 Rebars die unter Vista funktionieren:
Bar1 mit Toolbar
Bar2 nur TextDie CommonControls sind initialisiert.
<schnipp//... case WM_CREATE: { RECT Rc; HWND hTool; TBBUTTON TbButton[3]; TBADDBITMAP TbAddBitmap; long Size; REBARINFO RebarInfo; REBARBANDINFO RebarBandInfo; HWND hReBar; //IDC_MAIN_REBAR hReBar = CreateWindowEx(WS_EX_TOOLWINDOW, REBARCLASSNAME, NULL, WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | RBS_REGISTERDROP | RBS_VARHEIGHT | CCS_NODIVIDER, 0,0,0,0, hwnd, (HMENU)IDC_MAIN_REBAR, GetModuleHandle(NULL), NULL); RebarInfo.cbSize = sizeof(REBARINFO); RebarInfo.fMask = 0; RebarInfo.himl = (HIMAGELIST)NULL; SendMessage(hReBar, RB_SETBARINFO, 0, (LPARAM)&RebarInfo); //IDC_MAIN_TOOL hTool= CreateWindowEx(0,TOOLBARCLASSNAME,NULL,WS_CHILD | WS_VISIBLE | TBSTYLE_FLAT | TBSTYLE_TRANSPARENT | CCS_NOPARENTALIGN | CCS_NODIVIDER,0,0,0,0,hwnd, (HMENU)IDC_MAIN_TOOL,GetModuleHandle(NULL),NULL); SendMessage(hTool,TB_BUTTONSTRUCTSIZE,(WPARAM)sizeof(TBBUTTON),0); TbAddBitmap.hInst = HINST_COMMCTRL; TbAddBitmap.nID = IDB_STD_SMALL_COLOR; SendMessage(hTool,TB_ADDBITMAP,0,(LPARAM)&TbAddBitmap); ZeroMemory(TbButton, sizeof(TbButton)); TbButton[0].iBitmap = STD_FILENEW; TbButton[0].fsState = TBSTATE_ENABLED; TbButton[0].fsStyle = TBSTYLE_BUTTON; TbButton[0].idCommand = ID_DATEI_NEU; TbButton[1].iBitmap = STD_FILEOPEN; TbButton[1].fsState = TBSTATE_ENABLED; TbButton[1].fsStyle = TBSTYLE_BUTTON; TbButton[1].idCommand = ID_DATEI_OEFFNEN; TbButton[2].iBitmap = STD_FILESAVE; TbButton[2].fsState = TBSTATE_ENABLED; TbButton[2].fsStyle = TBSTYLE_BUTTON; TbButton[2].idCommand = ID_DATEI_SPEICHERN; SendMessage(hTool,TB_ADDBUTTONS,sizeof(TbButton)/sizeof(TBBUTTON),(LPARAM)&TbButton); Size = SendMessage(hTool,TB_GETBUTTONSIZE,0,0); GetWindowRect(hTool,&Rc); //ADD TOOLBAR TO REBAR (hopefully) memset(&RebarBandInfo, 0, sizeof(REBARBANDINFO)); RebarBandInfo.cbSize = sizeof(REBARBANDINFO); RebarBandInfo.fMask = RBBIM_TEXT | RBBIM_CHILD | RBBIM_CHILDSIZE | RBBIM_SIZE | RBBIM_STYLE; RebarBandInfo.fStyle = RBBS_CHILDEDGE | RBBS_FIXEDBMP | RBBS_GRIPPERALWAYS; RebarBandInfo.lpText = "BAR1"; RebarBandInfo.hwndChild = hTool; RebarBandInfo.cxMinChild = Rc.right - Rc.left; RebarBandInfo.cyMinChild = Rc.bottom - Rc.top; RebarBandInfo.cx = 200; SendMessage(hReBar, RB_INSERTBAND, (WPARAM)-1, (LPARAM)&RebarBandInfo); memset(&RebarBandInfo, 0, sizeof(REBARBANDINFO)); RebarBandInfo.cbSize = sizeof(REBARBANDINFO); RebarBandInfo.fMask = RBBIM_TEXT | RBBIM_CHILD | RBBIM_CHILDSIZE | RBBIM_SIZE | RBBIM_STYLE; RebarBandInfo.fStyle = RBBS_CHILDEDGE | RBBS_FIXEDBMP | RBBS_GRIPPERALWAYS; RebarBandInfo.lpText = "BAR2"; RebarBandInfo.cxMinChild = Rc.right - Rc.left; RebarBandInfo.cyMinChild = Rc.bottom - Rc.top; RebarBandInfo.cx = 200; SendMessage(hReBar, RB_INSERTBAND, (WPARAM)-1, (LPARAM)&RebarBandInfo); } // ...</schnipp
-
Hallo nochmal.
Anscheinend sind die common-control libs beschädigt gewesen, ich konnte den Fehler beheben indem ich die von Visual Studio mit denen von Borland ersetzt habe.
Eine etwas brachiale Lösung, aber sie funktioniert
