我用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);}
请问,我如何做才能在单击主对话框上的按钮后,将生成一个新的对话框,并在新对话框上的文本控件上依照我在主对话框类中定义的画图函数画出图形??
谢谢!
我在该对话框是放上一个按钮,想要单击此按钮后重新生成一个新的对话框,并且新的对话框上有一个静态文本控件,并根据原对话框中定义的一些变量和函数在新的对话框上的文本控件上画出图形。
不知在新的对话框类中如何使用前一个对话框类中的变量和函数?
谢谢!
我的主对话框类名是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);}
请问,我如何做才能在单击主对话框上的按钮后,将生成一个新的对话框,并在新对话框上的文本控件上依照我在主对话框类中定义的画图函数画出图形??
谢谢!
CPic dlg;
dlg.domadal();如果想创建新对话框后立即画图,在oninitialdialog里面得到住对话框指针。
CDFTVCDlg *p =(CDFTVCDlg*)Getparent();
用p就可以访问主对话框类了
{
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
}哪里需要画,你的函数就定义在哪个类里面。你需要添加一个类,此类是你控件类的继承。我已经帮你实现了,在文本空间里面画出了线
我的想法是单击一个按钮后,产生新对话框并在新对话框的文本控件上画图.
你上面把画图函数放在CMyStatic类中,那么我在主对话框的按钮中无法调用呀。。
另我,画图函数必需在主对话框类中定义的,因为要用到很多在主对话框界面上得到的很多变量。
if(pWnd->GetDlgCtrlID() == IDC_STATIC1)
{
//在这里想怎么画图都可以了,如果要获取基类成员,就CDFTVCDlg *p =(CDFTVCDlg*)Getparent();}
dlg.DoModal();
CClientDC dc(&dlg);
dc.MoveTo(50,30);
dc.LineTo(200,200);
比如我的主对话框类中有下面一个按钮单击事件。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,而且新产生对话框的代码也不能放进去,如果去掉的话,线就跑到主对话框上去了。请帮帮忙。。