C++ ActiveX控件的全屏模式

C++ ActiveX控件的全屏模式,c++,windows,winapi,activex,fullscreen,C++,Windows,Winapi,Activex,Fullscreen,我尝试为ActiveX控件实现切换到全屏模式。目前,这是通过删除和隐藏父窗口以及更改控件的位置来实现的 但是,当控件处于全屏模式时,我在应用程序之间切换时遇到问题。如果我切换到另一个应用程序,然后单击我的窗口区域(不在任务栏中),它似乎没有被激活。您可以在任务栏中看到,另一个应用程序仍然具有突出显示,在主屏幕上,“我的窗口”部分隐藏在任务栏后面,除非它具有焦点 我处理WM_LBUTTONDOWN窗口消息以检测是否单击了我的窗口。我已经尝试调用以下WINAPI函数: ::ShowWindow(m_

我尝试为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_样式,WS_-VISIBLE)这让我的窗口恢复了焦点。但当再次尝试从全屏模式切换回来时,它突然消失了

我不知道为什么有这么多不同的功能,对我来说似乎都做大致相同的事情。但这并不重要,因为它们都没有起作用


正确操作我的控件的正确方法是什么?

Windows可能会有点困惑,因为您在屏幕上填充了一个子窗口,但您希望它像顶级(重叠)窗口一样工作。主机应用程序可能未被激活,因为您已隐藏其窗口

您最好为全屏模式创建一个新的顶级全屏窗口。如果它属于(最终)承载您控件的顶级窗口,那么您的新窗口将始终位于它的上方,因此您不需要隐藏现有窗口。激活应该只是工作。简而言之,您希望窗口的行为类似于弹出模式对话框


Adobe的flash player似乎也做了类似的事情。全屏播放是在类的窗口中进行的。全屏

窗口可能会有点混乱,因为您正在用子窗口填充屏幕,但您希望它的行为类似于顶级(重叠)窗口。主机应用程序可能未被激活,因为您已隐藏其窗口

您最好为全屏模式创建一个新的顶级全屏窗口。如果它属于(最终)承载您控件的顶级窗口,那么您的新窗口将始终位于它的上方,因此您不需要隐藏现有窗口。激活应该只是工作。简而言之,您希望窗口的行为类似于弹出模式对话框

Adobe的flash player似乎也做了类似的事情。全屏播放在类的窗口中
shockwaveshishfullscreen