最近做一程序,就是向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));
请大家帮我看看,哪写错了?编译通过,完全没效果。
解决方案 »
- GetSystemInfo可以得到cpu内核的数量,但是我如果想得到cpu数量呢?
- ShockwaveFlash CallFunction调用flash函数出错的问题
- 单文档程序的隐藏问题
- 在做学生管理系统时,access表被锁定,为什么,怎样解除?
- 大家帮我看看为什么画钟表的12个点会整体左上移呢?
- 我一个网友说的,,我都迷茫了
- 有关DBGRID控件和ROMOTEDATA CONTROL控件的问题
- 关于网络驱动器的问题,很急!!!
- 如何利用共享内存DLL实现进程通信?
- 怎样用mfc编写无标题栏的窗口
- 求Carlos Antollini的ADO封装 VS2008版
- 调用CFileDlg后程序默认路径被改变
或者改成UNICODE看看呢还有为什么不直接setwindowtext?
这个data要参考虚拟键值表的。你看看正确与否。
我是要做一个文本编辑器,也就是在不固定的位置随时添字删字,如果用了setwindowtext只能把所有的字都编好一次性输出了。
谢谢,我对java没什么了解。您给的例子我一句都没看懂。
char* str ="啊";
WORD c=(*str)<<8 | *(str+1)m_richedit.SendMessage(WM_IME_CHAR, (WPARAM)(c), lparam); //向RICHEDIT中输入中文
我认为是这样的 不知道对不对,也可能与lparam有关
这是给妈妈做的一个“日记输入器”,她不会用拼音打字。