最近做一程序,就是向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));
请大家帮我看看,哪写错了?编译通过,完全没效果。

解决方案 »

  1.   

    是不是Richedit有什么属性要设置
    或者改成UNICODE看看呢还有为什么不直接setwindowtext?
      

  2.   

    你直接SendMessage(HWND, WM_SETTEXT,...);不行吗?
      

  3.   

    input[0].ki.wVk = data;
    这个data要参考虚拟键值表的。你看看正确与否。
      

  4.   

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

  5.   


    我是要做一个文本编辑器,也就是在不固定的位置随时添字删字,如果用了setwindowtext只能把所有的字都编好一次性输出了。
      

  6.   


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

  7.   

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

  8.   


    char* str ="啊";
    WORD c=(*str)<<8 | *(str+1)m_richedit.SendMessage(WM_IME_CHAR, (WPARAM)(c), lparam); //向RICHEDIT中输入中文
    我认为是这样的 不知道对不对,也可能与lparam有关
      

  9.   

    问题始终没有解决,不过我改了方法,使用剪贴板向RICHEDIT里面贴字。
    这是给妈妈做的一个“日记输入器”,她不会用拼音打字。