有关SendMessage函数中的参数转换
LRESULT SendMessage(
  HWND hWnd,      // handle to destination window
  UINT Msg,       // message
  WPARAM wParam,  // first message parameter
  LPARAM lParam   // second message parameter
);HWND hWnd = ...
CString sz = "My String";
使用SendMessage(hWnd, WM_SETTEXT, 0, (WPARAM)(LPCSTR)sz)时可以正确显示sz中的文字。
但我使用SendMessage(hWnd, WM_SETTEXT, 0, (LPARAM)&sz)的时候,现实的却是乱吗?为什么啊?

解决方案 »

  1.   

    sz
    &sz
    一样吗?
    TRACE("%s", sz);
    TRACE("%s", &sz);
    看是不适合你显示的乱码一样
      

  2.   

    CString类的变量存放的就是字符串的指针,所以不需要加&,若加上&,就成了变量本身的地址了。
      

  3.   

    去掉&后编译都通不过!说是不能将CString转化为LPARAM。
      

  4.   

    SendMessage(hWnd, WM_SETTEXT, 0, (LPARAM)(LPCSTR)sz)
      

  5.   

    严格点:(LPARAM)(LPSTR)(LPCTSTR)sz
      

  6.   

    LPSTR  是CString的一个操作符,作用是取得字符串的首地址.
    &str 取的是字符串变量的首地址.
    看看mfc中的带码你就明白了!!!
      

  7.   

    上面的错了,应该是:
    LPCTSTR  是CString的一个操作符,作用是取得字符串的首地址.
      

  8.   

    直接把sz转化成LPARAM为什么不行?
    我主要是想问这个问题!
      

  9.   

    行!当然行了,你可以把任何类型变量的地址转化成LPARAM,这只不过是个DWORD型嘛!所以
    SendMessage(hWnd, WM_SETTEXT, 0, (LPARAM)&sz)是可以的.但可惜地是接受你消息的控件是MS写的,MS认为你送来的LAPRAM是个地址,而且是个字符串的首地址,十分遗憾地是你送过去的是一个CString型变量的地址,于是"轰隆"一声你掉到地下了.