SetWindowPos()没有移动窗口或调整窗口大小

时间:2011-09-30 18:44:41

标签: windows

我有一个GUI应用程序,它使用GStreamer从捕获卡捕获视频,然后播放视频。音频和视频流被发送到GStreamer,GStreamer会自动打开自己的窗口来播放视频。一旦视频窗口打开,我需要取出视频窗口并删除边框并设置窗口大小和位置,并使我的GUI窗口成为该窗口的父窗口,以便它“锚定”到我的GUI窗口。

因为我知道视频窗口的名称,所以我使用FindWindow()来获取窗口的HWND句柄。然后我将HWND传递给SetWindowPos(),如下SetWindowPos(VideoWindow, GUIWindow, GUIWindowLeft, GUIWindowTop, 640, 360, SWP_SHOWWINDOW)。然后我设置了视频窗口的父级SetParent(VideoWindow, GUIWindow)

当我启动我的应用程序时,在很短的时间内看起来我的窗口正在调整大小并正确放置但是然后窗口返回到其默认位置(几乎就像忽略了SetWindowPos()甚至被调用)。为什么会发生这种情况有明显的原因吗?我是窗口操作的新手,所以很有可能我犯了一个简单的错误,但是因为我的窗口在非常短的时间内正确定位然后移回默认位置,所以它没有成功。

1 个答案:

答案 0 :(得分:1)

这是因为设置了SWP_SHOWWINDOW或SWP_HIDEWINDOW,窗口不会被移动或调整大小(参见SetWindowPos文档)。似乎有点奇怪。尝试使用不同的旗帜。

来自文档:

  

如果设置了SWP_SHOWWINDOW或SWP_HIDEWINDOW标志,则无法移动或调整窗口大小。