我正在编写一个使用DeferWindowPos API函数的虚拟桌面应用程序。我正在使用的当前方法是将窗口移出屏幕,如果它们不在当前的虚拟桌面上。但是我知道也希望隐藏屏幕外的窗口,这样它们就不会出现在任务栏上。我也尝试过将SWP_SHOWWINDOW / SWP_HIDEWINDOW传递给DeferWindowPos()调用。我已经阅读了一些关于此的网站,其中一个建议如果传递了SWP_SHOWWINDOW / SWP_HIDEWINDOW,那么窗口将只显示或隐藏,并且没有重新定位。任何人都可以证实这一点,或者我做错了什么?
答案 0 :(得分:0)
答案 1 :(得分:0)
除了rtfm之外,DeferWindowPos最终将调用SetWindowPos。 SetWindowPos 总是通过WM_WINDOWPOSCHANGING
将它们传递给WindowProc来验证它的参数,所以,除非您还将每个窗口WindowProc作为虚拟桌面管理器的一部分挂钩,否则将它们移出屏幕会失败对于开发人员正在做一些“聪明”或不寻常的事情的窗户 - 比如夹在工作区的边缘。
答案 2 :(得分:0)
我也在文档中注意到这句话:
如果多窗口位置结构中的任何窗口设置了SWP_HIDEWINDOW或SWP_SHOWWINDOW标志,则不会重新定位任何窗口。
...在我已经重写了一些使用DWP的代码之后,所以我想我会尝试运行它。即使我每次调用DWP都使用了SWP_SHOWWINDOW或SWP_HIDEWINDOW,它也能正常工作。
这是在Windows 7 64位上,所以YMMV。