在Windows 8中检测分屏模式

时间:2013-09-17 12:14:28

标签: c++ windows-8 mfc

如何在Windows 8中检测分屏模式。我有一个wim32桌面应用程序(用MFC编写),我需要在分屏模式下提供一些功能 仅供参考 - 在分屏模式下,桌面和地铁模式并排放置

1 个答案:

答案 0 :(得分:2)

根据您的评论,您获得屏幕尺寸的原因是因为这就是您所要求的。将SM_CXSCREENSM_CYSCREEN传递给GetSystemMetrics()将会返回,如名称所示,主要显示的宽度和高度。

有许多解决方案,每个都有他们的专业和骗局,其中最简单的可能是:

RECT rcDesktop;
BOOL ok = GetWindowRect(GetDesktopWindow(), &rcDesktop);

这将返回主监视器桌面窗口的大小。如果您只想要“可用”区域(考虑到任务栏):

RECT rc;
BOOL ok = SystemParametersInfo(SPI_GETWORKAREA, 0, &rc, 0);

如果现代UI应用程序停靠在屏幕的一侧,那么这两个应用程序应该返回您想要的内容,具体取决于您是否要使用您的程序覆盖任务栏。

请注意,这些示例仅返回多监视器系统上主监视器的信息。您可以通过执行以下操作获取有关特定监视器的信息,例如当前窗口所在的监视器:

MONITORINFO mon_info;
mon_info.cbSize = sizeof(MONITORINFO);
BOOL ok = GetMonitorInfo(MonitorFromWindow(hWnd, MONITOR_DEFAULTTONEAREST), &mon_info);

MONITORINFO结构包含所请求监视器的大小(和位置 - 不要假设为0,0),包括工作区:

警告:我在Windows8系统上不在家,所以我无法检查所有这些是否会返回正确的信息,但理论上检查工作区应该做你想做的事,除非你特别希望你的程序是全屏的。