码迷,mamicode.com
首页 > 其他好文 > 详细

模拟doModal对话框

时间:2018-08-11 16:20:24      阅读:146      评论:0      收藏:0      [点我收藏+]

标签:检索   creat   ESS   mes   leo   stdcall   extern   对话   create   

在DLL中封装了一个非模态对话框窗口,但是在运行时希望能阻塞主线程,但是不阻塞界面

DWORD WINAPI doModal(LPVOID p)
{//线程函数
	INT  i = 0;
	while (1)
	{ 
		i++;
		Sleep(30);
		if (i == 200)break;
		static MSG msg;
		if (::PeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE))
		{
			AfxGetApp()->PumpMessage();
		}
	}

	return 0;
}

void DoEvent()
{//分法消息
	MSG msg;
	if (::PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))  //取消息,检索应用程序的消息队列,PM_REMOVE取过之后从消息队列中移除  
	{
		//发消息  
		::TranslateMessage(&msg);
		::DispatchMessage(&msg);
	}
}

extern "C"  __declspec(dllexport) VOID  __stdcall  CreateMsgBox(CWnd * parent)
{//创建窗口
	CScale3DCMessageBoxDlg  *pDlgMsgBox = new CScale3DCMessageBoxDlg ;
	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;
	DoEvent();
	do
	{
		dwRet = ::MsgWaitForMultipleObjects(1, hThread, FALSE, INFINITE, QS_ALLINPUT);
		if (dwRet != WAIT_OBJECT_0)
		{
			DoEvent();
		}
	} while ((dwRet != WAIT_OBJECT_0) && (dwRet != WAIT_FAILED));
}


模拟doModal对话框

标签:检索   creat   ESS   mes   leo   stdcall   extern   对话   create   

原文地址:http://blog.51cto.com/9233403/2157994

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!