x******g 发帖数: 41 | 1 在主窗口里面生成的一个线程里面有个缓冲区的数据,
定义是 BYTE buffer[1024];
用SendMessage(hEdit,EM_REPLACESEL,FALSE, ((LPSTR)buffer));
希望能更新主窗口里面的句柄是hEdit控件的内容
结果是:主窗口的edit里面的内容是变了,但是是乱码
如果换成SendMessage(hEdit,EM_REPLACESEL,FALSE, TEXT("testmsg"));
就不是乱码
这个怎么解决啊?是在主窗口那边截获editupdate的消息,把buffer先处理成字符串再
更新edit么? | X****r 发帖数: 3557 | 2 你的程序的编译选的是用Unicode吧。Windows API里所有和字符串打交道的函数都
有两个版本,分别为后缀W和A,对应Wide character和ANSI字符串。编译的时候根
据你的编译选项就自动把你的函数替换成相应的版本。你这里直接把ANSI字符串作为
wide character传进去自然是乱码.你有没有想过这个TEXT()是作什么的?就是
给你自动转换用的(但是只限于字符串常量)。
你要手工转换的话,可以调用MultiByteToWideChar函数,或者简单地用wsprintf
的%S格式就会自动给你转换。
【在 x******g 的大作中提到】 : 在主窗口里面生成的一个线程里面有个缓冲区的数据, : 定义是 BYTE buffer[1024]; : 用SendMessage(hEdit,EM_REPLACESEL,FALSE, ((LPSTR)buffer)); : 希望能更新主窗口里面的句柄是hEdit控件的内容 : 结果是:主窗口的edit里面的内容是变了,但是是乱码 : 如果换成SendMessage(hEdit,EM_REPLACESEL,FALSE, TEXT("testmsg")); : 就不是乱码 : 这个怎么解决啊?是在主窗口那边截获editupdate的消息,把buffer先处理成字符串再 : 更新edit么?
| x******g 发帖数: 41 | 3 原因看明白了,但是没看懂怎么用
是用MultiByteToWideChar或者wsprintf先buffer的内容转换成wide character,然后
再在SendMessage么?谢谢。
【在 X****r 的大作中提到】 : 你的程序的编译选的是用Unicode吧。Windows API里所有和字符串打交道的函数都 : 有两个版本,分别为后缀W和A,对应Wide character和ANSI字符串。编译的时候根 : 据你的编译选项就自动把你的函数替换成相应的版本。你这里直接把ANSI字符串作为 : wide character传进去自然是乱码.你有没有想过这个TEXT()是作什么的?就是 : 给你自动转换用的(但是只限于字符串常量)。 : 你要手工转换的话,可以调用MultiByteToWideChar函数,或者简单地用wsprintf : 的%S格式就会自动给你转换。
| x******g 发帖数: 41 | |
|