中文输入遇到的有关问题
中文输入遇到的问题
最近做一程序,就是向EDIT或RICHEDIT中输入中文
遇到一些问题。
用以下代码
结果edit中正常显示“啊”,richedit中显示乱码“°?”(0xA1 E3 3F)改字后,乱码跟着变。奇怪的是输入了2
个字符,出来了3个乱码。
把richedit升级到2.0
(1) 增加一全局变量 HMODULE hMod;
(2) 在CxxxApp::InitInstance()中添加一句hMod = LoadLibrary(_T("riched20.dll"));
在CxxxApp::ExitInstance()中添加一句FreeLibrary(hMod);
(3) 在对话框上放一个richedit,文本方式打开.rc文件修改该richedit控件的类名"RICHEDIT" to
"RichEdit20a".
(4) 在对话框头文件添加 CRichEditCtrl m_richedit;
在OnInitDialog中添加 m_richedit.SubclassDlgItem(IDC_RICHEDIT1, this);
后问题依旧。已确认hMod = LoadLibrary(_T("riched20.dll"));成功。
问为什么会这样???
另外问一下。
网上有很多人都转载一个用SENDINPUT输入中文的例子。搜“在VC中使用SendInput函数实现中文的自动输入”
像http://xylvhp.blog.163.com/blog/static/31123614201101104644542/这个网站就是一例。
我用了一下完全没效果。没有任何输出。即使只输出一个‘A’字符也不行。
请大家帮我看看,哪写错了?编译通过,完全没效果。
------解决方案--------------------
是不是Richedit有什么属性要设置
或者改成UNICODE看看呢
还有为什么不直接setwindowtext?
------解决方案--------------------
你直接SendMessage(HWND, WM_SETTEXT,...);不行吗?
------解决方案--------------------
估计要用UNICODE
------解决方案--------------------
input[0].ki.wVk = data;
这个data要参考虚拟键值表的。
你看看正确与否。
------解决方案--------------------
飘过。。不知道java跟c++通用不。。不过给你个案例你可以找找启发:http://blog.****.net/tianyazaiheruan/article/details/8112755
------解决方案--------------------
这个。。最开始接触过c++,现在主攻的java。对c++的语法记得不太清了,你让我举例立马也想不上来。。
------解决方案--------------------
最近做一程序,就是向EDIT或RICHEDIT中输入中文
遇到一些问题。
用以下代码
char* str ="啊";
char t,e;
t = *(str);
e = *(str+1);
m_richedit.SendMessage(WM_IME_CHAR, (WPARAM)(t & 0xff), 0x00); //向RICHEDIT中输入中文
m_richedit.SendMessage(WM_IME_CHAR, (WPARAM)(e & 0xff), 0x00);
m_E1.SendMessage(WM_IME_CHAR, (WPARAM)(t & 0xff), 0x00); //向EDIT中输入中文
m_E1.SendMessage(WM_IME_CHAR, (WPARAM)(e & 0xff), 0x00);
结果edit中正常显示“啊”,richedit中显示乱码“°?”(0xA1 E3 3F)改字后,乱码跟着变。奇怪的是输入了2
个字符,出来了3个乱码。
把richedit升级到2.0
(1) 增加一全局变量 HMODULE hMod;
(2) 在CxxxApp::InitInstance()中添加一句hMod = LoadLibrary(_T("riched20.dll"));
在CxxxApp::ExitInstance()中添加一句FreeLibrary(hMod);
(3) 在对话框上放一个richedit,文本方式打开.rc文件修改该richedit控件的类名"RICHEDIT" to
"RichEdit20a".
(4) 在对话框头文件添加 CRichEditCtrl m_richedit;
在OnInitDialog中添加 m_richedit.SubclassDlgItem(IDC_RICHEDIT1, this);
后问题依旧。已确认hMod = LoadLibrary(_T("riched20.dll"));成功。
问为什么会这样???
另外问一下。
网上有很多人都转载一个用SENDINPUT输入中文的例子。搜“在VC中使用SendInput函数实现中文的自动输入”
像http://xylvhp.blog.163.com/blog/static/31123614201101104644542/这个网站就是一例。
我用了一下完全没效果。没有任何输出。即使只输出一个‘A’字符也不行。
#include <winable.h>
#include <atlconv.h>
char data = 'A';
INPUT input[2] = {0};
memset(input, 0, sizeof(input));
input[0].type = INPUT_KEYBOARD;
input[0].ki.wVk = data;
input[1].type = INPUT_KEYBOARD;
input[1].ki.wVk = data;
input[1].ki.dwFlags = KEYEVENTF_KEYUP;
SendInput(2, input, sizeof(INPUT));
请大家帮我看看,哪写错了?编译通过,完全没效果。
------解决方案--------------------
是不是Richedit有什么属性要设置
或者改成UNICODE看看呢
还有为什么不直接setwindowtext?
------解决方案--------------------
你直接SendMessage(HWND, WM_SETTEXT,...);不行吗?
------解决方案--------------------
估计要用UNICODE
------解决方案--------------------
input[0].ki.wVk = data;
这个data要参考虚拟键值表的。
你看看正确与否。
------解决方案--------------------
飘过。。不知道java跟c++通用不。。不过给你个案例你可以找找启发:http://blog.****.net/tianyazaiheruan/article/details/8112755
------解决方案--------------------
这个。。最开始接触过c++,现在主攻的java。对c++的语法记得不太清了,你让我举例立马也想不上来。。
------解决方案--------------------
char* str ="啊";
WORD c=(*str)<<8
------解决方案--------------------
*(str+1)
m_richedit.SendMessage(WM_IME_CHAR, (WPARAM)(c), lparam); //向RICHEDIT中输入中文