MFC下多线程与消息机制的结合使用

前面一段时间,一直在想怎么样实现在全局的线程函数中实现调用窗体的一些函数(比如说在线程里面调用按钮单击处理函数,以及窗体的一些操作)。最近在网络 闲逛中发现了实现的方法,特意贴出来(ps:以前经常看别人写的一些东西,感觉很受用,这里也贡献一下自己的东西,希望能够帮助到别人)

   这里我用vc++6.0创建了一个名为Muti_Tread的对话框程序。

 Muti_ThreadDlg.h : header file 中添加

    // Generated message map functions
    //{{AFX_MSG(CMuti_ThreadDlg)
    virtual BOOL OnInitDialog();
    afx_msg LRESULT OnMyMessage(WPARAM wParam, LPARAM lParam);//
添加的消息声明

    //}}AFX_MSG
    DECLARE_MESSAGE_MAP()

  Muti_ThreadDlg.cpp : implementation file

  首先定义

   #define WM_MY_MESSAGE (WM_USER+100)//WM_USER 有一些控件也使用,因此这里要加上100

 下一步 还是在Muti_ThreadDlg.cpp : implementation file

   BEGIN_MESSAGE_MAP(CMuti_ThreadDlg, CDialog)
    //{{AFX_MSG_MAP(CMuti_ThreadDlg)
    ON_WM_SYSCOMMAND()
    ON_WM_PAINT()
    ON_WM_QUERYDRAGICON()
    ON_BN_CLICKED(IDC_BUTTON1, OnButton1)
    ON_MESSAGE(WM_MY_MESSAGE, OnMyMessage)//
添加.
    //}}AFX_MSG_MAP
END_MESSAGE_MAP()

     同时实现消息处理函数

LRESULT CMuti_ThreadDlg::OnMyMessage(WPARAM wParam, LPARAM lParam)
{
    MessageBox("OnMyMessage!");
    return 0;
}

  这样完整的消息机制就建立了,这里是调用了MessageBox函数,其他的窗体函数以及按钮的消息响应函数也可以直接调用了。下面关键是在全局的函数中弹出消息,使得消息的响应函数OnMyMessage能够运行。翻阅了一些资料,总算给找到了

   使用     ::PostMessage(AfxGetMainWnd()->m_hWnd,WM_MY_MESSAGE,NULL,NULL);

    在全局函数中 

   void global()

{

  ::PostMessage(AfxGetMainWnd()->m_hWnd,WM_MY_MESSAGE,NULL,NULL);// 弹出消息

}

 最后创建线程

       HANDLE t_facedetect=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)global,NULL,0,0);//线程运行函数

  到此 结束

posted @ 2011-01-07 09:18  奔跑的兔子  阅读(3739)  评论(1编辑  收藏  举报