要在程序中用线程技术打开一个非模态对话框,但结果对话框总是一闪而过。查了一些资料,找到了这一篇文章 :线程中启动非模态对话框。根据里面所写敲代码结果还是不行。再做了部分更改后,终于成功了。如下:
显示对话框代码:
void ChargeByCoinAcceptorForm::show()
{
Sleep(2000);
HANDLE hPrompThread=StartPromptThread();
//Sleep(0);
WaitForSingleObject(hPrompThread,INFINITE);
}
在StartPromptThread中创建线程:
HANDLE ChargeByCoinAcceptorForm::StartPromptThread(){
return CreateThread(0,0,(LPTHREAD_START_ROUTINE)RunPromptDialog,this,0,0);
}
在RunPromptDialog中利用Create方法创建非态对话框,并在末尾添加消息循环代码:
void RunPromptDialog(LPVOID Param)
{
ChargeByCoinAcceptorForm* chargeForm = (ChargeByCoinAcceptorForm*)Param;
chargeForm->Create(IDD_DIALOG1,NULL);
chargeForm->UpdateData();
chargeForm->ShowWindow(SW_SHOW);
//while(TRUE){}
while (TRUE)
{
MSG msg;
::GetMessage( &msg, chargeForm->m_hWnd, NULL, NULL );
::TranslateMessage( &msg );
::DispatchMessage( &msg );
}
// return 0;
}
MSG msg;
::GetMessage( &msg, chargeForm->m_hWnd, NULL, NULL );
::TranslateMessage( &msg );
::DispatchMessage( &msg );
}
// return 0;
}