void CTestView::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
CClientDC dc(this);
CFont font;
font.CreatePointFont(300, _T("华文楷体"), NULL);
CFont *pOldFont = dc.SelectObject(&font);
TEXTMETRIC tx;
dc.GetTextMetrics(&tx);
if (13 == nChar)
{
str.Empty();
m_inputpt.y += tx.tmHeight;
}
else if (0X08 == nChar)
{
COLORREF col = dc.SetTextColor(dc.GetBkColor());
dc.TextOutW(m_inputpt.x, m_inputpt.y, str);
str = str.Left(str.GetLength() - 1);
dc.SetTextColor(col);
}
else
{
str += (char)nChar;
}
CSize sz = dc.GetTextExtent(str);
CPoint pt;
pt.x = m_inputpt.x + sz.cx;
pt.y = m_inputpt.y;
SetCaretPos(pt);
dc.TextOutW(m_inputpt.x, m_inputpt.y, str);
dc.SelectObject(pOldFont);
CView::OnChar(nChar, nRepCnt, nFlags);
}
用的是VS2013,字符集是Unicode
竖线残留在我不设置字体样式就没问题但还是中文乱码
我用VC++6.0编写了一个一模一样的程序,但是在VC++6.0没有乱码。怎么设置VS2013才可以不乱码
这是运行的截图。。。。。。。。。。。。
竖线残留是显示的问题吧。至于中文乱码试试换成宽字符集。
你需要先擦除之前绘制的才行。
不过更简单的是,你新建一个mfc项目,向导最后一步,你的view下拉选择直接从ceditview继承
额,竖线残留在我不设置字体样式就没问题但还是中文乱码
把你的工程设置成Unicode字符集工程就好了。不知道你用的什么开发工具,具体设置百度下。
字体样式在系统存在吗,视图不一定支持你的字体。
可以再编辑环境中在项目菜单->属性->常规下的字符集选择多字节字符集就可以实现汉字显示的问题。
但是对于你删除的痕迹你可以由于你没有对单字符和双字符进行判断,你是同一减去1,你可以减去2试一试。