RB_INSERTBAND fügt zweites Band rechtsbündig ein
-
Hallo,
ich habe eine Rebar, in der Platz für zwei Toolbars ist. Ich füge beide nacheinander ein. Mein Problem ist, dass die erste Toolbar ganz links eingefügt wird (richtig) und die zweite ganz rechts (falsch). Dadurch entsteht zwischen beiden Bars eine unästhetische Lücke. Resize ich das Hauptfenster nach rechts hin, dann verschiebt sich die zweite Toolbar auch nach rechts (völliger Murks, weil Abstand zwischen beiden Bars größer wird). Per Drag&Drop kann ich die zweite Bar an die erste schieben - ist aber umständlich.
Wie bekomme ich es hin, dass die zweite Toolbar direkt hinter der ersten eingefügt wird (der freie Platz also nicht zwischen den Bars sondern zwischen zweiter Bar und rechtem Fensterrand ist) und dass die Bars beim Resizen des Fensters linksorientiert stehen bleben (also auch dann keine Lücke zwischen den Bars entsteht)?
Hier ein paar Codezeilen:
// Rebar-Erstellung m_hRebar = CreateWindowEx (0L, REBARCLASSNAME, NULL, WS_CHILD|WS_VISIBLE|WS_BORDER|WS_CLIPCHILDREN|WS_CLIPSIBLINGS|CCS_NODIVIDER|RBS_VARHEIGHT|RBS_BANDBORDERS, 0, 0, 0, 0, hMainWnd, (HMENU)ID_REBAR, (HINSTANCE)GetWindowLong (hMainWnd, GWL_HINSTANCE), NULL); // so wird jede einzelne Toolbar erstellt hTBWnd = CreateWindowEx (WS_EX_TOOLWINDOW, TOOLBARCLASSNAME, NULL, WS_CHILD|WS_VISIBLE|WS_CLIPCHILDREN|CCS_NODIVIDER|CCS_NOPARENTALIGN|CCS_NORESIZE| TBSTYLE_TRANSPARENT|TBSTYLE_FLAT|TBSTYLE_TOOLTIPS, 0, 0, 0, 0, hMainWnd, (HMENU)wId, (HINSTANCE)GetWindowLong (hMainWnd, GWL_HINSTANCE), NULL); // so wird jedes Band erstellt (czSize wird mit TB_GETMAXSIZE berechnet; Wert stimmt auch) tBand.cbSize = REBARBANDINFOA_V6_SIZE; tBand.fMask = RBBIM_CHILD|RBBIM_CHILDSIZE|RBBIM_IDEALSIZE|RBBIM_SIZE|RBBIM_STYLE|RBBIM_ID|RBBIM_TEXT; tBand.fStyle = RBBS_CHILDEDGE|RBBS_GRIPPERALWAYS|(bBreak?RBBS_BREAK:0); tBand.hwndChild = hTBWnd; tBand.wID = wId; tBand.cxMinChild = czSize.cx; tBand.cyMinChild = czSize.cy; tBand.cxIdeal = czSize.cx; tBand.lpText = NULL; SendMessage (m_hRebar, RB_INSERTBAND, -1, (LPARAM)&tBand); // Reaktion auf WM_SIZE MoveWindow (m_hRebar, 0, 0, 0, 0, TRUE);
-
Ok. Ich glaube ich kann mir das Verhalten nun erklären:
Bei zwei Toolbars in einer Zeile wird diejenige mit den meisten Buttons (Buttons -> nicht Buttons und Seps) maximiert angezeigt und drängt die jeweils kürzere Bar in die Ecke. Also muss nach dem Insert von Toolbar zwei die erste Toolbar minimiert werden:
SendMessage (m_hRebar, RB_MINIMIZEBAND, 0, 0);Beim Verbreitern der Rebar wird offenbar der neu entstehende Platz der längeren Bar zugeordnet, die dadurch die zweite Bar nach rechts hin verdrängt -proportional zum Resizen. Deshalb muss als Reaktion auf WM_SIZE des Hauptfensters erneut die linke Bar minimiert werden. Flackern gibts zum Glück nicht.
Muss man eben wissen.