hur.cn - 华软网

 热门搜索

在vc2008中,用CreatePointFont函数为什么输出中文时会变成乱码?搜狗和五笔都是一样的。

  作者:未知    来源:网络    更新时间:2009/11/11
RT,请大家帮忙解决下。部分代码如下:
void CTextView::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
CClientDC dc(this);
CFont font;
font.CreatePointFont(200,L"宋体",NULL);
CFont *pOldFont=dc.SelectObject(&font);

TEXTMETRIC tm;
dc.GetTextMetrics(&tm);
if(0x0d==nChar)
{
m_string.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_string);
m_string=m_string.Left(m_string.GetLength()-1);
dc.SetTextColor(clr);
}
else
{
m_string+=(char)nChar;         //记住这里//
}
CSize sz=dc.GetTextExtent(m_string);
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_string);

dc.SelectObject(pOldFont);
CView::OnChar(nChar, nRepCnt, nFlags);
}

void CTextView::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
SetCaretPos(point);
m_string.Empty();
m_ptOrigin=point;
CView::OnLButtonDown(nFlags, point);
}

---华软 网友回答---
俺遇到过类似的,就是不知道怎么弄好的。
---华软网友回复---
换台机器看看

默认编码不对吧
---华软网友回复---
既然有人遇到这个问题,就说明这确实是个问题,怎么没人帮忙解决下吗????
---华软网友回复---
哦哦哦哦  
---华软网友回复---
关注我也听到这里了
---华软网友回复---
把你的m_string+=(char)nChar;        //记住这里// 
改成m_string+=(WCHAR)nChar; 就可以了,因为汉字是双字符
---华软网友回复---
terry_9正解!      
华软声明:本内容来自网络,如有侵犯您版权请来信指出,本站立即删除。