0

CToolbar (m_wndToolBar) と CDialogBar (m_wndDlgBarSid1) を水平に表示する必要があります (つまり、互いの上ではなく、互いに隣り合っています)。親フレームは CMDIFrameWnd から派生します。

これを機能させるために、あらゆる種類のバリエーションを試しました。CDialogBar を CToolbar の右側に適切に配置することはできますが、WINDOWPLACEMENT メカニズムは正しく機能していますが (レジストリはプログラムの終了時に書き込まれます)、配置を保持できません。プログラムが実行されるたびに、CToolbar が左にドッキングされて表示され、CDialogBar がその下に表示され、これも左にドッキングされます。(perforce) MFC と Visual C++ 6.0 を使用しています。デバッグ出力などを削除するためにわずかに編集されたコードは次のとおりです。

int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
   if (CMDIFrameWnd::OnCreate(lpCreateStruct) == -1)
   {
      return -1;
   }
   if (!m_wndToolBar.Create(this) || !m_wndToolBar.LoadToolBar(IDR_MAINFRAME) )
   {
      return -1;      // fail to create
   }
   if (!m_wndDlgBarSid1.Create(this, IDD_DIALOGBAR_SID1, CBRS_ALIGN_TOP, AFX_IDW_DIALOGBAR))
   {
      return -1;        // fail to create
   }

   WINDOWPLACEMENT wp ;
   CString sSection = "DialogBarSettings";
   CString sEntry = "Sid1";
   if ( ReadWindowPlacement( &wp, sSection, sEntry ))
   {
      BOOL bSWP = m_wndDlgBarSid1.SetWindowPlacement( &wp );
      RecalcLayout();
   }

   m_wndToolBar.SetBarStyle(m_wndToolBar.GetBarStyle() | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC);
   m_wndToolBar.GetToolBarCtrl().ModifyStyle( 0, TBSTYLE_FLAT, 0 ) ;
   m_wndDlgBarSid1.SetBarStyle(m_wndToolBar.GetBarStyle() | CBRS_SIZE_DYNAMIC | CBRS_TOP | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY ) ;

   m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
   EnableDocking(CBRS_ALIGN_ANY);
   DockControlBar(&m_wndToolBar);

   m_wndDlgBarSid1.EnableDocking(CBRS_ALIGN_TOP | CBRS_ALIGN_BOTTOM);
   DockControlBar(&m_wndDlgBarSid1,AFX_IDW_DOCKBAR_TOP);

   return 0;
}

何かご意見は?

4

2 に答える 2

1

ゼロを返す前に、以下のコードを貼り付けます。これにより、以前に保存されたドッキング状態が読み込まれます。

CDockState dockState;
dockState.LoadState(L"CTRLBARSDOCKSTATE.INI");
SetDockState(dockState);
RecalcLayout();

ウィンドウを閉じたときに現在のドッキング状態を保存するには、以下のコードを CMainFrame::OnClose() オーバーライドに貼り付けます。

CDockState dockState;
GetDockState(dockState);
dockState.SaveState(L"CTRLBARSDOCKSTATE.INI");//File name can be of your choice
于 2013-07-15T04:26:41.023 に答える
0

私が必要としているものにかなり近いCReBarを使用して巻き上げました。

于 2012-11-29T21:58:42.920 に答える