//建立一个单文档界面,最后一项选择CScrollView
//在OnlintialUpdate()中加入如下代码
    CScrollView::OnInitialUpdate();
    CSize sizeTotal(0, 5000); // 20 by 30 cm
    CSize sizePage(sizeTotal.cx / 2, sizeTotal.cy / 2);
    CSize sizeLine(sizeTotal.cx / 50, sizeTotal.cy / 50);
    SetScrollSizes(MM_TEXT, sizeTotal, sizePage, sizeLine);
//在OnLButtonUp()中加入如下代码
CClientDC dc(this);
int i=0;
while (i<5000)
{
dc.TextOut(0,i*15,"aaaa");    
i++;
}
// m_rectEllipse(0,0,1000,1000);
CRect rectDevice = m_rectEllipse;
InvalidateRect(rectDevice);
//在滑动块滑动时,一定会让显示出来的字消失(因为我在OnDraw()中没有任何处理)
//不过滑动块滑动时,一定会使窗体重画,好像调用什么paint()函数
//可我又不想在其它函数中写代码,
//请问,如何滑动块滑动时显示的字不消失?

解决方案 »

  1.   


        CSize sizeTotal(0, 5000); // 20 by 30 cm================
        试试CSize sizeTotal(5000, 5000); // 20 by 30 cm
        
      

  2.   

    参考一下
    避免闪烁的代码有几十行void CSdiView::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags) 
    {
    CDC * pDC = GetDC();
    StringData += nChar;
    CRect r(0,0,0,0);
    pDC->DrawText(StringData,&r,DT_LEFT|DT_CALCRECT);
    InvalidateRect(r);

    CView::OnChar(nChar, nRepCnt, nFlags);
    }
    void CSdiView::OnDraw(CDC* pDC)
    {
    pDC->DrawText(StringData,CRect(0,0,1000,1000),DT_LEFT);
    }
      

  3.   

    要想达到窗体重画,OnDraw,OnPaint,必须重载一个如果是view,建议在OnDraw中处理
      

  4.   

    Cwnd 中的函数Redraw(BOOL),当设置为FALSE时不会改变
      

  5.   

    这样重画的话,不重载ondraw肯定消失的
      

  6.   

    //在OnLButtonUp()中加入如下代码      <<<<----------  绘图的地方不正确 View 类型,应在 OnDraw 中绘图,这样在系统发出任何绘图消息时才会调用 OnDraw 重绘
    你可以这样:
    加入一个变量  BOOL  bLButtonDown在 OnLButtonUp 中对其赋值{
        bLButtonDown = FALSE;
        InValidate();
    }在 OnLButtonDown 中
    {
        bLButtonDown = TRUE;
        Invalidate();
    }
    在OnDraw中加入{
        if( lButtonDown == FALSE )
        while(int i<5000)
        {
        dc.TextOut(0,i*15,"aaaa");    
      i++;
         }
    }这样在你其它的情况下字就不会消失了
      

  7.   

    while (i<5000)
    {
    dc.TextOut(0,i*15,"aaaa");    
    i++;
    }
      

  8.   

    void CSdiView::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags) 
    {
    StringData += nChar;
    Invalidate();

    CView::OnChar(nChar, nRepCnt, nFlags);
    }
    void CSdiView::OnDraw(CDC* pDC)
    {
    pDC->Textout(0,0,StringData);
    }
      

  9.   

    写了半天,怎么发上去的是这样的?
    你绘图的地方不对你做一个变量  BOOL bLButtonUp在 OnLButtonUp 中bLButtonUp = TRUE;
    在 OnDraw 中加入  if( bLButtonUp )
    {   while( i < 5000 )
    {
       dc.TextOut(.......);
       i++ ;
    }}这样就不会再消失了
      

  10.   

    he_zhidan(何志丹:壮志在我心)是对的。
    // 被OnDraw的pDC->DrawText触发这个事件
    void CSdiView::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags) 
    {
    CDC * pDC = GetDC();
    StringData += nChar;
    CRect r(0,0,0,0);
    pDC->DrawText(StringData,&r,DT_LEFT|DT_CALCRECT);
    InvalidateRect(r); // 减少闪烁

    CView::OnChar(nChar, nRepCnt, nFlags);
    }
    // 窗口重画的时候调用这个函数
    void CSdiView::OnDraw(CDC* pDC)
    {    pDC->DrawText(StringData,CRect(0,0,1000,1000),DT_LEFT);
    }
      

  11.   

    当有别的事件的事情发生,的时候
    ondraw()就会,从画,用INVALIDATERECT 
    yao shua xin
    WM——paint;