2012-09-25 26 views
0

我試圖爲ActiveX控件實現切換到全屏模式。這目前通過刪除和隱藏父窗口並更改我的控件的位置和位置。ActiveX控件的全屏模式

但是,在控制處於全屏模式時,我在切換應用程序時遇到了問題。如果我切換到另一個應用程序,然後單擊我的窗口區域(不在任務欄中),它似乎不會被激活。您可以在任務欄中看到另一個應用程序仍然具有高亮顯示,並且在主屏幕上,我的窗口部分隱藏在任務欄後面,除非它具有焦點。

我處理WM_LBUTTONDOWN窗口消息來檢測我的窗口是否被點擊。我已經試着撥打以下WINAPI功能:

::ShowWindow(m_hWnd, SW_RESTORE); 
::SwitchToThisWindow(m_hWnd, FALSE); 
::SetForegroundWindow(m_hWnd); 
::SetActiveWindow(m_hWnd); 
::SetFocus(m_hWnd); 
::BringWindowToTop(m_hWnd); 
::SetWindowPos(m_hWnd, HWND_TOP, m_monitorInfo.rcMonitor.left, m_monitorInfo.rcMonitor.top, m_monitorInfo.rcMonitor.right, m_monitorInfo.rcMonitor.bottom, SWP_NOSIZE | SWP_NOMOVE | SWP_SHOWWINDOW); // SWP_NOACTIVATE, SWP_NOOWNERZORDER 

我還試圖用::SetWindowLongW(m_hWnd, GWL_STYLE, WS_VISIBLE);其令人驚訝地給我窗口的焦點回來。但是當試圖再次從全屏模式切換回來時,它突然消失了。

我不知道爲什麼有這麼多不同的功能,對我來說似乎都做了大致相同。但無所謂,因爲他們中沒有一個能夠工作。

正確表達我的控件的正確方法是什麼?

回答

4

Windows可能會變得有點困惑,因爲您使用子窗口填充屏幕,但您希望它的行爲類似於頂級(重疊)窗口。主機應用程序可能沒有被激活,因爲你隱藏了它的窗口。

您可能會更好地爲全屏模式創建一個新的頂級全屏窗口。如果這個屬於頂層窗口(最終)託管你的控件,那麼你的新窗口將始終高於它,所以你不需要隱藏現有的窗口。激活應該是正常的。簡而言之,您希望您的窗口的行爲類似於彈出式模式對話框。

Adob​​e的Flash播放器似乎做了類似的事情。全屏播放在類別ShockwaveFlashFullScreen的窗口中。