SetWindowPos 不移动或调整窗口大小

SetWindowPos not moving or resizing window

提问人:John 提问时间:10/23/2016 最后编辑:drescherjmJohn 更新时间:10/23/2016 访问量:1719

问:

当我调用 SWP 尝试移动特定窗口的大小时。它不会移动或调整大小。

SetWindowPos(hWndWindow, NULL, 0, 0, 500, 500, SWP_NOZORDER);

窗口句柄有效。我尝试通过手动将句柄值设置为我想要调整大小的窗口来获取句柄。FindWindow

当我使用 时,它说窗口是而不是SW_MAXIMIZE。GetWindowPlacementSW_NORMAL

窗口样式是

0x160b0000 (WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | WS_SYSMENU | WS_MINMIZEBOX | WS_MAXIMIZEBOX)

扩展样式是0x0。

我还尝试在调用之前将窗口设置为 with。SW_NORMALShowWindowSetWindowPos

SetWindowPos两者都返回非错误值,表示它们没有失败。MoveWindow

为什么 SetWindowPos 和 MoveWindow 无法移动或调整此窗口的大小?

C++ WinAPI 移动 设置窗口

评论

0赞 Cheers and hth. - Alf 10/23/2016
听起来该窗口属于另一个进程。
0赞 John 10/23/2016
@Cheersandhth.-Alf,直到我从创建窗口的进程内的确切线程调用 SWP 之前,它才移动。为什么这个过程有这个限制,而我能够移动其他进程的其他一些窗口?
0赞 Cheers and hth. - Alf 10/23/2016
我不知道,对不起。这只是一个表面的观察,希望能指出一些澄清或想法的方向。
0赞 IInspectable 10/23/2016
@John:这是Windows中窗口管理器的规则之一。Windows 具有线程亲和性,这意味着它们只能从拥有它们的线程安全可靠地进行修改。未定义从所属线程以外的线程操作窗口。
1赞 Remy Lebeau 10/23/2016
也许@IInspectable,但允许跨线程移动窗口。因此,也许这是跨完整性级别的 UIPI 限制,或者窗口的消息过程,甚至是消息钩子,只是阻止了移动。

答: 暂无答案