前提:用appwizard建立了单文档框架,名字是mydraw
现在我在document栏添加了一些命令,希望通过不同的命令(菜单选项)对应不同的
图形输出,现在已经在mydraw.app中添加了
ON_COMMAND(ID_GRAPHIC_POINT,CMydrawDoc::DrawPoint) //画点
ON_COMMAND(ID_GRAPHIC_POINT,CMydrawDoc::DrawLine)  //画线DrawPoint,DrawLine分别产生点或者线的数组,然后现在是问题是怎样搭通这两个
函数和CMydrawView::OnDraw()的关系然后实现不同的图形输出。高分相送,在线等候。

解决方案 »

  1.   

    UP也就是说doc和view类究竟怎样共享数据阿
    我在doc类中产生图形的点数组,然后在view类中的OnDraw显示,这个问题具体怎样实现
    请教请教!!!
      

  2.   

    将你画点、画线的菜单响应函数放到View里面去
    ON_COMMAND(ID_GRAPHIC_POINT,CMydrawView::DrawPoint) //画点
    ON_COMMAND(ID_GRAPHIC_POINT,CMydrawView::DrawLine)  //画线生成数组后,用Invalidate(),就可以发送重绘消息
    就到OnDraw()里面去了
      

  3.   

    msdn:
    CDocument* GetDocument( ) const;Return ValueA pointer to the CDocument object associated with the view. NULL if the view is not attached to a document.ResCall this function to get a pointer to the view’s document. This allows you to call the document’s member functions.
      

  4.   

    如同楼上newsb说的,把他们放到View类中,比如画点的菜单响应函数DrawPoint
    设置一个成员变量m_iCurDraw=1;//0:不画     1:画点     2:画线
    然后把这个菜单项目值成选中状态(再类向导中这个菜单的更新消息中添加
    (
    OnUpdateMenuitem32771(CCmdUI* pCmdUI) 
    {
              if(m_iCurDraw==1)
    pCmdUI->SetCheck();
    else
    pCmdUI->SetCheck(0);
    }
    然后重载鼠标抬起事件,如果m_iCurDraw==1,就通过GetDocument后得到文档,把该点加入到点的点数组里面
    再OnDraw()中根据Doc中点的点数组和线的点数组画,OK
      

  5.   

    谢谢楼上几位的意见,如果在view中添加产生点的代码,我已经实现了。
    但是我还是希望在doc中产生然后在view中显示较为系统一些。
    现在遇到的问题是,在doc中产生后要触发view中的ondraw重新刷新画面
    但是Invalidate()确是view成员函数,那么应该怎样解决这个问题呢?
      

  6.   

    View类是处理消息的最好地方,我觉得你应该在View类产生点,通过GetDocument存到Doc中。
    你可以通过UpdateAllViews更新。
      

  7.   

    to bluebohe(薄荷) 
    能否把过程说得具体一点:
    是不是现在View中产生点,然后通过GetDocument返回的指针把结果存放到Doc中
    再用UpdateAllViews来更新刚刚产生的图形显示???
      

  8.   

    不是啊,是现在View中产生点,然后通过GetDocument返回的指针把结果存放到Doc中,在View中把鼠标按下纪录的点保存到doc中就好了,在OnDraw中根据doc的点画就好了阿,用不到UpdateAllViews
      

  9.   

    View 是 Document 的表现形式!
    他获得用户的输入,完成文档的输出!因为你是在CView中画图,所以建议在CDocument中建立一个m_Point[]
    至于画图,既可以在CDocument中也可以在CView中。