检查对话框是否在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函数上的断言错误。如果我对此进行注释,第二行出现断言错误。是否按照断言对话框上的说明操作?它会准确地告诉您代码违反了哪些条件。