主线程向副线程post用这个函数
BOOL PostThreadMessage(
  DWORD idThread, // thread identifier
  UINT Msg,       // message
  WPARAM wParam,  // first message parameter
  LPARAM lParam   // second message parameter
);
副线程就用postmessage就行了。没什么特别要说明的吧。

解决方案 »

  1.   

    主窗口是一个dialog对话框,副线程如何用postmessage给主窗口发消息?
      

  2.   

    postmessage第一个参数就是
    ::PostMessage((HWND)pParam,WM_SWFINISHED,0,0);
    这个pParam就是辅助线程函数的参数,
    UINT SampleSWThread(LPVOID pParam),
    而这个参数又是主线程启动辅助线程的函数,
    pWinThread=AfxBeginThread(SampleSWThread,
    AfxGetMainWnd()->GetSafeHwnd(),
    THREAD_PRIORITY_NORMAL,
    0,
    CREATE_SUSPENDED
    );
    中的第二个参数,
    所以如果启动辅助线程的第二个参数是null,
    那么辅助线程中发的消息,就找不到正确的Hwnd,
    结果消息不能被正确响应,
    以上是我自己编程过程中的理解,不知道正确不正确,
      

  3.   

    所以,要想消息能正确被相应,
    那么AFxBeginThread()函数的第二个参数应该正确给予,
    如果这个函数放在View 中,第二个参数
    应该是GetSafeHwnd(),我试过没问题可以响应消息,
    后来我放倒app()中,第二个参数
    换成AfxGetMainWnd()->GetSafeHwnd(),结果消息就不能被相应了,
    还没搞太清楚是参数不对,还是别的地方出了问题,
    讨论讨论,也请高手指点!
    我想,我的相应消息函数是放在View中的,
    那么Hwnd也应该是View的,所以在View中GetSafeHwnd()传递过去没问题,
    而app中,AfxGetMainWnd()->GetSafeHwnd(),得到的是不是是mainFrame
    的hwnd? 那么怎么得到View的Hwnd那?
    以上有错误的地方,请大家指出
      

  4.   

    有没有一个成功的例子给我看看,谢谢
    邮箱:[email protected]
      

  5.   

    有没有一个成功的例子给我看看
    邮箱:[email protected]
      

  6.   

    postmessage只能向有窗口句柄的用户界面线程进行交互,而PostThreadMessage
    可以对其他窗口进行通信
      

  7.   

    ((CSockDlg*)CWnd::FromHandle (h_sockdlg))->PostMessage(M_BIGIN_HUAKUAN,0,0);这是我程序中的应用,
    解释:
    CSockDlg*是主对话框类的指针;
    h_sockdlg对应在程序中的如下声明extern HWND h_sockdlg;
    M_BIGIN_HUAKUAN是用户自定义消息;
    这样就可正常执行了
      

  8.   


    void ThreadPlay(CDialog * pDlg);中CDialog中,打开线程中,参数用this就可以了AfxBeginThread((AFX_THREADPROC)ThreadPlay, this,...);void ThreadPlay(CDialog * pDlg)
    {
        pDlg->PostMessage();// 不就行了吗}