vc 修改MFC 消息循环的两种方法

来源:互联网 发布:安卓换ip软件 编辑:程序博客网 时间:2024/04/28 22:15

1.使用多线程应该是最好的方法了!
   类封装线程的一种技巧

CMainFrame::CMainFrame()
{
        CreateThread(NULL,   0,   ThreadFunc,   this,   0,   NULL);
}

static   DWORD   WINAPI   CMainFrame::ThreadFunc(LPVOID   lparam)
{
        return   ((CMainFrame*)lparam)-> ThreadRun();
}

CMainFrame::ThreadRun(void)
{
    //   在线程里做想做的事
        return   0;
}

 

2.重载消息循环.例子如下:
void   CDoeventsDlg::DoEvents()
{
MSG   msg;
if   (::PeekMessage(&msg,NULL,0,0,PM_REMOVE))   {   //从Windows消息队列中取出消息
if   (msg.message==   WM_QUIT)//如果消息为退出,发送退出消息
{  
::PostQuitMessage(-1);
}  
if(!AfxGetApp()-> PreTranslateMessage(&msg))//如果无法预处理消息
{
::TranslateMessage(&msg);//转换消息
::DispatchMessage(&msg);//发送消息
}
}
AfxGetApp()-> OnIdle(0);AfxGetApp()-> OnIdle(1);//消息队列为空时闲置一段时间
}