OnChar函数的中文处理问题,退格键时,怎么处理

chen1220502052 2012-06-09 11:13:17
CClientDC dc(this);
TEXTMETRIC tm;
dc.GetTextMetrics(&tm);
if (0x0d==nChar) //回车符的处理
{
m_strline.Empty();
m_ptOrigin.y+=tm.tmHeight;
}
else if (0x08==nChar) //退格符的处理
{
COLORREF clr=dc.SetTextColor(dc.GetBkColor());
dc.TextOut(m_ptOrigin.x,m_ptOrigin.y,m_strline);
m_strline=m_strline.Left(m_strline.GetLength()-1);
dc.SetTextColor(clr);
}
else
{
m_strline+=(WCHAR)nChar;
}


CSize sz=dc.GetTextExtent(m_strline);
CPoint pt;
pt.x=m_ptOrigin.x+sz.cx;
pt.y=m_ptOrigin.y;
SetCaretPos(pt);

dc.TextOut(m_ptOrigin.x,m_ptOrigin.y,m_strline);
...全文
329 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
str999_cn 2012-08-01
  • 打赏
  • 举报
回复
if((BYTE)m_strLine[m_strLine.GetLength()-1]>0xA0)//如果是汉字,则一次要删除2个字节
{
m_strLine=m_strLine.Left(m_strLine.GetLength()-2);
}
else
{
m_strLine=m_strLine.Left(m_strLine.GetLength()-1);
}
str999_cn 2012-08-01
  • 打赏
  • 举报
回复
3楼不懂别乱说。他原来的代码仅仅能处理ASCII字符,如果是中文删除的话,每次只能删除1半的字符,需要连删2次才能删除一个汉字。

正确的做法是在那里做一个判断,如果是ASCII字符,则删除最后1个字符,如果是汉字,则删除最后2个字符。
Kaile 2012-06-09
  • 打赏
  • 举报
回复
你不是已经处理过了吗
就叫我海 2012-06-09
  • 打赏
  • 举报
回复
你上面的代码是用原背色擦除原先的内容,再去掉最右边一个字符,而后再把修改的内容再显示出来..
上面已经处理了啊..
stjay 2012-06-09
  • 打赏
  • 举报
回复
改用Unicode,
可减少很多麻烦

19,468

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧