首页 > 解决方案 > 在分层窗口的子对话框中未单击 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

标签: c++mfc

解决方案


添加以下代码,它将起作用。

BOOL CChildDlg::OnInitDialog()
{
    __super::OnInitDialog();

    m_btnMFCButton.m_bDontUseWinXPTheme = TRUE; //<-This line specifically

    return TRUE;
}

推荐阅读