MFC - Position für Symbolleiste festlegen

a_d

Mitglied
Hi,

habe folgendes Problem:

Ich habe in meinem Programm (mit MFC) eine zweite Symbolleiste angelegt. Diese erscheint jetzt jedoch immer unter der ersten.

Was muss ich machen, damit die zweite Symbolleiste rechts neben der ersten angzeigt wird und nicht darunter?

Gruß Andi
 
Du kannst die Methode DockControlBar verwenden.
CFrameWnd::DockControlBar
void DockControlBar( CControlBar * pBar, UINT nDockBarID = 0, LPCRECT lpRect = NULL );


Ich habe hier ein Funktion, die das erledigt - leider weiss ich nicht mehr, wer den Schnipsel geschrieben hat:
Code:
void CMainFrame::DockControlBarLeftOf( CToolBar* Bar, CToolBar* LeftOf )
{
  CRect             rect;
  DWORD             dw;
  UINT              n;
  
  // get MFC to adjust the dimensions of all docked ToolBars
  // so that GetWindowRect will be accurate
  RecalcLayout( TRUE );
  
  LeftOf->GetWindowRect( &rect );
  rect.OffsetRect( 1, 0 );
  dw=LeftOf->GetBarStyle();
  n = 0;
  n = ( dw & CBRS_ALIGN_TOP ) ? AFX_IDW_DOCKBAR_TOP : n;
  n = ( dw & CBRS_ALIGN_BOTTOM && n==0) ? AFX_IDW_DOCKBAR_BOTTOM : n;
  n = ( dw & CBRS_ALIGN_LEFT && n==0) ? AFX_IDW_DOCKBAR_LEFT : n;
  n = ( dw & CBRS_ALIGN_RIGHT && n==0) ? AFX_IDW_DOCKBAR_RIGHT : n;
  
  // When we take the default parameters on rect, DockControlBar will dock
  // each Toolbar on a seperate line. By calculating a rectangle, we
  // are simulating a Toolbar being dragged to that location and docked.
  DockControlBar( Bar, n, &rect );
}
Bar wird links von LeftOf eingesetzt.
-----
Du kannst die Funktion am besten aus CMainFrame::OnCreate() aufrufen, nachdem die Toolbars created sind.
 
Zuletzt bearbeitet:
...hätte aber noch eine Frage bezüglich Symbolleisten.
Ich habe gerade festgestellt, dass es keine Funktion gibt, die die Hauptsymbolleiste ausblendet, sondern nur über ID_VIEW_TOOLBAR geregelt wird.

Wie kann ich das jetzt ändern, dass ich meine eigene Symbolleiste auch auf die Art und Weise ein- bzw. ausblenden kann?

Habe schon in der Hilfe nachgesehen, doch da bin ich nicht durchgestiegen.

Gruß

André
 
Weiss ich auch nicht, aber du könntest versuchen, den Toolbar mit FloatToolbar() zu lösen und ihn dann mit toolbar.ShowWindow( SW_HIDE ) verstecken.
 
Hi,

habe etwas in einem Beispiel gefunden, das klappt prima:

Code:
void CMainFrame::OnToolBarRWToolsCheck()
{  	
    m_wndRWTools.ShowWindow(m_wndRWTools.IsWindowVisible() ? SW_HIDE : SW_SHOWNA);  
}
      
void CMainFrame::OnUpdateToolBarRWToolsMenu(CCmdUI* pCmdUI)  
{
    ASSERT(pCmdUI->m_nID == ID_VIEW_TOOLBAR_RWTOOLS); 
    pCmdUI->SetCheck(m_wndRWTools.IsWindowVisible());  
}

Müssen dann nur noch im Meldungshandler aufgerufen werden.

Trotzdem Danke!

Gruß André
 

Neue Beiträge

Zurück