虽然WM_GETTEXT 和 WM_SETTEXT没有W版和A版,但是SendMessage有SendMessageA,SendMessageW两个版本,这样系统就能区分你发来的数据是什么类型了
解决方案 »
- ObjectARX中acedGetPoint问题
- VC6里,APP类构造函数和析构函数不显示怎么办?
- 串口握手协议cserialport
- CFileDialog 的背景换后,其中的控件(Static)如何透明处理
- 如何判断一个指针是无效 或者 错误的指针,如何捕获这样的异常?
- 请教一个链接问题:unresolved external symbol __endthreadex
- AfxMessageBox跑道对话框后面去了,如何才能他在最前。
- 在线等待,关于文件名搜索的问题
- 如何给光驱加属性页?
- 菜鸟求救:非常简单的问题可就是不能运行。。。。。。?????
- 视频采集卡windows平台软件项目外包
- 请教socket通信问题,两个不同电脑,都可连接外网,都有固定IP和端口
发消息当然可以用 SendMessage,问题是处理消息的时候呢?
如果是自己写的程序,根据预定义可以判断是 unicode 还是 ansi
但 windows 封装好的 dll 内部是怎么处理 WM_GETTEXT 和 WM_SETTEXT 的还是不知道啊我昨天想到的是判断字节数,猜测 unicode 会比 ansi 多一倍的字节,那么从 wparam 传进来的字符数来检测 lparam 后面的 \0
但后来想想又觉得不正确了,如果是英文字符,这个方法还可以
但如果是中文字符就不好办了,因为中文字符在 ansi 里也同样占了2个字节的
所以还是搞不明白
所以我的提问就是说 windows 究竟是怎么判断传入的字符是 unicode 还是 ansi
发消息当然可以用 SendMessage,问题是处理消息的时候呢?
如果是自己写的程序,根据预定义可以判断是 unicode 还是 ansi
但 windows 封装好的 dll 内部是怎么处理 WM_GETTEXT 和 WM_SETTEXT 的还是不知道啊我昨天想到的是判断字节数,猜测 unicode 会比 ansi 多一倍的字节,那么从 wparam 传进来的字符数来检测 lparam 后面的 \0
但后来想想又觉得不正确了,如果是英文字符,这个方法还可以
但如果是中文字符就不好办了,因为中文字符在 ansi 里也同样占了2个字节的
所以还是搞不明白
你看到的是用 SendMessage方法,其实底层会根据你环境的字节集来调用是A版还是W版的
发消息当然可以用 SendMessage,问题是处理消息的时候呢?
如果是自己写的程序,根据预定义可以判断是 unicode 还是 ansi
但 windows 封装好的 dll 内部是怎么处理 WM_GETTEXT 和 WM_SETTEXT 的还是不知道啊我昨天想到的是判断字节数,猜测 unicode 会比 ansi 多一倍的字节,那么从 wparam 传进来的字符数来检测 lparam 后面的 \0
但后来想想又觉得不正确了,如果是英文字符,这个方法还可以
但如果是中文字符就不好办了,因为中文字符在 ansi 里也同样占了2个字节的
所以还是搞不明白
你看到的是用 SendMessage方法,其实底层会根据你环境的字节集来调用是A版还是W版的
函数功能:该函数确定指定的窗口是否是一个本地Unicode窗口。
函数原型: BOOL IswindowUnicode(HWND hwnd);
参数:
hWnd:被测试窗口的句柄。
返回值:如果窗口是一个本地Unicode窗口,返回值为非零;如果窗口不是一个本地Unicode窗口,返回值为零,同时说明窗口是一个ANSI窗口。
备注;一个窗口的字符集是由函数RegosterClass决定的。如果窗口类是以ANSI版的RegisterClass ( RegjsterClassA)注册的,则窗口字符集是ANSI的;如果窗口类是以Unicode版的Registerclass( RegisterClassW)注册的,则窗口字符集是Unicode。
系统为窗口消息自动作Unicode和ANSI的双向翻译。例如,如果一个使用Unicode字符集的窗口测到一个ANSI窗口消息,则系统在调用窗口过程之前先将该消息转换为Unicode消息。系统调用lsWindowUnicode函数决定是否翻译消息。”