如何让CreateWindowEx()在特定的监视器上创建窗口?

时间:2009-12-02 18:11:22

标签: winapi monitors createwindowex

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

3 个答案:

答案 0 :(得分:7)

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

答案 1 :(得分:4)

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

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

答案 2 :(得分:0)

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

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

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

使用workarea矩形而不是完整的监视器矩形非常重要,因为您不希望窗口显示在任务栏和其他始终在顶部的appbars下面。