这个问题曾经困扰过我,经过CSDN众多高手的大力帮助已经解决,现在我再以接力的方式告诉你
onchar处理的是WM_CHAR消息,一个汉字是两个WM_CHAR消息,你要是想通过onchar处理中文,那么,我没有方法!中文是UNICODE,有个消息叫WM_IME_CHAR
MSDN中定义如下:
The WM_IME_CHAR message is sent to an application when the IME gets a character of the conversion result. Unlike theWM_CHAR message, this message can include double-byte as well as single-byte character values. // for double-byte characters:
chCharCode1 = (char) wParam & 0xff;
chCharCode2 = (char) wParam >> 8;
// for Unicode:
chCharCode1 = (WORD) wParam;
lKeyData = lParam;
可以处理UNICODE,你需要加载WindowProc函数如果你的程序不是以unicode模式编译,你直接按照// for Unicode:方式取汉字,不是的话就需要把
chCharCode1 = (char) wParam & 0xff;
chCharCode2 = (char) wParam >> 8;
合并起来。
我去给你找给我的代码。
onchar处理的是WM_CHAR消息,一个汉字是两个WM_CHAR消息,你要是想通过onchar处理中文,那么,我没有方法!中文是UNICODE,有个消息叫WM_IME_CHAR
MSDN中定义如下:
The WM_IME_CHAR message is sent to an application when the IME gets a character of the conversion result. Unlike theWM_CHAR message, this message can include double-byte as well as single-byte character values. // for double-byte characters:
chCharCode1 = (char) wParam & 0xff;
chCharCode2 = (char) wParam >> 8;
// for Unicode:
chCharCode1 = (WORD) wParam;
lKeyData = lParam;
可以处理UNICODE,你需要加载WindowProc函数如果你的程序不是以unicode模式编译,你直接按照// for Unicode:方式取汉字,不是的话就需要把
chCharCode1 = (char) wParam & 0xff;
chCharCode2 = (char) wParam >> 8;
合并起来。
我去给你找给我的代码。
解决方案 »
- office2010界面怎么做啊,给点提示
- bcg LINK : fatal error LNK1104: cannot open file "BCGCBPRO1200D.lib"
- 有没有返回值可以是-1的消息?
- ATL控件 BSTR属性put 和get 怎么写
- 重载onpaint
- 很困惑,使用const 替换#define 出现的问题
- ___________________如何响应ListCtrl表头宽度改变的消息_________________
- 如何在动态库中获取调用该动态库的程序的文件名称?
- 获取打印机提示内存不足
- 如何给TreeView加PopMenu啊?
- 网吧内的局域网如何实现呢?
- 软件测试员搞点什么?
内容如下:
111222(天才:《天生蠢材) 回复于2001-2-10 2:03:00 得0分 LRESULT CEeeView::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{ CClientDC dc(this);
switch(message)
{
case WM_IME_CHAR:
{
TCHAR *pszFileText=new TCHAR[2];
*pszFileText=wParam;
WCHAR* m_pszwFileText=new WCHAR[1];
::WideCharToMultiByte( CP_ACP, 0, m_pszwFileText, -1, pszFileText, 0, NULL, NULL ); dc.TextOut(80,180,m_pszwFileText);
break;}结果TEXTOUT输出的都是?f?fl为什么会这样?我输入“我”应该显示“我”才对啊,为什么显示"?f?fl"
zzz2000() 回复于2001-2-13 0:47:00 得48分
仔细阅读VC 6的帮助信息,发现wParam的说明如下:
// for double-byte characters:
chCharCode1 = (char) wParam & 0xff;
chCharCode2 = (char) wParam >> 8;
// for Unicode:
chCharCode1 = (WORD) wParam;
lKeyData = lParam;下列程序是您所需要的:(暂不考虑UNICODE)
CString m_strEdit; //CString变量用于存储用户输入
int m_caretPos; //存储光标所在位置
//以上二个变量存在于您的WndClass中,并需要适当初始化
if(wParam & 0x80) {
m_strEdit.Insert(m_caretPos, wParam&0xFF);
m_strEdit.Insert(m_caretPos, wParam/256);
m_caretPos+=2;
}
else {
m_strEdit.Insert(m_caretPos, wParam);
m_caretPos++;
}如果使用纯粹的Win32 API,您的窗口过程只需要处理WM_CHAR消息就可以了,因为DefWindowProc会把WM_IME_CHAR拆开并发送两个WM_CHAR消息,所以您的窗口一定是继承自MFC的CWnd,它的处理过程有问题。