hur.cn - 华软网

 热门搜索

请教一个drawtext调用的问题

  作者:未知    来源:网络    更新时间:2011/9/26
我写了一个drawtext的程序,文字内容似乎被矩形框遮住似的。不想textout函数能正确显示输入的文字内容。
void CTEXTView::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)
{
// TODO: Add your message handler code here and/or call default
    CClientDC dc(this);
CFont font; //font
font.CreatePointFont(120 , _T("新宋体"));
CFont *pOldFont = dc.SelectObject(&font);
TEXTMETRIC tm; //textmetric
dc.GetTextMetrics(&tm);
CRect rect; //rect for drawtext
rect.left = m_ptOrigin.x;
rect.top = m_ptOrigin.y;
    rect.right = rect.left + tm.tmMaxCharWidth;
rect.bottom = rect.top + tm.tmHeight;

if (0x0d == nChar)
{
m_strline.Empty();
m_ptOrigin.y += tm.tmHeight;
rect.bottom += 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);
rect.right = rect.left + m_strline.GetLength();//计算矩形框的宽度
}
else
{
m_strline += TCHAR(nChar);
rect.right = rect.left + m_strline.GetLength();//计算矩形框的宽度
}
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);//调用textout函数
dc.DrawTextEx(m_strline , &rect , DT_LEFT , NULL);   //调用drawtext函数
dc.SelectObject(pOldFont);
CView::OnChar(nChar, nRepCnt, nFlags);
}
---华软 网友回答---
C++">void CVctest1View::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags) 
{
// TODO: Add your message handler code here and/or call default
CClientDC dc(this);
CFont font; //font
font.CreatePointFont(120 , _T("新宋体"));
CFont *pOldFont = dc.SelectObject(&font);
TEXTMETRIC tm; //textmetric
dc.GetTextMetrics(&tm);
CRect rect; //rect for drawtext
rect.left = m_ptOrigin.x;
rect.top = m_ptOrigin.y;
rect.right = rect.left + tm.tmMaxCharWidth;
rect.bottom = rect.top + tm.tmHeight;

if (0x0d == nChar)
{
m_strline.Empty();
m_ptOrigin.y += tm.tmHeight; 
rect.bottom += 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);
rect.right = rect.left + m_strline.GetLength() * tm.tmMaxCharWidth;//计算矩形框的宽度
}
else
{
m_strline += TCHAR(nChar);
rect.right = rect.left + m_strline.GetLength() * tm.tmMaxCharWidth;//计算矩形框的宽度
}
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);//调用textout函数
//dc.DrawText(
dc.DrawText(m_strline , &rect , DT_LEFT ); //调用drawtext函数
dc.SelectObject(pOldFont);
CView::OnChar(nChar, nRepCnt, nFlags);
}

---华软网友回复---
drawtextex改成DrawText。问题还是一样呀?
---华软网友回复---
rect.right = rect.left + m_strline.GetLength() * tm.tmMaxCharWidth;//计算矩形框的宽度

---华软网友回复---
知道原因了,谢谢jennyvenus。      
华软声明:本内容来自网络,如有侵犯您版权请来信指出,本站立即删除。