一)如题,首先我定义了一个对话框,此类中有公共成员函数:OnUpdateControls(),代码如下:
void CFRDlg::OnUpdateControls()
{
m_picture.ShowWindow(SW_SHOWNORMAL);
m_picture1.ShowWindow(SW_HIDE);
GetDlgItem(IDC_PROGRAMMING)->EnableWindow(TRUE);}二)通过点击此对话框中的菜单项,创建了模态对话框。
void CFRDlg::OnConnect()
{
CConnect conDlg;
conDlg.DoModal();
}三)我想通过点击模态对话框中的OK按钮来调用对话框中的公共成员函数OnUpdateControls(),来更新对话框中的控件状态。我试过了指针,对象,有元等都会有问题,请帮忙看看是什么原因,或者还有什么更好的方法来实现:a)用对象,编译OK,但是运行时报错:“Debug Asserition Failed! Pragram:.. gram Files\Debug\FR.exe File:winocc.cpp Line:301”。代码如下:
void CConnect::OnOK()
{
// TODO: Add extra validation here
CDialog::OnOK();
CFRDlg cfrDlg;
cfrDlg.OnUpdateControls();
}b) 考虑到对象的生命周期等问题,我用了指针,运行时还是报错:“Debug Asserition Failed! Pragram:.. gram Files\Debug\FR.exe File:winocc.cpp Line:301”,代码如下:
void CConnect::OnOK()
{
// TODO: Add extra validation here
CDialog::OnOK();
CFRDlg *cfrDlg=new CFRDlg();
cfrDlg->OnUpdateControls();
}3)用友元,连接的时候出错。请大家帮我解决此问题。
void CFRDlg::OnUpdateControls()
{
m_picture.ShowWindow(SW_SHOWNORMAL);
m_picture1.ShowWindow(SW_HIDE);
GetDlgItem(IDC_PROGRAMMING)->EnableWindow(TRUE);}二)通过点击此对话框中的菜单项,创建了模态对话框。
void CFRDlg::OnConnect()
{
CConnect conDlg;
conDlg.DoModal();
}三)我想通过点击模态对话框中的OK按钮来调用对话框中的公共成员函数OnUpdateControls(),来更新对话框中的控件状态。我试过了指针,对象,有元等都会有问题,请帮忙看看是什么原因,或者还有什么更好的方法来实现:a)用对象,编译OK,但是运行时报错:“Debug Asserition Failed! Pragram:.. gram Files\Debug\FR.exe File:winocc.cpp Line:301”。代码如下:
void CConnect::OnOK()
{
// TODO: Add extra validation here
CDialog::OnOK();
CFRDlg cfrDlg;
cfrDlg.OnUpdateControls();
}b) 考虑到对象的生命周期等问题,我用了指针,运行时还是报错:“Debug Asserition Failed! Pragram:.. gram Files\Debug\FR.exe File:winocc.cpp Line:301”,代码如下:
void CConnect::OnOK()
{
// TODO: Add extra validation here
CDialog::OnOK();
CFRDlg *cfrDlg=new CFRDlg();
cfrDlg->OnUpdateControls();
}3)用友元,连接的时候出错。请大家帮我解决此问题。
void CConnect::OnOK()
{
// TODO: Add extra validation here
CFRDlg* m_dlg=(CFRDlg*)GetParent();
m_dlg->msg();
CDialog::OnUpdateControls();
}这样做就可以了
对话框new了之后都没有Create,相信你的picture也没有创建吧,你就让它ShowWindow,要知道ShowWindow之前要检查窗口句柄,这里就通不过,几个问题类似。
解决:
做一个有参构造,CConnect conDlg(CFRDlg* pDlg);
然后
void CFRDlg::OnConnect()
{
CConnect conDlg(this);
conDlg.DoModal();
}
然后在OnOk里面把指针取出来OnUpdateControls();
{
CConnect conDlg;
if(conDlg.DoModal()==IDOK)
{CDialog::OnUpdateControls();}
}
这样应该可以,当conDlg对话框中点OK按钮就执行OnUpdateControls()
CDialog::OnOK();
之后不应该再写代码。
CConnect类中定义一个成员变量:CFRDlg *cfrDlg
void CFRDlg::OnConnect()
{
CConnect conDlg;
conDlg.cfrDlg=this;
conDlg.DoModal();
} void CConnect::OnOK()
{
// TODO: Add extra validation here cfrDlg->OnUpdateControls();
CDialog::OnOK();
}