WM_CHAR的处理函数中刷新屏幕,太频繁,屏幕闪烁,怎么解决呀!
我试了先用内存DC画,再画到屏幕,但是还是闪,怎么办?

解决方案 »

  1.   

    我做的是编辑器控件,类似CEdit,从CWnd继承。因为WM_CHAR是输入了字符,要在屏幕上显示输入的字符,而字符的绘制在OnPaint中,所以在WM_CHAR的处理函数中 Invalidate(FALSE);;
      

  2.   


    我做的是编辑器控件,类似CEdit,从CWnd继承。因为WM_CHAR是输入了字符,要在屏幕上显示输入的字符,而字符的绘制在OnPaint中,所以在WM_CHAR的处理函数中 Invalidate(FALSE);;
    (上面一次回复引用错了==)
      

  3.   

    InvalidateRect   用这个试试
      

  4.   

    1、我觉得直接从CEdit继承或许简单些。
    2、如果非得从CWnd继承,你可以找找类似的开源码,研究一下
      

  5.   

    一个在view类中编辑的,很简洁的,可以参考参考下,教程的源码
    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.CreatePointFont(300,"华文行楷",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.TextOut(m_ptOrigin.x,m_ptOrigin.y,m_strLine);
    m_strLine=m_strLine.Left(m_strLine.GetLength()-1);
    dc.SetTextColor(clr);
    }
    else
    {
    m_strLine+=nChar;
    }
    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); dc.SelectObject(pOldFont); CView::OnChar(nChar, nRepCnt, nFlags);
    }
      

  6.   


    你有完整的源码吗?给个链接我去下载吧,我QQ806756448;我试了下代码中的方法,在OnChar中直接绘制文字,结果没有绘制出来!== 不知道为什么,代码跟在OnPaint中绘制一样的。开始我以为是窗口不刷新OnChar中的绘制就不被执行,但貌似不是因为这个
      

  7.   

    你有完整的源码吗?给个链接我去下载吧,我QQ806756448;我试了下代码中的方法,在OnChar中直接绘制文字,结果没有绘制出来!== 不知道为什么,代码跟在OnPaint中绘制一样的。开始我以为是窗口不刷新OnChar中的绘制就不被执行,但貌似不是因为这个