2011-09-30 55 views
1

我有一个GUI应用程序,它使用GStreamer从捕捉卡捕捉视频,然后播放视频。音频和视频流发送到GStreamer,GStreamer自动打开自己的窗口播放视频。一旦视频窗口打开,我需要取出视频窗口并删除边框并设置窗口的大小和位置,并将我的GUI窗口作为该窗口的父窗口,以便将其“锚定”到我的GUI窗口。SetWindowPos()不移动或调整窗口大小

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

当我开始我的应用程序时,在一个非常短暂的时刻,它看起来像我的窗口正在调整大小并正确放置,但随后窗口返回到其默认位置(几乎就像忽略了SetWindowPos()甚至被称为)。这是否有明显的原因?我对窗口操作很陌生,所以很可能我犯了一个简单的错误,但这并不能解决为什么我的窗口会在短时间内正确定位,然后又回到默认位置。

+0

这几乎肯定是错误的做法。我确信GStreamer有一种方法可以让你指定你想要视频播放的窗口,所以你不必采用这种黑客技术。 –

回答

1

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

从文档:

如果SWP_SHOWWINDOW或SWP_HIDEWINDOW标志被设置,则窗口不能移动或大小。