中文输入遇到的有关问题

中文输入遇到的问题

最近做一程序,就是向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

------解决方案--------------------
引用:
引用:飘过。。不知道java跟c++通用不。。不过给你个案例你可以找找启发:http://blog.****.net/tianyazaiheruan/article/details/8112755

谢谢,我对java没什么了解。您给的例子我一句都没看懂。

这个。。最开始接触过c++,现在主攻的java。对c++的语法记得不太清了,你让我举例立马也想不上来。。

------解决方案--------------------

char* str ="啊";
WORD c=(*str)<<8 
------解决方案--------------------
 *(str+1)

m_richedit.SendMessage(WM_IME_CHAR, (WPARAM)(c), lparam); //向RICHEDIT中输入中文