如何在Windows 8中检测分屏模式。我有一个wim32桌面应用程序(用MFC编写),我需要在分屏模式下提供一些功能 仅供参考 - 在分屏模式下,桌面和地铁模式并排放置
答案 0 :(得分:2)
根据您的评论,您获得屏幕尺寸的原因是因为这就是您所要求的。将SM_CXSCREEN
和SM_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系统上不在家,所以我无法检查所有这些是否会返回正确的信息,但理论上检查工作区应该做你想做的事,除非你特别希望你的程序是全屏的。