可不可以在其他类中调用cview的ondraw函数,利用pdc->textout(……)来改变视图的显示内容!(在原来的内容上增加东西)

解决方案 »

  1.   

    可以
    传个pDC的地址过去
    void InitBackGround(CRect picrect, CDC *pDC);//例如CDC *pDC这个参数
      

  2.   

    在cview里写一个函数
    void Fun()
    {
    CDC *pDC = GetDC();
    pDC->TextOut();
    ReleaseDC(pDC);
    }
    在其他类中调用这个函数就行了
      

  3.   

    如果在按钮的onok事件里添加如下的代码为和不行?void CAboutDlg::OnOK() 
    {
    CVvView* theApp=new CVvView;
    CDC* pDC=theApp->GetDC();
    pDC->TextOut(200,200,"HELLO");
    CDialog::OnOK();
    }
    还有如果按照ninsenki说的写成函数的,然后再其他类中调用,为什么还是出现错误void CVvView::Fun(int x, int y, char str[])
    {
    CDC *pDC = GetDC();
    pDC->TextOut(x,y,str);
    ReleaseDC(pDC);
    }void CAboutDlg::OnOK() 
    {
    // TODO: Add extra validation here
    CVvView* theApp=new CVvView;
    theApp->Fun(200,300,"HELLO");
    CDialog::OnOK();
    }
      

  4.   

    楼主你厉害,这样的代码也写得出!CVvView* theApp=new CVvView;
    此时VIEW还没创建出来。还要theApp->Create(...)。
      

  5.   

    对楼主的敬佩犹如长江之水,滔滔不绝啊否定,其它类中调用视图类的OnDraw,有人驳斥我该打屁股100大板废话,如果要在OnDraw中显示必定是不能被擦除的,那么你尽量使用bool 变量控制好了!
      

  6.   

    我在 CVvView中定义了一个全局变量CVvView* theApp 并在CVvView中的构造函数中对其赋值为 theApp=this ,然后在需要用的地方申明为extern,再用theApp->Fun(200,300,"HELLO");
    好象就可以了,不知道各位大虾对此有何异议?此法妥当不妥当?
      

  7.   

    CVvView::Fun(int x, int y, char str[])
    {
    CDC *pDC = GetDC();
    pDC->TextOut(x,y,str);
    ReleaseDC(pDC);
    }void CAboutDlg::OnOK() 
    {
    // TODO: Add extra validation here
             //对话框To视图数据交互(SDI为例)
             CMainFrame *pFrame = (CMainFrame *)GetParent();//获取框架窗口指针
    CVvView* theApp =(CVvView *)pFarme->GetActiveView();//获取视图指针
    theApp->Fun(200,300,"HELLO");
    CDialog::OnOK();
    }
    需要在CAboutDlg包含下列头文件:
    #include "MainFrm.h"
    #include "CVvDoc.h"
    #include "CVvView.h"
      

  8.   

    这样的方法是行但是,当窗口变化之后(最大化或最小花之类)原先显示的hello就消失了,不知这个该怎么解决?
      

  9.   

    首先要把变量保存起来,才能使OnDraw()响应重绘.也就是说,要把传到Fun()函数的坐标和字符串保存起来.
    CVvView::Fun(int x, int y, char str[])
    {
    CDC *pDC = GetDC();
             xx = x;//保存到视图类中的变量
             yy = y;//同上
             str1 = str;//同上
    pDC->TextOut(x,y,str);
    ReleaseDC(pDC);
    }void CAboutDlg::OnOK() 
    {
    // TODO: Add extra validation here
             //对话框To视图数据交互(SDI为例)
             CMainFrame *pFrame = (CMainFrame *)GetParent();//获取框架窗口指针
    CVvView* theApp =(CVvView *)pFarme->GetActiveView();//获取视图指针
    theApp->Fun(200,300,"HELLO");
    CDialog::OnOK();
    }在OnDraw()加入:pDC->TextOut(xx,yy,str1);
    当然,其实不用这样搞的,举例而已~~~
      

  10.   

    请问“lambochan”,你说“其实不用这样搞的”,请问还有什么其他方法?
      

  11.   

    举个例子吧:
    在OnDraw()加入:pDC->TextOut(xx,yy,str1);void CAboutDlg::OnOK() 
    {
    // TODO: Add extra validation here
             //对话框To视图数据交互(SDI为例)
             CMainFrame *pFrame = (CMainFrame *)GetParent();//获取框架窗口指针
    CVvView* theApp =(CVvView *)pFarme->GetActiveView();//获取视图指针
    theApp->xx = 200;//传到视图变量中
             theApp->yy = 300;//同上
             theApp->str1 ="HELLO";//同上
             theApp->Invalidate();//使客户区无效
             theApp->UpdateWindow();//发送WM_PAINT消息,重画客户区.
    CDialog::OnOK();
    }其实就是把绘制代码或显示的代码放在OnDraw(),know?
      

  12.   

    补充一句:
        你喜欢怎样搞就怎样搞,哪样方便就搞哪样~~
        要使视图能重绘,必须在OnPaint()或OnDraw()加入相应代码,否则,被刷新后就不见了,kaka~~
      

  13.   

    老兄,你想想也能明白阿,如果在about里边画了视图出来的时候OnDraw()他不就没了么!!!:)