::PostMessage(m_hWndEmployee,ADDEMPLOYEE,……);请问怎么实现?

解决方案 »

  1.   

    CString str1, str2;::PostMessage(m_hWndEmployee,ADDEMPLOYEE,&str1, &str2);
      

  2.   

    CString str1, str2;
    str1="sadfasfsafsad";
    str2="sadfsadf";
    ::PostMessage(m_hWndEmployee,ADDEMPLOYEE,str1.GetBufffer(str1.GetLength()), &str2.GetBuffer(str2.GetLength()));
      

  3.   

    楼上说的不行。应该这样来处理:
    如果是同一个进程内PostMessage,那么可以:
    WPARAM wParam = (WPARAM) new TCHAR[str1.GetLength()+1];
    LPARAM lParam = (LPARAM) new TCHAR[str2.GetLength()+1];
    lstrcpy( (TCHAR*)wParam, str1 );
    lstrcpy( (TCHAR*)lParam, str2 ); 
    ::PostMessage(m_hWndEmployee,ADDEMPLOYEE, wParam, lParam );而ADDEMPLOYEE消息的处理里进行delete这两个指针。如果是不同进程PostMessage,可以:
    WPARAM wParam = (WPARAM) GlobalAddAtom( str1 );
    LPARAM lParam = (LPARAM) GlobalAddAtom( str2 );而ADDEMPLOYEE消息的处理里,调用GlobalDeleteAtom销毁这两个Atom
      

  4.   

    直接PostMessage,除非str1和str2是全局变量才行,否则如果str1和str2是局部变量,
    那是要出问题的。
      

  5.   

    那在处理函数中怎么再将它接收转换成CString类型的变量呢?
    LRESULT CEmployee::OnAddEmployee(WPARAM wParam, LPARAM lParam)
    {
      CString revname;
      CString revdepartment;//分别接收str1,str2
      ……
    }
      

  6.   

    第一种情形的消息处理:
    同一个进程中,为了PostMessage字符串,就是在堆里通过new或者malloc分配一个新的字符串空间,然后把要Post的字符串拷贝进去,然后将这个字符串的地址Post过去,消息接收处理方只要强制转换为字符串就行了,即:
       TCHAR*  szStr1 = (TCHAR*)wParam;
       CString revname = szStr1;
       delete [] szStr1;  //不要忘了最后delete这个分配的内存区。第二种情形,不同进程间可以通过一种叫全局原子(Atom)的东东来传递字符串。原子就是专门为某个字符串在系统里找到一个相应的整数来和之关联,这个整数由系统分配。这样你可以通过字符串找到整数,也可以通过整数来找到字符串。原子分为局部原子,用于本进程内;全局原子用于不同进程。
       ATOM am1 = GlobalAddAtom( str1 ); //就是让系统为str1分配一个整数原子
    之后你随时可以通过am1来找到相应的字符串是什么:
      

  7.   

    TCHAR szStr1[512];
      UINT nStr1Len = GlobalGetAtomName( am1, szStr1, 512 );
      if( nStr1Len > 0 ) //说明成功
      {
         CString revname = szStr1;
      }
      

  8.   

    最后用GlobalDeleteAtom删除创建的原子