【问题标题】:Maximized Window Restores to Full Screen最大化窗口恢复到全屏
【发布时间】:2010-09-02 06:31:58
【问题描述】:

使用 CWnd::ShowWindow(SW_SHOWMAXIMIZED) 按预期最大化我的应用程序窗口。

但是,当点击应用上的恢复按钮(或双击标题栏)时,恢复后的大小与最大化的窗口大小相同,这让用户感到困惑。

使用这个替代代码有同样的问题:

WINDOWPLACEMENT wndpl;
GetWindowPlacement(&wndpl);
wndpl.showCmd = SW_SHOWMAXIMIZED;
SetWindowPlacement(&wndpl);

如何在恢复时保持默认的未最大化大小。

【问题讨论】:

  • 主窗口是对话框还是SDI/MDI框架?
  • 我也有同样的问题。当恢复由 SetWindowPlacement 设置为最大化的窗口时,窗口将“恢复”为相同的最大化大小。我的是 MFC MDI 主窗口,从 OnCreate 调用 SetWindowPlacement,从 OnClose 调用 GetWindowPlacement。

标签: mfc maximize cwnd maximize-window showwindow


【解决方案1】:

我已经解决了我的问题,该解决方案也可能解决您的问题。我的问题是,即使我在 CMainFrame::OnCreate 中调用了 SetWindowPlacement(&wndpl),如果窗口最大化,它也没有正确恢复。我在 SetWindowPlacement 之前添加了两行代码,现在它可以正常工作了。

CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
    ...
    // Obtain wndpl, maybe from registry
    AfxGetApp()->m_nCmdShow = wndpl.showCmd;
    wndpl.showCmd = SW_SHOW;
    SetWindowPlacement(&wndpl);
}

这两行代码有助于底层代码在调用 ActivateFrame 时不会搞砸,它使用从 CWinApp::m_nCmdShow 获取的参数调用 ShowWindow。

【讨论】:

  • 是的,这两行代码为我解决了完全相同的问题,我从没想过会尝试这样做。
【解决方案2】:

所有信息都在扩展名为 .RC 的文件中。我从来没有使用过最大化/恢复过程,尽管你应该为同一个窗口寻找一个“对话框”。您可以使用任何编辑器(记事本、ultraedit 等)对其进行更改

【讨论】:

    猜你喜欢
    • 2017-11-24
    • 1970-01-01
    • 1970-01-01
    • 2011-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多