MFC中,模态对话框的使用

说的是在MFC中:


第一步:在资源编辑器中创建对话框模板,添加控件;属性设置中,对话框的style不能是child,一定要是popup,否则出现子编辑控件无法获取焦点问题;



第二步:右键-classward-添加类名-添加控件的变量-编辑有关函数代码;

1.注意,不要覆盖PostNCDestroy(){delete this;},因模态对话框的创建过程是:

某函数{
CModDlg mod;
mod.DoModle();
}
对话框关闭后,窗口销毁,调用上面PostNCDestroy(){delete this;},然后函数执行完毕,mod消失,相当于delete mod;同一对象,删除的两次,故崩溃。


2.若想创建非模态的,涉及style类型的变化,child或popup,这两个参数影响movewindow()的最终显示效果;

(1)创建:

主框架窗口类中:{
protected:
CDlg* m_pmydlg;//利用向导添加变量,方式一
CDlg m_mydlg;//利用向导添加变量,方式二
};

(2)类的定义:

如采用方式一创建,一定要覆盖PostNCDestroy()并设置{delete this;};
如采用方式二,不必覆盖PostNCDestroy函数,因为对象会自动删除。


第三步:编辑对话框的响应代码

主要是EndDialog(n)中n的取值问题。类定义的时候,不同的按钮,可能都会EndDialog,但在类体外,创建对象且返回时,并不知道哪个按钮被点击了,故借助这个n通讯。如上面的“某函数”,就可以这样设置
某函数{
CModDlg mod;
int r=mod.DoModle();//此时r的值即为n的具体值。所以,调用EndDialog时,把当时的相关按钮ID传过去,是最科学的。
}



你可能感兴趣的:(MFC)