检查对话框是否在MFC VC ++中打开

时间:2016-05-11 08:55:17

标签: mfc

我有一个应用程序(Manager)用于通过套接字将命令发送到另一个应用程序(讲师)。从第一个应用程序开始,我将配置一些有用的数据来调用和运行第二个应用程序。同时我从第二个应用程序获取报告到第一个应用程序。

让我解释一下我的问题,我有一套必须在第二次申请中运行的练习。我可以通过调用练习对话框从第一个应用程序或第二个应用程序调用它。一旦我调用,我就可以得到报告。为此,我的第一个应用程序中有一个按钮。

这里发生了什么,在调用运动对话框之前,当我按下此按钮时,它显示错误。

所以,我只是想知道该对话框是否被打开。

我使用GetSafeHwnd(),但是一旦为该对话框类创建了对象,即使对话框未打开,这些句柄也会获得一些值。

这里我粘贴了代码,一旦我按下按钮' GenXL'来自第一个应用程序的命令。

  extern CPerfScore *oPerfScore;
    void CMainFrame::ProcessPendingRead(void)
    {
        int nRead;
        CString strBuf;
        CString sCmd;       
        nRead = m_pCltSocket->Receive( &m_pRecPacket, sizeof(Packet));      
        if(nRead > 0)
        {   
                // read the message
                sCmd = m_pRecPacket.sMessage; 
                AfxMessageBox(sCmd);
                if (sCmd.CompareNoCase("CLOSE") == 0)
                {               
                    OnClose();
                }               
                if (sCmd.CompareNoCase("GENXL") == 0)
                {                   
                    if(oPerfScore->GetSafeHwnd() == 0)
                    {
                        oPerfScore->SendMessage(WM_COMMAND, IDC_GENERATE_EXCEL);
                    }
                    else
                    {
                        AfxMessageBox("Exercise dialog not open");
                    }
                }   
        }
    }

1 个答案:

答案 0 :(得分:2)

即使窗口当前没有显示,句柄也会有效,只要它已经创建。我认为您正在寻找API调用IsWindowVisible()。我相信MFC将其作为会员包装。