c++ - 在分层窗口的子对话框中未单击 CMFCButton
问题描述
背景:
- 创建一个以 WS_EX_LAYERED 和 GetDesktopWindow() 作为父级的 CWnd
- 创建一个以分层窗口为父级的 CDialogEx
- 在对话框中添加一个按钮并使用 DDX_Control 使其成为 CMFCButton
问题:
在分层窗口区域内单击,使对话框没有焦点,然后尝试单击对话框上的按钮。该按钮不会响应该事件。
评论:
如果按钮只是 CButton,那么它可以正常工作。有人可能会说对话框需要有焦点才能工作,但在任何其他情况下都不是这样。通常,当我单击对话框上的按钮时,即使我的焦点之前位于完全不同的程序中,它也始终有效。
代码:
分层窗口的创建函数:
bool CLayerWnd::Create()
{
if (!__super::CreateEx(WS_EX_LAYERED, DEMOLAYEREDCLASS, _T("Layered Window"), WS_POPUP, 200, 200, 500, 500, ::GetDesktopWindow(), NULL))
return false;
m_childDlg.Create(this);
m_childDlg.ShowWindow(SW_SHOW);
ShowWindow(SW_SHOW);
DrawWindow();
return true;
}
对话框的创建函数:
bool CChildDlg::Create(CWnd *pParentWnd)
{
if(!__super::Create(CChildDlg::IDD, pParentWnd))
return false;
return true;
}
演示VS2015项目:
https://www.dropbox.com/s/ha8o13hfz2kfn97/LayerDemo.zip?dl=0
解决方案
添加以下代码,它将起作用。
BOOL CChildDlg::OnInitDialog()
{
__super::OnInitDialog();
m_btnMFCButton.m_bDontUseWinXPTheme = TRUE; //<-This line specifically
return TRUE;
}
推荐阅读
- android - 修改触摸事件值android
- android - 如何在可绘制文件夹的文件夹内调用图像?
- python - 使用 Kivy 导航到某个屏幕时显示 DataTables
- python - np.mean 返回(nan)行值
- flutter - 如何在颤动的地图上隐藏/显示CustomInfoWindow?
- arrays - $config 必须是字符串或数组
- javascript - 如何从 javascript 文件中访问 tailwind 类
- tomcat - 如何在 Tomcat 9 中启动和重新启动应用程序?
- dart - Dart 空安全。检查条件后可以立即将可变变量设置为空吗?
- laravel - Laravel nova 趋势计算所有价值