读书人

MFC 文本编程 利用退格键 删除时的 光

发布时间: 2012-08-02 11:35:25 作者: rapoo

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);试试看.
[解决办法]
你在键盘事件的时候,先隐藏光标。

[解决办法]
不是说了让你刷新下么
[解决办法]
隐藏光标、刷新重绘、计算新的光标位置、显示光标。

读书人网 >VC/MFC

热点推荐