在mfc中,在实现循环显示同一对话框中的不同内容中,会出现DoModal调用失败的情况。并且线程无法退出,导致线程创建失败,之后在转为非模态对话框后,会出现只显示一次的情况,求如何在多次显示后不崩溃,求解答
平台为VS2008 VC++2008
void CMaintenanceServiceDlg::OnBnClickedIqOqPqCertificationBtn()
{
memset(&theApp.m_IQ_OQ_PQ_Certification, 0, sizeof(theApp.m_IQ_OQ_PQ_Certification));
int ENUM_x = 1;
while(ENUM_x <= NUM) //enum NUM = 58
{
CIqOqPqCertificationDlg IqOqPqCertificationDlg;
INT_PTR Q3Q = IqOqPqCertificationDlg.DoModal(ENUM_x);
if(Q3Q == EXIT_APP)
{
memset(&theApp.m_IQ_OQ_PQ_Certification, 0, sizeof(theApp.m_IQ_OQ_PQ_Certification));
delete(IqOqPqCertificationDlg);
return;
}
else if(Q3Q == RETURN_APP)
{
delete(IqOqPqCertificationDlg);
ENUM_x++;
}
}
memset(&theApp.m_IQ_OQ_PQ_Certification, 0, sizeof(theApp.m_IQ_OQ_PQ_Certification));
return;
}
INT_PTR CIqOqPqCertificationDlg :: DoModal(int setType)
{
m_DlgType = setType;
return CDialog :: DoModal();
}
void CIqOqPqCertificationDlg :: InitDialogControl()//中英文暂时
{
GetDlgItem(IDC_WARNING1_STATIC)->SetFont(&m_Font);
GetDlgItem(IDC_WARNING2_STATIC)->SetFont(&m_Font);
m_WhiteBrush = CreateSolidBrush(WHITE_COLOR);
m_Blackish_GreenBrush = CreateSolidBrush(BLACKISH_GREEN);
wchar_t dialogTitleBuf[_BUFFER_LENGTH_256] = {0};
if(!GetDlgItem(IDC_WARNING1_STATIC))
theApp.WriteLogToFile("IDC_WARNING1_STATIC", __FILE__, __LINE__, __FUNCTION__);
if(!GetDlgItem(IDC_WARNING2_STATIC))
theApp.WriteLogToFile("IDC_WARNING2_STATIC", __FILE__, __LINE__, __FUNCTION__);
if(!GetDlgItem(IDC_WARNING3_STATIC))
theApp.WriteLogToFile("IDC_WARNING3_STATIC", __FILE__, __LINE__, __FUNCTION__);
if(!GetDlgItem(IDC_WARNING4_STATIC))
theApp.WriteLogToFile("IDC_WARNING4_STATIC", __FILE__, __LINE__, __FUNCTION__);
if(!GetDlgItem(IDC_WARNING5_STATIC))
theApp.WriteLogToFile("IDC_WARNING5_STATIC", __FILE__, __LINE__, __FUNCTION__);
if(!GetDlgItem(IDC_WARNING6_STATIC))
theApp.WriteLogToFile("IDC_WARNING6_STATIC", __FILE__, __LINE__, __FUNCTION__);
if(!GetDlgItem(IDC_RECORD_LIST))
theApp.WriteLogToFile("IDC_RECORD_LIST", __FILE__, __LINE__, __FUNCTION__);
if(!GetDlgItem(IDC_EDIT_STATIC))
theApp.WriteLogToFile("IDC_EDIT_STATIC", __FILE__, __LINE__, __FUNCTION__);
//标题、中间显示内容,底部按键
if (m_DlgType == IQ_Start)
{...}
else if (m_DlgType == IQ_File)
{
//显示界面内容
}
else if (m_DlgType == IQ_Goods)
{
}
else if (m_DlgType == IQ_PowerSupply)
{
}
else if (m_DlgType == IQ_Sunshine)
{
}
else if (m_DlgType == IQ_AirConditioner)
{
}
else if (m_DlgType == IQ_HumidityTemperature)
{
...
}
else if (m_DlgType == IQ_ConnectingLine)
{
...
}
...
//标题
m_DialogTitle.SetTitle(dialogTitleBuf);
m_TitleStatic.SetTimer(1, 1000, NULL);
m_CompanyIcon.SetBitmap(IDB_COMPANY_LINE);
m_Dummy1Bn.LoadBitmaps(IDB_BUTTON, IDB_BUTTON, IDB_BUTTON);
m_Dummy2Bn.LoadBitmaps(IDB_BUTTON, IDB_BUTTON, IDB_BUTTON);
m_Dummy3Bn.LoadBitmaps(IDB_BUTTON, IDB_BUTTON, IDB_BUTTON);
m_Dummy4Bn.LoadBitmaps(IDB_BUTTON, IDB_BUTTON, IDB_BUTTON);
m_Dummy5Bn.LoadBitmaps(IDB_BUTTON, IDB_BUTTON, IDB_BUTTON);
m_ExitBn.LoadBitmaps(IDB_BUTTON, IDB_BUTTON, IDB_BUTTON);
return;
}