我正在编写一个利用DeferWindowPos API函数的虚拟桌面应用程序。我当前使用的方法是将窗口移出屏幕(如果它们不在当前虚拟桌面上)。但是我知道也希望隐藏屏幕外的窗口,以使它们不会出现在任务栏上。我也通过将SWP_SHOWWINDOW / SWP_HIDEWINDOW传递给DeferWindowPos()调用来进行尝试。我已经阅读了一些有关此内容的站点,其中之一建议如果传递SWP_SHOWWINDOW / SWP_HIDEWINDOW,则窗口将仅显示或隐藏,而不会重新定位。有人可以确认吗,还是我做错了什么?
最佳答案
除了rtfm之外,DeferWindowPos最终将调用SetWindowPos。 SetWindowPos始终通过WM_WINDOWPOSCHANGING
将其参数传递给WindowProc来验证其参数,因此,除非您还将每个窗口WindowProc作为虚拟桌面管理器的一部分进行钩挂,否则将其移出屏幕对于开发人员正在执行某些操作的任何窗口将失败“聪明”或不寻常-例如夹在工作区的边缘。