描述:
不知道大家用过Nero 刻录软件没有,我正在改里面的一个终极郁闷的问题,用尽了一切手段和方法也搞不定!
问题如下:
编辑菜单的时候 ,输入框采用richedit,创建方法如下:
bool cr = RichEditCtrl::Create(0, WS_CHILD | (m_singleLine ? 0 : (ES_WANTRETURN | ES_MULTILINE)), Rect(-1, -1, -1, -1), parent, 1);
if (cr) {
SetEventMask(ENM_CHANGE | ENM_KEYEVENTS | ENM_SELCHANGE);
SetTextMode(TM_PLAINTEXT);
Subclass();
return true;
}
调入微软全拼,输入没有任何乱码问题,但是全拼输入时,输入法输入框跑到了屏幕最顶端。而且不能够使用输入法的选择词语功能。
我们这边的一位高手,找了一个参数ES_SELFIME解决了这个问题如下,
bool cr = RichEditCtrl::Create(0, WS_CHILD |ES_SELFIME| (m_singleLine ? 0 : (ES_WANTRETURN | ES_MULTILINE)), Rect(-1, -1, -1, -1), parent, 1);
if (cr) {
SetEventMask(ENM_CHANGE | ENM_KEYEVENTS | ENM_SELCHANGE);
SetTextMode(TM_PLAINTEXT);
Subclass();
return true;
}
结果输入法位置一切正常了,但是输入汉字的时候会出现乱码!!! 然后我就开始了慢慢查找乱码的旅途。 结果发现
// get required length (use user-specified CR translation setting)
GETTEXTLENGTHEX gtl;
gtl.codepage = 1200;
gtl.flags = GTL_NUMBYTES | ((flags & GT_USECRLF) ? GTL_USECRLF : GTL_DEFAULT);
int size = (int)SendMessage(EM_GETTEXTLENGTHEX, (WPARAM)>l, 0);
if (size <= 0)
return size;
wchar_t* p = new wchar_t[size];
// get text
GETTEXTEX gt;
gt.cb = size * sizeof(wchar_t);
gt.codepage = 1200;
gt.flags = flags;
gt.lpDefaultChar = 0;
gt.lpUsedDefChar = 0;
int rc = (int)SendMessage(EM_GETTEXTEX, (WPARAM)>, (LPARAM)p);
buffer = String(p, rc);
delete[] p;
获取到的输入就是乱码
本系统是 纯英文的vista 操作系统,软件在2005中编译,编译参数加了UNICODE
也采用了 richedit2.0 unicode版本了
LoadLibrary(L"RICHED32.DLL");
// LoadLibrary(L"RICHED20.DLL");
请问大家能不能帮我分析一下,我真是不尽感激。。