MFC Feature Pack 应用程序在辅助监视器中恢复为最大化时大小错误
Posted
技术标签:
【中文标题】MFC Feature Pack 应用程序在辅助监视器中恢复为最大化时大小错误【英文标题】:MFC Feature Pack applications have wrong size when restored to maximized in secondary monitor 【发布时间】:2012-05-14 11:03:19 【问题描述】:我注意到,使用 MFC 功能包 (VS2008) 开发的应用程序在辅助监视器中从最小化恢复为最大化时,其大小就像它们在主监视器中一样,为 Windows 任务栏留出空间。
我在我自己的程序中发现了这种行为,而且在 MFC Feature Pack 示例中也发现了这种行为,所以我猜这是 MFC Feature Pack 类中的一些错误。
因此,例如,我构建了 Visual Studio 示例,运行它,将它移动到辅助监视器,在那里最大化它,最小化它,恢复它,我得到了这个:
是否有任何已知的解决方法?更新版本的 MFC 是否已解决此问题?
更新:
这似乎只有在辅助显示器位于主显示器右侧时才会发生,但如果它位于左侧则不会。
【问题讨论】:
【参考方案1】:回答我自己的问题,以供将来参考:
经过进一步研究,我发现它似乎是一个错误和has already been reported to Microsoft:
这是由于 CFrameImpl::OnGetMinMaxInfo 使用 窗口矩形来确定应该使用哪个监视器 确定最大尺寸。当窗口最小化时 GetWindowRect 返回的矩形的左上角为 (-32000, -32000)。当此矩形用于确定监视器时,返回最左侧的监视器。
它说“已解决 - 不会修复”,所以我寻找了一种解决方法,发现这似乎可行:
void CMainFrame::OnSize(UINT nType, int cx, int cy)
CMDIFrameWndEx::OnSize(nType, cx, cy);
if (nType == SIZE_MAXIMIZED)
CRect rectWindow;
GetWindowRect(&rectWindow);
CRect rect(0, 0, 0, 0);
MONITORINFO mi;
mi.cbSize = sizeof(MONITORINFO);
if (GetMonitorInfo(MonitorFromWindow(this->m_hWnd, MONITOR_DEFAULTTONEAREST), &mi))
rect = mi.rcWork;
else
::SystemParametersInfo(SPI_GETWORKAREA, 0, &rect, 0);
MoveWindow(rect);
【讨论】:
这个解决方案有一个问题:如果Windows任务栏处于自动隐藏模式,当鼠标悬停在其上时,最大化的应用程序不会留下任务栏显示所需的2像素间隙,所以任务栏不会显示以上是关于MFC Feature Pack 应用程序在辅助监视器中恢复为最大化时大小错误的主要内容,如果未能解决你的问题,请参考以下文章
如何在 vc 2008 上使用“Visual C++ 2008 Feature Pack”?
我在哪里可以找到 Series 40 第 5 版 SDK,Feature Pack 1 Lite 以供下载?
Azure Pack 是不是支持使用 WASABi 自动缩放 Web 和辅助角色?