我的视图类从CScrollView派生,我在缺省映象方式MM_TEXT下可以生成一个红色矩形,但我在OnDraw( )中调用pDC->SetMapMode(MM_HIENGLISH)改变映象方式,同时把
OnInitialUpdate( )中的SetScrollSizes(MM_TEXT, sizeTotal);改为SetScrollSizes(MM_HIENGLISH, sizeTotal);但是红色矩形却显示不出来,请问时什么原因?怎么改正?我的代码如下:
void CViewView::OnDraw(CDC* pDC)
{
CViewDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);         pDC->SetMapMode(MM_HIENGLISH);
 
// TODO: add draw code for native data here
         RECT Rect;
         Rect.left=Rect.top=10;
     Rect.right=Rect.bottom=100; 
     CBrush Brush(RGB(255,0,0));
     pDC->FillRect(&Rect,&Brush);
}
void CViewView::OnInitialUpdate()
{
CScrollView::OnInitialUpdate(); CSize sizeTotal;
// TODO: calculate the total size of this view
sizeTotal.cx = sizeTotal.cy = 1000000;
         SetScrollSizes(MM_HIENGLISH, sizeTotal);
}

解决方案 »

  1.   

    从MSDN中看到MM_HIENGLISH的原点为左下角,而你设置的界面大小如:sizeTotal.cx = sizeTotal.cy = 1000000,很大,所以我认为矩形是有的,只不过看不到。
      

  2.   

    sizeTotal.cx = sizeTotal.cy 改变大小我都试过了,不行啊!
      

  3.   

    好象是这样的
    我也是在ScrollView里作图,
    不过我都用MM_TEXT,自己转换一下坐标
    好象在别的影射方式下,画不出线来
    不过你可以先试试画45度线
    例如lineto(1000,1000)
    应该可以吧
      

  4.   

    怎么回事,在MM_HIENGLISH映象方式下还是画不出啊,LineTo(1000,1000)也画不出。
    自己怎么转换坐标啊?
      

  5.   

    不是画不出,而是因为在MM_HIENGLISH映象方式下,你没有改变的话,坐标原点在
    左上角,而且是向上增长的,所以你没有看到而已了,实际上是画出来的了,
      

  6.   

    TO:lifeequation(果皮)
       谢谢了!还有个问题,因为我需要改变坐标原点,所以把代码修改了一下,红色矩形可以显示,但是滚动时,图形只是闪烁,但位置不变,有时滚动快时能出现好几个红色矩形,是不是重绘有问题?怎样改正?谢谢 !附代码:
    void CWeView::OnDraw(CDC* pDC)
    {
    CWeDoc* pDoc = GetDocument();
    ASSERT_VALID(pDoc);
    // TODO: add draw code for native data here pDC->SetMapMode(MM_HIENGLISH);         CRect rect;
             GetClientRect(rect);
    pDC->SetViewportOrg(rect.right/8,rect.bottom/2);  RECT Rect;
             Rect.left=1000;
    Rect.top=-1000;
             Rect.right=2000;
    Rect.bottom=-2000;
             CBrush Brush(RGB(255,0,0));
             pDC->FillRect(&Rect,&Brush);
    }