(一) 利用用户定义的消息通信  在Windows程序设计中,应用程序的每一个线程都拥有自己的消息队列,甚至工作线程也不例外,这样一来,就使得线程之间利用消息来传递信息就变的非常简单。首先用户要定义一个用户消息,如下所示:#define WM_USERMSG WMUSER+100;在需要的时候,在一个线程中调用::PostMessage((HWND)param,WM_USERMSG,0,0)或CwinThread::PostThradMessage()来向另外一个线程发送这个消息,上述函数的四个参数分别是消息将要发送到的目的窗口的句柄、要发送的消息标志符、消息的参数WPARAM和LPARAM。
就是关于这个方面的。高手门给讲解一下。谢谢

解决方案 »

  1.   

    怎么不看MSDN?
    1、PostMessage需要一个窗口句柄,PostThradMessage需要的是一个线程ID!2、第二个参数MSG不用解释吧?3、关于两个参数:你可以把这个认为是函数调用,你这个消息也是个函数!是函数它就可能有参数。消息函数实质是MS规定的一个标准回调函数,所以你必须要以这种方式定义。你可以通过这两个参数来传递相关数据以便该消息函数能处理!
      

  2.   

    这句话写的就有点歧义。接受消息的线程应该有消息泵。
    看你这个应该是一个线程给一个界面线程发消息。
    其实很简单。
    首先你要在界面线程里有这个消息的定义:
    #define   WM_USERMSG   WMUSER+100;然后定义消息回调函数。
    afx_msg void MyMessage(WPARAM wparam, LPARAM lparam );消息映射
    BEGIN_MESSAGE_MAP(C***, C***)
    ON_MESSAGE(WM_USERMSG, MyMessage)
    END_MESSAGE_MAP()然后线程里
    UNIT mythread(void *param)//param把接受消息的句柄传下来
    {
    PostMessage((HWND)param,WM_USERMSG,0,0);
    }
      

  3.   

    PostThradMessage我没用到过。PostThreadMessage我倒是用到过。
    譬如在刚才的线程函数里加消息循环。#define       WM_USERMSG       WMUSER+101; 
    UNIT   mythread(void   *param)//param把接受消息的句柄传下来 

    PostMessage((HWND)param,WM_USERMSG,0,0);     MSG msg;
        while(GetMessage(&msg, NULL, 0, 0))
        {
    TranslateMessage(&msg);
            switch(msg.message)
                {
                case MY_MSG:                 break;
                }
        }
    return 0;
    }CwinThread m_thread=AfxBeginThread(this);
    m_thread.PostThreadMessage(WM_USERMSG,0,0);