【问题标题】:CWinAppEx CleanState - Reset LayoutCWinAppEx CleanState - 重置布局
【发布时间】:2012-03-18 02:53:59
【问题描述】:

我迁移了我的 MFC MDI 应用程序以使用新的 MFC 功能包。我有许多工具栏和可停靠窗格。据我了解,它们的位置和大小在关闭应用程序时保存在注册表中,并在加载主框架时加载。

我想在我的应用程序中添加一项功能,将工具栏/窗格的布局重置为原始布局。

我添加了一个菜单项,其命令在我的CWinAppEx 派生类中处理如下:

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

但它似乎无法正常工作。

但是,如果我将 CleanState() 函数调用放在对 LoadMainFrame() 的调用之前,则应用程序会以默认布局(我想要的布局)加载。

有没有办法在我的应用程序加载后实际重置它的布局?

非常感谢。

【问题讨论】:

    标签: layout mfc registry toolbar


    【解决方案1】:

    是的,只需删除分配给布局保存的注册表项。

    【讨论】:

      【解决方案2】:

      我没有一个简单的答案给你。我在 Visual Studio 2017 中使用 MFC 功能包有 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();
             }
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-09-29
        • 2012-12-14
        • 1970-01-01
        • 1970-01-01
        • 2013-09-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多