您好,登錄后才能下訂單哦!
今天就跟大家聊聊有關(guān)怎樣模擬doModal對(duì)話框,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。
在DLL中封裝了一個(gè)非模態(tài)對(duì)話框窗口,但是在運(yùn)行時(shí)希望能阻塞主線程,但是不阻塞界面
void DoEvent(); DWORD WINAPI doModal(LPVOID p) { INT i = 0; while (1) { i++; Sleep(30); if (i == 83)break; static MSG msg; if (::PeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE)) { AfxGetApp()->PumpMessage(); } } return 0; } void DoEvent(CScale3DCMessageBoxDlg &dlg) { MSG msg; //取消息,檢索應(yīng)用程序的消息隊(duì)列,PM_REMOVE取過(guò)之后從消息隊(duì)列中移除 if (::PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) { //發(fā)消息 ::TranslateMessage(&msg); ::DispatchMessage(&msg); dlg.SendMessage(msg.message, msg.wParam, msg.lParam); } } extern "C" __declspec(dllexport) VOID __stdcall CreateMsgBox(CWnd * parent) { CScale3DCMessageBoxDlg pDlgMsgBox; pDlgMsgBox.Create(IDD_DIALOG1, parent); pDlgMsgBox.ShowWindow(SW_SHOW); HANDLE hThread[1]; DWORD threadId; hThread[0] = CreateThread(NULL, 0, doModal, 0, 0, &threadId); DWORD dwRet; do { dwRet = ::MsgWaitForMultipleObjects(1, hThread, FALSE, INFINITE, QS_ALLINPUT); if (dwRet != WAIT_OBJECT_0) { pDlgMsgBox.UpdateWindow(); DoEvent(pDlgMsgBox); } } while ((dwRet != WAIT_OBJECT_0) && (dwRet != WAIT_FAILED)); }
看完上述內(nèi)容,你們對(duì)怎樣模擬doModal對(duì)話框有進(jìn)一步的了解嗎?如果還想了解更多知識(shí)或者相關(guān)內(nèi)容,請(qǐng)關(guān)注億速云行業(yè)資訊頻道,感謝大家的支持。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。