我用MFC建立了一个基于对话框的程序,并在该类定义了一些成员变量和成员函数。
我在该对话框是放上一个按钮,想要单击此按钮后重新生成一个新的对话框,并且新的对话框上有一个静态文本控件,并根据原对话框中定义的一些变量和函数在新的对话框上的文本控件上画出图形。
不知在新的对话框类中如何使用前一个对话框类中的变量和函数?
谢谢!
我的主对话框类名是CDFTVCDlg,新生成的对话框类是CPic,文本控件ID是IDC_STATIC1下面是定义在主对话框类中的一个画图函数,里面的变量都是主对话框类的成员变量。void CDFTVCDlg::paintdft(double zz[], int M)
{
UpdateWindow();
CDC *pDC=GetDC();
CPen *pOldPen;
CPen NewPen(PS_SOLID,3,RGB(255,0,0));
pOldPen = pDC->SelectObject(&NewPen);
for(int i=0;i<M;i++)
{
int op;

pDC->MoveTo(20+i*(400/M),600);
op = 20+i*(400/M);        if(zz[i]<=10)
pDC->LineTo(op,600-zz[i]*50);
else if(zz[i]<=20)
pDC->LineTo(op,600-zz[i]*25);
else if(zz[i]<=40)
pDC->LineTo(op,600-zz[i]*12);
else
pDC->LineTo(op,600-zz[i]*6); } pDC->SelectObject(pOldPen); ReleaseDC(pDC);}
请问,我如何做才能在单击主对话框上的按钮后,将生成一个新的对话框,并在新对话框上的文本控件上依照我在主对话框类中定义的画图函数画出图形??
谢谢!

解决方案 »

  1.   

    单击主对话框上的按钮,响应函数,在函数实现里面创建新的对话框 
    CPic dlg;
    dlg.domadal();如果想创建新对话框后立即画图,在oninitialdialog里面得到住对话框指针。
    CDFTVCDlg *p =(CDFTVCDlg*)Getparent();
    用p就可以访问主对话框类了 
      

  2.   

    谢谢qlftl,请问oninitialdialog函数是主对话框类中的初始函数还是新对话框中的函数?谢谢syy64,为何要重载CEdit类,怎样重载呢?另外,我在窗口中画出图后,一移动窗口,窗口中的图形就会消失,如何避免呢?谢谢!
      

  3.   

    void CMyStatic::OnPaint() 
    {
    CPaintDC dc(this); // device context for painting

    // TODO: Add your message handler code here
    CRect rect;
    GetClientRect(&rect);
    dc.MoveTo(rect.BottomRight());
    dc.LineTo(rect.TopLeft());
    this->Invalidate(true);
    // Do not call CStatic::OnPaint() for painting messages
    }哪里需要画,你的函数就定义在哪个类里面。你需要添加一个类,此类是你控件类的继承。我已经帮你实现了,在文本空间里面画出了线
      

  4.   

    谢谢Jcily,
    我的想法是单击一个按钮后,产生新对话框并在新对话框的文本控件上画图.
    你上面把画图函数放在CMyStatic类中,那么我在主对话框的按钮中无法调用呀。。
    另我,画图函数必需在主对话框类中定义的,因为要用到很多在主对话框界面上得到的很多变量。
      

  5.   

    在你的新类中实现消息映射WM_CTLCOLOR,虽然这个消息是控制控件颜色的,可是一样可以画图的.
    if(pWnd->GetDlgCtrlID() == IDC_STATIC1)
    {
    //在这里想怎么画图都可以了,如果要获取基类成员,就CDFTVCDlg *p =(CDFTVCDlg*)Getparent();}
      

  6.   

    if(pWnd->GetDlgCtrlID() == IDC_STATIC1)是什么意思,为什么要做这句判断呢?
      

  7.   

    我在主对话框上的按钮单击程序如下,调试虽然通过,但运行后新对话框没有画出的钱,且一退出就发生错误。 CPic dlg;
    dlg.DoModal();
    CClientDC dc(&dlg);
    dc.MoveTo(50,30);
    dc.LineTo(200,200);
      

  8.   


    比如我的主对话框类中有下面一个按钮单击事件。void CDFTVCDlg::OnBnClickedButton4()
    {

      CPic *dlg=new CPic; 
      dlg->Create(IDD_DIALOG1,NULL);
      dlg->ShowWindow(SW_SHOW);  CDC* pDC=dlg->GetDC();
        pDC->MoveTo(50,30);
       pDC->LineTo(200,200);
       ReleaseDC(pDC);
    }目的是产生一个新的对话框,并在该对话框上画线。为了保证移动窗口时图像还在。我在新对话框类CPic类上建立一个OnPaint函数。可是我无法将上面的代码放进去,因为编译时找找不到dlg,而且新产生对话框的代码也不能放进去,如果去掉的话,线就跑到主对话框上去了。请帮帮忙。。
      

  9.   

    在子对话框的OnInitDialog中调用复对话框的画图函数
      

  10.   

    在新类里定义一个旧类的指针pParenDlg,就可以了访问了。