本帖最后由 sunzhen6251 于 2011-06-13 10:39:15 编辑

解决方案 »

  1.   

    1.那个叫窗口间,不叫线程间
    如果要用消息来传递数据的话,你的方法是首选,也是95%的人的选择,当然啦,还可以写文件,内存映射文件等,然后再用消息来通知也可以,很麻烦的。
    2.
    我不知道你用CreateThread创建的线程是如何接收到PostThreadMessage或者SendMessage消息的,除非你自己创建一个消息循环,否则这些消息时无法接收的最后还是要提醒LZ一下,不要把窗口和线程弄混淆了,感觉LZ现在就有点混淆了
      

  2.   

    线程需要用PostThreadMessage,本人经常用,效果不错!!!!
      

  3.   

    不仅可以跨线程,跨进程都可以,系统会帮你marshal 指针指向的数据
      

  4.   

    1. 不是跨进程的话,SendMessage/PostMessage都可以,跨进程的话,WM_COPYDATA比较简单
    2. new一个,然后PostThreadMessage
      

  5.   

    两个窗口之间传递消息,应该是两个进程传递,如果通过PostMessage或SendMessage只能传递int型。可以在两个窗口内通过窗口类名(或窗口标题)称查找,获取消息通讯句柄,通过WM_SETTEXT配合传递,WPARAM参数传递消息相关消息ID, LPARAM参数传递相关消息的参数部分;收到WM_SETTEXT消息后,再根据消息ID进行消息的内部转发处理。
    WM_SETTEXT消息的处理代码
     .h文件定义 
    afx_msg void OnSetTextMsg(WPARAM wParam, LPARAM lParam);
     .cpp文件实现
    //消息映射
    ON_MESSAGE(WM_SETTEXT, OnSetTextMsg)
    //消息实现
    char cmdparam[256];
    void CMyDlg::OnSetTextMsg( WPARAM wParam, LPARAM lParam)
    {
    memset(cmdparam, 0, 256);
    //相关消息参数
    wsprintf(cmdparam, "%s", (char*)lParam);
    //根据相应的消息类型,做内部消息处理
    int cmdtype = (int)wParam;
    //来电显示
    if(cmdtype == CALLDISPLAY)
    {
                   在这里处理,或发送消息另行处理
    //PostMessage(CALLDISPLAY, 0, (LPARAM)cmdparam);
    }
            ......
    }Char user[256] = {0}; //必须是全局变量
    .
    .
    .
    HWND hWnd = ::FindWindow(“Window Class”, NULL);
    if (hWnd!=NULL)
    {
    Strcpy(user, “yonghu1”);
    :: SendMessage (hWnd, WM_SETTEXT , 消息ID, (LPARAM)user);
    }
      

  6.   

    #7楼属于另类选手,赞一个
    SendThreadMessage???好像SengMessage就是送给线程的,所有没有那个Thread,PostMessage不能垮线程啊,因此有个PostThreadMessage吧
      

  7.   

    问题1:点击窗口A上的按钮,向窗口B发送消息,如果需要携带大量的数据,应该怎么弄呢?
    你的方法没有问题
    将A窗口的指针传递给B,然后在B中需要的时候访问A的成员
    这样需要加锁问题2:当我向CreateThread创建的线程发送消息并带有数据指针时,用的是PostThreadMessage,为什么没有SendThreadMessage呢?这时如果我要保证发送过去的指针在被线程处理之前是有效的,应该咋的弄啊?使用new在堆里,什么时候都有效
      

  8.   


    嗯,的确是有点弄混了我在自己的线程里有个循环,里面用GetMessage得到消息。另外还想问问,每个窗口是不是也是一个独立的线程啊?初学,见笑~
      

  9.   


    嗯,对于第二个问题,我主要是担心PostThreadMessage过去以后,会造成指针失效。new一个的意思是把参数都放在堆里么?然后线程收到以后再销毁?