- 积分
- 199
- 最后登录
- 2024-4-23
- 精华
- 0
- 阅读权限
- 20
- 主题
- 32
- UID
- 2317127
- 帖子
- 497
- PB币
- 308
- 威望
- 0
- 贡献
- 0
- 技术
- 5
- 活跃
- 1768
- UID
- 2317127
- 帖子
- 497
- PB币
- 308
- 贡献
- 0
- 技术
- 5
- 活跃
- 1768
|
我在改变Caret位置时(如回车),上一个Caret会残留在String的末尾。
代码如下:
// CTextView 消息处理程序
void CTextView::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
CClientDC dc(this);
CFont font;
font.CreatePointFont(CharSize,L"华文行楷",NULL);
CFont *pOldFont = dc.SelectObject(&font);
TEXTMETRIC tm;
dc.GetTextMetrics(&tm);
if(0x0d == nChar){ //回车符
m_strTotal[count] = m_strLine;
m_strLine.Empty();
m_ptOrigin.y = m_ptOrigin.y + tm.tmHeight;
m_ptTotal[count] = m_ptOrigin;
count++;
}
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);
m_strTotal[count] = m_strTotal[count].Left(m_strTotal[count].GetLength()-1);
dc.SetTextColor(clr);
}else{
m_strLine = m_strLine + char(nChar);
m_strTotal[count] = m_strTotal[count] + char(nChar);
}
CSize sz = dc.GetTextExtent(m_strLine);
CPoint pt;
pt.x = m_ptOrigin.x + sz.cx;
pt.y = m_ptOrigin.y;
SetCaretPos(pt);
m_ptCaret = pt;
dc.TextOut(m_ptOrigin.x,m_ptOrigin.y,m_strLine);
dc.SelectObject(pOldFont);
CView::OnChar(nChar, nRepCnt, nFlags);}
void CTextView::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
m_ptCaret = point;
SetCaretPos(point);
m_strTotal[count] = m_strLine;
m_strLine.Empty();
m_ptOrigin = point;
m_ptTotal[count] = point;
count++;
CView::OnLButtonDown(nFlags, point);
}
int CTextView::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CView::OnCreate(lpCreateStruct) == -1)
return -1;
// TODO: 在此添加您专用的创建代码
CClientDC dc(this);
CFont font;
font.CreatePointFont(CharSize,L"华文行楷",NULL);
CFont *pOldFont = dc.SelectObject(&font);
TEXTMETRIC tm;
dc.GetTextMetrics(&tm);
CreateSolidCaret(tm.tmAveCharWidth/8,tm.tmHeight);
ShowCaret();
dc.SelectObject(pOldFont);
return 0;
}
BOOL CTextView::OnMouseWheel(UINT nFlags, short zDelta, CPoint pt)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
CharSize = CharSize + int(zDelta);
return CView::OnMouseWheel(nFlags, zDelta, pt);
}
我是用vs2010创建的。.net4。消息和成员变量都没问题。如图,第一个串Thanks,第二个串Very,第三个串Much结束时都有残留文本插入符,请问应该如何处理?究竟是哪的问题?
|
|