6

我已经确定我可以GetSystemMetrics(SM_CMONITORS)用来查询连接的监视器的数量,但是有没有办法控制CreateWindowEx()窗口使用什么监视器?

4

3 回答 3

10

是的,通过“x”和“y”参数。使用 EnumDisplayMonitors(传递两个空值)枚举监视器。您的 MonitorEnumProc 回调将 RECT* 获取到监视器的显示矩形。如果监视器位于主监视器的左侧,您会得到一个负数的 RECT.right。

于 2009-12-02T18:20:51.037 回答
5

每个监视器只显示桌面的某些部分,因此在特定监视器上显示窗口只需将窗口移动到该监视器显示的桌面部分。当您调用 CreateWindowEx(或 CreateWindow)时,您可以为窗口指定 x 和 y 坐标,因此在特定监视器上显示它仅意味着指定落在该监视器显示区域内的坐标。

您可以使用 GetMonitorInfo 在系统上找到监视器的工作区。

于 2009-12-02T18:21:51.720 回答
0

x 和 y 参数指定新窗口的位置。该点可以位于虚拟屏幕上的任何位置(所有监视器矩形组合)。

如果您想在与另一个窗口相同的监视器上创建窗口,您可以调用MonitorFromWindow. 否则可以使用 枚举所有监视器EnumDisplayMonitors

无论哪种方式,一旦您拥有 HMONITOR 句柄,您就必须调用GetMonitorInfo. 您的 x 和 y 参数应该是rcWork监视器信息结构中成员范围内的值。您通常会选择将窗口置于此矩形中心的值。

使用工作区矩形而不是完整的监视器矩形很重要,因为您不希望窗口出现在任务栏和其他始终位于顶部的应用栏下方。

于 2017-02-20T19:14:01.670 回答