我的博客小站

【原创】多字节版本下MFC控件处理字符集的BUG

 

工程项目属性:

字符集:多字节

stdafx.h文件中添加:

#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='x86' publicKeyToken='6595b64144ccf1df' language='*'\"")

注意:如果多字节版本下不添加上述代码,则编辑框不能正常显示vật huyền,部分字符显示乱码。

 

同样的三个编辑框控件,分别输入:vật huyền

其中第二个编辑框绑定到MFC控件CEdit:

DDX_Control(pDX, IDC_EDIT2, m_edit2);

程序运行后,分别用spy++获取编辑框文本,第一个和第三个都显示正常:

 

第二个编辑框的文本获取到的为乱码:

 

问题产生原因:

第一和第三个编辑框控件的消息流程走的是默认机制,不存在字符集转换的bug。而第二个编辑框控件走的是MFC消息机制,在处理WM_GETTEXT消息时存在字符集转换BUG。

相关例子见:《【反外挂】重载WM_GETTEXT消息处理函数使spy++无法获取窗口文本》:http://www.cnblogs.com/daxingxing/archive/2012/06/14/2549279.html

 

注意:项目如果是UNICODE版本则不存在上述问题。

 

 

 

posted on 2013-12-02 15:32  BIGSING  阅读(640)  评论(0编辑  收藏  举报

导航

我的博客小站