ActiveX控件的全屏模式
Fullscreen mode for ActiveX control
我试图为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);
,这让我的窗口出乎意料地恢复了焦点。但当再次尝试从全屏模式切换回来时,它突然消失了。
我不知道为什么有这么多不同的功能,对我来说似乎都是大致相同的。但这并不重要,因为他们都不起作用。
正确控制的正确方式是什么?
Windows可能会有点困惑,因为您在屏幕上填充了一个子窗口,但您希望它表现得像一个顶级(重叠)窗口。主机应用程序可能没有被激活,因为您已经隐藏了它的窗口。
您最好为全屏模式创建一个新的顶级全屏窗口。如果它由(最终)承载您的控件的顶级窗口所有,那么您的新窗口将始终位于它之上,因此您不需要隐藏现有窗口。激活应该会起作用。简而言之,您希望您的窗口表现得像一个弹出的模态对话框。
Adobe的flash播放器似乎也做了类似的事情。全屏播放是在ShockwaveFlashFullScreen
类的窗口中进行的。
相关文章:
- 在createdialog创建的窗口中捕获用于编辑控件的OnMouseMove消息
- WinAPI 在单击第一个对话框上的按钮控件并销毁第一个对话框后创建第二个对话框
- 在编译时,C++项目抛出错误 C2228,这是预期的,因为控件在运行时未达到该点
- 如何更改窗体上所有控件的标题?[C++生成器]
- 双击更改 mfc 中列表控件中的行的颜色
- 派生的 wxPanel 控件如何访问其中包含 wxDialog 中的数据?
- 如何从代码本身向 wxwidgets 中的文本控件插入字符?
- 如何在MFC中的静态文本控件上插入图标?
- 我的主窗口在创建时或单击更新区域时是否会收到编辑控件?
- 如何在Qt C++中向自定义控件添加属性?
- C/C++ 检测双击 TVItem 的常用控件
- 从C++标头中导入常量而不是硬编码它们:扩展 .net 控件?
- 控件不会在选择函数旁边移动
- MFC:我们能否扩展CEditView中存在的CEdit控件类行为
- 通过嵌入式 IWebBrowser2 控件中的链接打开 youtube 搜索失败
- ActiveX控件的全屏模式
- 设计模式保存MFC对话框控件状态的步骤
- 在调试模式下编译时,丰富的编辑控件格式不起作用
- 是否可以在CEdit控件的纯数字和字母数字输入模式之间切换
- 在发布模式下崩溃但在调试模式下不崩溃的 ActiveX 控件