非模态对话框的创建及使用
来源:互联网 发布:显示3g网络却是2g网速 编辑:程序博客网 时间:2024/06/05 00:26
对于模态对话框,使用非常简单,通常会像以下这样使用:
void Fun()
{
...............
CMyDlg mydlg;
mydlg.DoModal();
................
}
而对于非模态对话框,通常会像以下这样使用
void Fun()
{
...............
CMyDlg* pMydlg = new CMyDlg;
pMydlg->Create( IDC_MY_DLG );
pMydlg->ShowWindow( SW_SHOW );
................
}
因为非模态对话框是new出来的,所以要释放对象。
微软的建议是:
A modal dialog box closes automatically when the user presses the OK or Cancel buttons or when your code calls theEndDialog member function.
When you implement a modeless dialog box, always override the OnCancel member function and call DestroyWindow from within it. Don’t call the base class CDialog::OnCancel, because it calls EndDialog, which will make the dialog box invisible but will not destroy it. You should also override PostNcDestroy for modeless dialog boxes in order to delete this, since modeless dialog boxes are usually allocated with new. Modal dialog boxes are usually constructed on the frame and do not need PostNcDestroy cleanup.
所以我们也按照他们的建议进行操作,
void CMyDlg::OnOK(){// TODO: 在此添加专用代码和/或调用基类DestroyWindow();return;//CDialogEx::OnOK();}void CMyDlg::OnCancel(){// TODO: 在此添加专用代码和/或调用基类DestroyWindow();return;//CDialogEx::OnCancel();}void CMyDlg::PostNcDestroy(){// TODO: 在此添加专用代码和/或调用基类CDialogEx::PostNcDestroy();delete this;}
注:如果你不是像以上那样临时new一个的话,比如你可能会让它成为一个类成员对象,然后在初始化的时间创建它,在类销毁时自动销毁此模态对话框的话,那么就不应该在PostNcDestroy处delete它,也不应当DestroyWindow()它,会引发内存操作错误。因为此时它并不是new出来的。比如:在类A中有一个成员变量为CMyDlg m_mMyDlg; 然后在类构造函数中调用m_mMyDlg.Create( IDC_MY_DLG);
作者:山丘儿
转载请标明出处,谢谢。原文地址:http://blog.csdn.net/s634772208/article/details/46404761
- 非模态对话框的创建及使用
- 非模态对话框的创建及撤销
- 非模态对话框的创建及显示
- 非模态对话框的创建及销毁
- MFC非模态对话框的创建及显示
- 非模态对话框的创建和销毁及全局指针的使用注意事项
- 非模态对话框的创建
- 模态对话框与非模态对话框的创建及的几种销毁方法与区别
- VS2010/MFC编程入门之十一(对话框:非模态对话框的创建及显示)
- VS2010/MFC编程入门之十一(对话框:非模态对话框的创建及显示)
- VS2010/MFC编程入门之十二(对话框:非模态对话框的创建及显示)
- VS2013/MFC编程入门之十一(对话框:非模态对话框的创建及显示)
- MFC学习笔记(一):模态对话框与非模态对话框的区别、创建及显示
- C++ MFC / VS2013 之十(对话框:非模态对话框的创建及显示)
- 2.非模态对话框的创建
- MFC--非模态对话框的创建
- 无模式对话框的创建与使用
- 无模式对话框的创建与使用
- 已知一个对象,用反射的方式复制另一个对象
- 第十四周 项目四(2)处理C++源代码的程序
- POSIX信号量与互斥锁
- Xcode常用快捷键
- iOS开发—01音效的播放
- 非模态对话框的创建及使用
- Android EditText控制密码的显示和隐藏
- HDOJ 3501 Calculation 2(欧拉函数拓展——求非互质数和)
- 建立模式对话框显示提示文档
- C++对C语言的变量检测增强
- 第三章第46题
- (10.1.7)用户至上的设计细节
- Linux下安装zookeeper
- Android 优化电池使用时间——确定和检测网络状态