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

检查对话框是否在MFC VC+中打开+;,mfc,Mfc,我有一个应用程序(管理器),用于通过套接字向另一个应用程序(讲师)发送命令。在第一个应用程序中,我将配置一些数据,这些数据对于调用和运行第二个应用程序非常有用。同时,我从第二个应用程序到第一个应用程序获取报告 让我解释一下我的问题,我有一套练习,必须在第二次应用程序中运行。我可以从第一个应用程序调用它,也可以通过调用“练习”对话框从第二个应用程序调用它。一旦我调用了,我就可以得到报告了。为此,我在我的第一个应用程序中有一个按钮 extern CPerfScore *oPerfScore;

我有一个应用程序(管理器),用于通过套接字向另一个应用程序(讲师)发送命令。在第一个应用程序中,我将配置一些数据,这些数据对于调用和运行第二个应用程序非常有用。同时,我从第二个应用程序到第一个应用程序获取报告

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

  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");
                    }
                }   
        }
    }
在调用“练习”对话框之前,当我按下此按钮时,会显示错误

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

我使用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");
                    }
                }   
        }
    }

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

即使当前未显示窗口,只要已创建,句柄也将有效。我想您正在寻找API调用IsWindowVisible()。我相信MFC将其包装为一个成员。

我确信您可以将
WM_命令
消息发送到不可见窗口。我怀疑问题出在其他地方。我确信您可以将
WM_命令
消息发送到不可见窗口。我怀疑问题出在其他地方。Re:
它显示错误
-什么错误?
如果(oPerfScore->GetSafeHwnd()==0)oPerfScore->SendMessage(…)
这没有任何意义。也许你的意思是
if(oPerfScore->GetSafeHwnd())oPerfScore->SendMessage(…)
有时候它挂起,有时候它在IDC\u GENERATE\u EXCEL的函数定义的第一行显示断言错误,我调用SetTimer(),它是SetTimer函数上的断言错误。如果我对此进行注释,第二行出现断言错误。是否按照断言对话框上的说明操作?它准确地告诉您代码违反了哪个条件。Re:
它显示错误
-什么错误?
如果(oPerfScore->GetSafeHwnd()==0)oPerfScore->SendMessage(…)
这没有任何意义。也许你的意思是
if(oPerfScore->GetSafeHwnd())oPerfScore->SendMessage(…)
有时候它挂起,有时候它在IDC\u GENERATE\u EXCEL的函数定义的第一行显示断言错误,我调用SetTimer(),它是SetTimer函数上的断言错误。如果我对此进行注释,第二行出现断言错误。是否按照断言对话框上的说明操作?它会准确地告诉您代码违反了哪些条件。