本帖最后由 VisualEleven 于 2012-10-18 18:31:23 编辑

解决方案 »

  1.   

    在FillPoint的最后加了一下,没有效果、、
      

  2.   

    在void CTest2View::FillPoint(int i,int j)中,不应该创建 dc,而应该使用 onDraw 中的 pDC,所以,在 onDraw(CDC * pDC) 中,要把 pDC 传入CTest2View::FillPoint,让它在传入的 pDC 中画画
      

  3.   

    OnDraw 里面直接用 pDc(CPaintDc,封装了 BeginPaint,EndPaint。。)
      

  4.   

    FillPoint函数的参数可以传进去,但是我的FillPoint函数是由另外一个非绘图类的函数调用的,那么那个函数也需要被传入pDC喽?可是我不能在OnDraw里面重绘它啊。而且我试过,程序的确会自动终止的。有什么函数可以直接在别的函数中调用OnDraw的pDC指针吗?
      

  5.   

    在 CTest2View 里设置一个 public 类别的成员变量,让在"非绘图类"中的函数能访问它们.
    在这个"非绘图类"中若要画图,它将:
    STEP1 对CTest2View里的成员变量置值;
    STEP2 调用 CTest2View::Invalidate();
    在 CTest2View::OnDraw(CDC *pDC) 里,可使用这些共享变量控制画图.
      

  6.   

    我在View类中建立了CDC* pDC_public 变量,在ondraw中将pDC指针传给pDC_public ,
    将pDC_public传进FillPoint ,
    在非绘图类CTest2View::OnMasDistance()函数中调用FillPoint(pDC_public) 
    然后在OnMasDistance()函数中调用 CTest2View::OnDraw(CDC *pDC);是这个意思吗?为什么我的OnMasDistance()函数执行一半就卡了?Ps:不知道是不是有这个因素,我的View里面始终重绘着一张图像,我现在想要重绘的画点操作是需要覆盖那个图像的。
      

  7.   

    to darksworld:
    我说的不是你理解的意思.用 View 绘图的大致框架是:
    1) 用数据结构描述要绘制的图
    2) 若要绘图,先更改数据结构,然后再调用 View::InValidate()
    3) 在 View::OnDraw(CDC * pDC) 函数里,根据数据结构在屏幕上真正画图从你的贴子上看,我建议采用下面的数据结构:
    struct CNode    // 一个图形元素
    {
        CNode * m_Next;  // 多个图形元素用链表组织在一起
        int m_KindCode;  // 类型码   1 点   2 线   3 (你可以自己定义)
        RECT m_rect;     // 图形占用的区域
        int  m_Color;     // 颜色
        ..............;   // 可能还要其它的成员,自己设计
    };然后在 Document 类 或 View 类的 .h 文件中定义元素链表头指针CNode * m_pNodes;在系统初始化时把它置空.
    若要增加一个像素,则可以:
       CNode * p=new CNode;
       在 p 中填写坐标和颜色;
       把 p 加到 m_pNodes 链表中;
       调用 View::InValidate();在 View::OnDraw(CDC * pDC) 中,你可以:
       CNode * p;
       for (p=m_pNodes;p!=NULL;p=p->m_Next)
       {
         switch(p->m_KindCode)
         {
         case 1:           // 画点
             pDC->SetPixel(p->m_rect.left,p->m_rect.top,p->m_Color);
             break;
         case 2:           // 画线
              pDC->LineTo(.....);
             break;
         case .....        // 可以画其它图形
         }
       }