2011-09-30 303 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標誌被設置,則窗口不能移動或大小。