MFC 文本编程 利用退格键 删除时的 光标问题。 请各位高手帮忙 谢谢!!!!!!!
- C/C++ code
int CTEXTView::OnCreate(LPCREATESTRUCT lpCreateStruct){ if (CView::OnCreate(lpCreateStruct) == -1) return -1; // TODO: 在此添加您专用的创建代码 CClientDC dc(this); TEXTMETRIC tm; dc.GetTextMetrics(&tm); CreateSolidCaret(tm.tmAveCharWidth/8,tm.tmHeight); ShowCaret(); return 0;}void CTEXTView::OnLButtonDown(UINT nFlags, CPoint point){ // TODO: 在此添加消息处理程序代码和/或调用默认值 SetCaretPos(point); m_strLine.Empty(); //保存输入的内容 m_ptOrigin=point; //光标的开始位置 CView::OnLButtonDown(nFlags, point);}void CTEXTView::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags){ // TODO: 在此添加消息处理程序代码和/或调用默认值 CClientDC dc(this); //设置字体 CFont font; font.CreatePointFont(200,_T("华文行楷"),NULL); CFont *pOldfont=dc.SelectObject(&font); TEXTMETRIC tm; dc.GetTextMetrics(&tm); if(0x0d==nChar) { m_strLine.Empty(); m_ptOrigin.y+=tm.tmHeight; } else if(0x08==nChar) { COLORREF clr=dc.SetTextColor(dc.GetBkColor()); dc.TextOutW(m_ptOrigin.x,m_ptOrigin.y,m_strLine); m_strLine=m_strLine.Left(m_strLine.GetLength()-1); dc.SetTextColor(clr); } else { m_strLine+=static_cast<char>(nChar); } CSize sz=dc.GetTextExtent(m_strLine); CPoint pt; pt.x=m_ptOrigin.x+sz.cx; pt.y=m_ptOrigin.y; SetCaretPos(pt); dc.TextOutW(m_ptOrigin.x,m_ptOrigin.y,m_strLine); dc.SelectObject(pOldfont); CView::OnChar(nChar, nRepCnt, nFlags);}
以上为部分代码,每次删除时 光标就好像滞留一样,
如下面的“|”代表光标,分别代表原来的文字,删除一个后的显示,删除两个后的显示。每次删除一个字母光标虽然向前移动,但是原来的光标位置的光标仍然存在。
abcabc
abcab|
abca||
abc|||
初学MFC 请各位帮帮忙。只在view类中定义了m_ptOrigin 和 m_strLine 两个变量,其余的改变内容全部提现在上面的代码
再次感谢各位
[解决办法]
要不你在 SetCaretPos之前先HideCaret,在之后ShowCaret试试
[解决办法]
在OnChar()函数中加上:UpdateAllViews(NULL);试试看.
[解决办法]
你在键盘事件的时候,先隐藏光标。
[解决办法]
不是说了让你刷新下么
[解决办法]
隐藏光标、刷新重绘、计算新的光标位置、显示光标。