【原创】多字节版本下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版本则不存在上述问题。