在基于对话框的程序画图表,用什么作绘图容器?什么方法滚动绘图区?

解决方案 »

  1.   

    使用picture控件,滚动用scroll控件对picture控件控制应该可以完成,
    不过最好是使用稳当视图结构,在VIEW 中画比较好!
      

  2.   

    我就用的Picture控件,滚动条你可以自己加啊,这个我以前做过的,还是比较容易的
      

  3.   

    可是如果画的图超出picture控件的话,图形就会画到其它控件上,怎样做才不会出现这种情况呢?
      

  4.   

    用双缓冲,先在内存中绘制,然后拷贝到屏幕DC,这样就不会出现画出去的情况了,前段时间我也是为这个问题费了不少劲。我把我的一段代码给你看一下:
    CDC *pDC = m_drawbox.GetDC();
    CDC dcMem;
    CBitmap bitmap;
    bitmap.CreateCompatibleBitmap(pDC,300,300);
    dcMem.CreateCompatibleDC(pDC);
    CBitmap *pOld = dcMem.SelectObject(&bitmap);dcMem.FillRect(CRect(0,0,300,300),(CBrush *)dcMem.SelectStockObject(WHITE_BRUSH));
    POSITION pos = m_EntityList.GetHeadPosition();
    while( pos != NULL ) m_EntityList.GetNext(pos)->Draw(&dcMem);//把链表中的图形全部绘制一编pDC->BitBlt(0,0,300,300,&dcMem,0,0,SRCCOPY);
    bitmap.DeleteObject();
    m_drawbox.ReleaseDC(pDC);这里的m_drawbox就是Picture控件对应的变量
      

  5.   

    好的,我去试试。不过再问一下,那么Picture的type属性设置为Rectangel还是Frame还是其它?
      

  6.   

    实际上我要在ATL控件里实现,不用MFC支持的。
    hellolwl(刘文澜) 的方法我试了,可是还是会画到其它控件上,这个问题的关键点是什么?
      

  7.   

    双缓冲肯定可以解决的,ATL控件我也做过,也是用的这种方法,你再仔细看看程序呢