请问各位高手:
我在VC中用MFC做了一个文本框,目的是要能够接受文字输入,并响应Backspace和Enter键,做到能够退格和换行,可是在我设置光标显示后,换行和退格功能都能实现,但是对于光标就只能显示光标,光标不能跟着我输入的文字移动.......
我想要得到的结果是:在输入文字后,光标能够始终跟在文字的后面.
请各位大虾帮帮忙啦
我在VC中用MFC做了一个文本框,目的是要能够接受文字输入,并响应Backspace和Enter键,做到能够退格和换行,可是在我设置光标显示后,换行和退格功能都能实现,但是对于光标就只能显示光标,光标不能跟着我输入的文字移动.......
我想要得到的结果是:在输入文字后,光标能够始终跟在文字的后面.
请各位大虾帮帮忙啦
SendDlgItemMessage(ID_EDIT_SEL,EM_SETSEL,4,4);//
GetDlgItem(ID_EDIT_SEL)->SetFocus();用EM_SETSEL这个消息,来改变光标的位置
{
if (CView::OnCreate(lpCreateStruct) == -1)
return -1;
CClientDC dc(this);
TEXTMETRIC mz;
dc.GetTextMetrics(&mz);
CWnd::CreateSolidCaret(mz.tmWeight/2048,mz.tmHeight);
CWnd::ShowCaret();
//CWnd::CreateSolidCaret(2,20);
//CWnd::ShowCaret();
return 0;
}void CTextView::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)
{
CClientDC dc(this);
TEXTMETRIC me;
dc.GetTextMetrics(&me);
if(0x0d == nChar)
{
inputstr.Empty();
m_FristPoint.y += me.tmHeight;
SetCaretPos(m_FristPoint);
}
else if(0x08 == nChar)
{
COLORREF clr = dc.SetTextColor(dc.GetBkColor());
dc.TextOutW(m_FristPoint.x,m_FristPoint.y,inputstr);
inputstr.TrimRight();
dc.SetTextColor(clr);
dc.TextOutW(m_FristPoint.x,m_FristPoint.y,inputstr);
}
inputstr += char(nChar);
dc.TextOutW(m_FristPoint.x,m_FristPoint.y,inputstr);
CSize size = dc.GetTextExtent(inputstr);
CWnd::SetCaretPos(CPoint((m_FristPoint.x + size.cx),m_FristPoint.y));//光标跟着走 CView::OnChar(nChar, nRepCnt, nFlags);
}void CTextView::OnLButtonDown(UINT nFlags, CPoint point)
{ m_FristPoint = point;
CWnd::SetCaretPos(point);
inputstr.Empty();
CView::OnLButtonDown(nFlags, point);
}