c++ - 窗口放置问题 - 什么是重新定位我的窗口?
问题描述
我有一个 C++/MFC 应用程序,我试图保存和恢复我的 CFrameWnd 派生的主框架的窗口位置。我在适当的地方调用了GetWindowPlacement和SetWindowPlacement,一切似乎都运行良好。
直到我“存储”窗口最大化时。在这种情况下,当我重新打开应用程序并使用调试器跳过我的SetWindowPlacement调用时,我看到它已按照我的意愿最大化放置。
但是,如果我继续执行,其他东西会将我的窗口“恢复”到它的非最大化大小。我如何发现在做什么?(因为我没有在其他任何地方调用 ShowWindow)
编辑:它似乎源于CFrameWnd::InitialUpdateFrame:
int nCmdShow = -1; // default
CWinApp* pApp = AfxGetApp();
if (pApp != NULL && pApp->m_pMainWnd == this)
{
nCmdShow = pApp->m_nCmdShow; // use the parameter from WinMain
pApp->m_nCmdShow = -1; // set to default after first time
}
ActivateFrame(nCmdShow);
如果我在启动时将我的应用程序 m_nCmdShow 设置为 SW_MAXIMIZED,它会显示已达到最大值 - 但它始终是最大值!我的CMainFrame::OnActivate中有我的SetWindowPlacement - 它应该在其他地方吗?
解决方案
所以在我的应用程序启动中,我这样做了:
WINDOWPLACEMENT* lwp;
UINT nl;
if (AfxGetApp()->GetProfileBinary(_T("MainFrame"), _T("WP"), (LPBYTE*)&lwp, &nl))
{
m_nCmdShow = lwp->showCmd;
}
delete [] lwp;
它似乎工作
推荐阅读
- r - ggplot 图形不输出 Jupytr Notebook (R/tidyverse)
- angularjs - 从 angularjs 升级到 angular 时替换 ng-include 的最佳实践?
- azure-blob-storage - Azure 表单识别器培训未找到数据
- reactjs - 如果用户不存在,则 React + Firebase 表单验证
- c++ - 为 std::vector 编写自定义插入函数
- java - 无法解析 Maven 工件;试图从错误的存储库中解析工件
- numpy - 从 3D numpy 数组的每个 2D 切片中获取不同的列
- html - 使用语义 ui react 处理溢出的组件
- reactjs - 用户在 Resium 中绘制多边形以过滤掉不在多边形内的实体
- swift - 时间线上线程的优先级