Button 我试图在第一次单击后禁用该按钮。它';他现在为我工作。当对话框关闭时,我希望再次启用按钮

Button 我试图在第一次单击后禁用该按钮。它';他现在为我工作。当对话框关闭时,我希望再次启用按钮,button,visual-c++,mfc,Button,Visual C++,Mfc,现在,按钮在第一次单击后被禁用。我想在关闭对话框时再次启用按钮。请帮助我解决此问题。这是一个非无模式的对话框。所以你必须自己跟踪它。最简单的方法是,当对话框接收到ondestory或OnClose事件时,向父窗口/对话框发送WM\u APP+n消息。父对话框可以处理此消息并禁用相应的按钮 另一种方法是设置计时器。在计时器中,您可以检查m_DCMTagDlg.m_hWnd是否仍然为NULL。如果它达到NULL只需禁用按钮。这并不意味着替换现有答案,而是基于注释 您可以使用类向导添加自定义消息处理

现在,按钮在第一次单击后被禁用。我想在关闭对话框时再次启用按钮。请帮助我解决此问题。

这是一个非无模式的对话框。所以你必须自己跟踪它。最简单的方法是,当对话框接收到
ondestory
OnClose
事件时,向父窗口/对话框发送
WM\u APP+n
消息。父对话框可以处理此消息并禁用相应的按钮


另一种方法是设置计时器。在计时器中,您可以检查
m_DCMTagDlg.m_hWnd
是否仍然为
NULL
。如果它达到
NULL
只需禁用按钮。

这并不意味着替换现有答案,而是基于注释


您可以使用类向导添加自定义消息处理程序。我创建了一个GUID并将其附加到
WM_APP
,并使用注册的消息。

在OnCancel()和OnOK()中处理此问题。@ThomasWoelfer这是一个非模式对话框……您能告诉我如何使用WM_APP+n#定义WM_MYSPECIALMSG(WM_APP+4711)来完成此操作吗
void CMyViewerDlg::OnBnClickedShow()
{

    m_DCM.Create(IDD_TAG, this);
    m_DCM.ShowWindow(SW_SHOW);
    BOOL isOn = true;
    if (isOn == false)
    {
        GetDlgItem(IDC_SHOW)->EnableWindow(TRUE);
    }

    else
    {
        GetDlgItem(IDC_SHOW)->EnableWindow(FALSE);
    }
 }