MFC中使用SendMessage、PostMessage、PostThreadMessage

先看MSDN中解释:

BOOL PostThreadMessage(
   UINT message ,
   WPARAM wParam,
   LPARAM lParam 
);
Called to post a user-defined message to another CWinThread object
使用这个函数可以向一个CwinThread类型的类发送消息(即包括从CWindThrea中继承而来的类),使用方法如下:
CWinThread *pUIThread = AfxBeginThread(RUNTIME_CLASS(CProgress));//CProgress是从CWindThead中继承而来的类
CProgress *pUIThrd = (CProgress *)(pView->pUIThread);             //pView是一个视类的实例,pUIThread是它的一个成员
pUIThrd->PostThreadMessage(WM_PROS,NULL,NULL);                    //向CProgress类发送WM_PROS消息,由该类中对应的消息响应函数进行处理
 
 
   
BOOL PostMessage(
   UINT message,
   WPARAM wParam = 0,
   LPARAM lParam = 0 
);
Places a message in the window's message queue and then returns without waiting for the corresponding window to process the message
使用这个函数可以向一个CWnd类型的类发送你消息(即包括从CWnd类中继承而来的类),CView也是从中继承而来的,使用方法如下:
CWinThread *pThread = AfxBeginThread(Calculate,this);               //this代表的是一个从CView类中继承而来的Demo4View类,Caculate是该线程的
//线程处理函数,把this传递给Caculate进行处理
CDemo4View *pView = (CDemo4View *)pParam;
pView->PostMessage(WM_RESULT,NULL,duration);                        //向这个CDemo4View类发送WM_RESULT消息,由该类对应的消息响应函数进行处理
 
 
    
LRESULT SendMessage(
   UINT message,
   WPARAM wParam = 0,
   LPARAM lParam = 0 
);
它与PostMessage的用法相同个,不同支持是它只有在对应的类处理完发送的消息后才返回,这样后面的代码可能要过一段时间才能执行;
而PostMessge是发送完消息就立即返回,不管消息处理完没有,这样后面的代码就可以立即执行。
 
 
 

你可能感兴趣的:(一点小结)