【发布时间】:2012-09-25 12:50:04
【问题描述】:
我尝试为 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);,这令人惊讶地让我的窗口重新获得焦点。但是当再次尝试从全屏模式切换回来时,它突然消失了。
我不知道为什么有这么多不同的功能,对我来说似乎都大体相同。但没关系,反正它们都不起作用。
正确执行我的控件的/一种正确方法是什么?
【问题讨论】:
标签: c++ windows winapi activex fullscreen