doo*_*ood 5 registry layout mfc toolbar
我迁移了我的MFC MDI应用程序以使用新的MFC功能包.我有很多工具栏和可停靠的窗格.据我所知,关闭应用程序时,每个位置和大小都保存在注册表中,并在加载主框架时加载.
我想在我的应用程序中添加一个功能,将工具栏/窗格的布局重置为原始布局.
我添加了一个菜单项,其命令在我的CWinAppEx派生类中处理,如下所示:
CleanState();
LoadState((CMDIFrameWndEx*)m_pMainWnd);
Run Code Online (Sandbox Code Playgroud)
但它似乎没有正常工作.
但是,如果我在CleanState()调用之前调用函数调用LoadMainFrame(),应用程序将使用默认布局(我想要的那个)加载.
有没有办法在加载后重新设置应用程序的布局?
非常感谢.
小智 0
我没有一个简单的答案给你。我在 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);
}
Run Code Online (Sandbox Code Playgroud)
每个窗格类具有以下功能:
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();
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1091 次 |
| 最近记录: |