2012-02-28 19 views
4

新しいMFC Feature Packを使用するようにMFC MDIアプリケーションを移行しました。私は多くのツールバーとドッキング可能なペインを持っています。私が理解する限り、それぞれの場所とサイズは、アプリケーションを閉じるときにレジストリに保存され、メインフレームを読み込むときに読み込まれます。CWinAppEx CleanState - リセットレイアウト

ツールバー/ペインのレイアウトを元のレイアウトにリセットする機能をアプリケーションに追加します。

私は、そのコマンドは次のように私CWinAppEx派生クラスで処理されたメニュー項目を追加しました:

CleanState(); 
LoadState((CMDIFrameWndEx*)m_pMainWnd); 

をしかし、正常に動作するようには思えません。

LoadMainFrame()の呼び出しの前にCleanState()関数呼び出しを実行すると、アプリケーションはデフォルトのレイアウト(必要なもの)でロードされます。

アプリケーションがロードされた後、実際にアプリケーションのレイアウトをリセットする方法はありますか?

ありがとうございました。

答えて

0

私はあなたには簡単な答えがありません。私はVisual Studio 2017でMFC Feature Packを使用して3つのドッキング・ウィンドウを持っていました。私はCleanSlateを呼び出して、ドッキング・ペインを配置して可視であることを確認しました。私は、メインフレームウィンドウとドッキングウィンドウのサイズを正しく見えるように実験しました。

void CMainFrame::OnButtonWindowResetLayout() 
{ 
    theApp.CleanSlate(); 

    CRect rcInputsOutputs(0, 0, 400, 50); 
    m_wndPaneInputsOutputs.DockToFrameWindow(CBRS_ALIGN_RIGHT, rcInputsOutputs, DT_DOCK_LAST, NULL, -1, FALSE); 
    m_wndPaneInputsOutputs.ShowPane(TRUE); 

    CRect rcDeviceStatus(0, 0, 600, 180); 
    m_wndPaneDeviceStatus.DockToFrameWindow(CBRS_ALIGN_BOTTOM, rcDeviceStatus, DT_DOCK_LAST, NULL, -1, TRUE); 
    m_wndPaneDeviceStatus.ShowPane(TRUE); 

    CRect rcOutput(0, 0, 600, 70); 
    m_wndOutput.DockToFrameWindow(CBRS_ALIGN_BOTTOM, rcOutput, DT_DOCK_LAST, NULL, -1, TRUE); 
    m_wndOutput.ShowPane(TRUE); 

    AdjustDockingLayout(); 
    SetWindowPos(&CWnd::wndTop, 0, 0, 900, 680, SWP_NOMOVE | SWP_NOACTIVATE | SWP_SHOWWINDOW); 
} 

各ペインのクラスには、機能を持っています

void CPaneDialogEx::ShowPane(BOOL showPane) 
{ 
    if (showPane != IsVisible()) { 

     CMainFrame* pMainFrame = DYNAMIC_DOWNCAST(CMainFrame, GetTopLevelFrame()); 

     if (pMainFrame != NULL) { 
      pMainFrame->SetFocus(); 
      pMainFrame->ShowPane(this, showPane, FALSE, FALSE); 
      pMainFrame->RecalcLayout(); 
     } 
    } 
}