在程序中用線程技術打開一個非模態對話框

要在程序中用線程技術打開一個非模態對話框,但結果對話框總是一閃而過。查了一些資料,找到了這一篇文章 :線程中啓動非模態對話框。根據裏面所寫敲代碼結果還是不行。再做了部分更改後,終於成功了。如下:


顯示對話框代碼:

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)
	{
        	MSG msg;   
		::GetMessage( &msg, chargeForm->m_hWnd, NULL, NULL );
		::TranslateMessage( &msg );
		::DispatchMessage( &msg );
	}
 }

在這樣的處理之後,便可以在子線程中彈出一個非模態對話框了。不過原理是什麼,爲什麼要在Create之後再加一個消息循環代碼,還望大神解釋。





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章