描述:
各位兄台:小生新近作一了个ACTVIEX控件,用于处理特殊格式的字符输入。现有一问题,请指教。就是如何得理汉字输入问题,总是显示乱码:现有的代码如下:
CMyCtrl::OnChar(.....)
{
USHORT nCharShort=(USHORT)nChar;
BOOL isLeadMBSC=IsMBCSLeadByte(nCharShort);
MSG &msg;
if (isLeadMBCS)
{
::PEEkMessage(&msg,WM_CHAR,Wm_CHWR,PN...)
nCharShort=nChar<<8|msg.wParam;
}
///注以上代码来自MFC源码,CTLCORE。CPP中的OnCHR(....)
if( bIsUpperToler) //上标输入
{
m_tolerString1+=nCharShort;
InvlalidateControl();
}
...
}
这个控件是通过子类化一个EDIT控件而得,能过输入一个转换开关(CTRL+UP)实现上下标输入。
我现在是在OnDraw()中实现字体的转换的。所以每键入一个字符就需要调用一次OnDraw()。请问是否有更好的办法。
比如,在压下CTRL+UP进,就对与IFONT关联的CFONTHOLDER对象中的FONTDESC参数进行修改。结果却是异常出现。试验代码如下:
CMyCtrl::OnKeyDown(....)
{
CFontHolder f />
if (GetKeyState(Vk_CONTROL)<0)
if(nChar==Vk_UP)
{
FONTDESC f />
OLESTR("MS San Serif"),FONTSIZE(24),FW_BOLd,....};
//把字体的高度变小。
fontHolder.Initial(&fontdescToler,NULL)//装入定义的字体。
bIsUpperToler=TROE;
}
bIsUpperToler=FALSE;
FONTDESC f />
OLESTR("MS San Serif"),FONTSIZE(48),FW_BOLd,....};
//把字体的高度变大。
fontHolder.Initial..(&fontdesc,NULL);
}
在未压下CTROL+UP时,键入第一个字符时,无异常,但在健入第二个字符时,出现异常。在压下CTROL+UP时,异常一开始就出现。
请问是何种原因。
望不吝赐教!!!!!!