0

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

4

1 回答 1

2

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

有许多解决方案,每个都有其优点和缺点,其中最简单的可能是:

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

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

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

在将 Modern-UI 应用程序停靠在屏幕一侧的情况下,这两个应用程序都应该返回您想要的内容,具体取决于您是否想用程序覆盖任务栏。

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

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

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

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

于 2013-09-18T11:09:32.330 回答