MFC非模态对话框销毁

非模态对话框需要重载OnCanel方法, 并调用DestroyWindow, 且不能调用基类的OnCanel
重载PostNcDestroy, 需要delete掉this指针

// Overrides
    // ClassWizard generated virtual function overrides
    //{{AFX_VIRTUAL(CDlgTest)
    protected:
    virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
    virtual void PostNcDestroy();
    //}}AFX_VIRTUAL

// Implementation
protected:

    // Generated message map functions
    //{{AFX_MSG(CDlgTest)
    virtual void OnOK();
    virtual void OnCancel();
    //}}AFX_MSG

void CDlgTest::OnOK() 
{
    // TODO: Add extra validation here
}

void CDlgTest::OnCancel() 
{
    DestroyWindow();
}

void CDlgTest::PostNcDestroy() 
{
    // TODO: Add your specialized code here and/or call the base class
    
    CDialog::PostNcDestroy();
    delete this;
}

时间: 2024-11-01 05:52:44

MFC非模态对话框销毁的相关文章

VC MFC非模态对话框的实现方法_C 语言

众所周知的,MFC中非模态对话框在显示后,程序其他窗口仍能正常运行,可以响应用户输入,还可以相互切换.本文就来给大家讲解一下非模态对话框的实现方法: 一.非模态对话框的对话框资源和对话框类 实际上,模态对话框和非模态对话框在创建对话框资源和生成对话框类上是没有区别的,因此,在创建模态对话框时所创建的IDD_TIP_DIALOG对话框资源和CTipDlg类都不需要修改. 二.创建及显示非模态对话框的步骤 需要修改的是,对话框类实例的创建和显示,也就是之前在CAdditionDlg::OnBnCli

MFC 非模态对话框 关闭 会不会调用变量的析构函数?

问题描述 MFC 非模态对话框 关闭 会不会调用变量的析构函数? 我有一个子对话框,头文件中声明了变量a. 例如a是一个队列. 使用a的过程中,会不断动态申请新空间. 队列a是有析构函数的. 如果是局部变量,局部函数运行完后,队列可以自动调用析构函数. 但上述例子,关闭对话框后,却没有响应a的析构函数. 注,我重载了onclose.如果不能自动析构,我打算在里面手动析构a. 但我不太理解,为什么关闭对话框,析构函数不自动调用? 还有要注意什么别的问题-- 解决方案 是否调用析构函数取决于这个对话

MFC创建模态对话框和非模态对话框的方法_C 语言

在MFC中对话框有两种形式,一个是模态对话框(model dialog box),一个是非模态对话框(modeless dialog box).本文对此分别简述其创建方法. 一.模态对话框(model dialog box) 在程序运行的过程中,若出现了模态对话框,那么主窗口将无法发送消息,直到模态对话框退出才可以发送. 点击模态对话框中的OK按钮,模态对话框会被销毁. 创建一个模态对话框的代码如下所示: //创建一个模态对话框 CTestDialog td; td.DoModal(); 其中C

Mfc在模态对话框上非模态创建listbox焦点问题

问题描述 Mfc在模态对话框上非模态创建listbox焦点问题 在模态对话框上创建一个Gridctrl中每一个Row里会有一个item里additem了一个非模太的listbox控件,在响应item左键单击后会show出这个listbox在listbox的show函数里setfocys一直不起作用,发现焦点一直在最最外层的Dlg里,怎么能够把焦点设置到listbox上 解决方案 看看是不是忘记设置tabstop了.手工按tab有反应么?setfocus的handle参数是否正确. 解决方案二:

mfc-MFC 非模态对话框 编辑框中输入中文出现乱码,求指点!!

问题描述 MFC 非模态对话框 编辑框中输入中文出现乱码,求指点!! 如题中,当前项目所用字符集为UNICODE,多字节字符集也试过,另外对话框和资源文件上都设置了语言为中文,仍为乱码,求解决思路方法!!!跪谢!!木有金币 不大好意思,等会儿我研究研究怎么获得金币在加上悬赏 解决方案 用Richedit控件试试 解决方案二: 对话框属性设置.设置一下属性中的语言试试 解决方案三: 你设置Unicode编码,显示中文应该没有问题,你的操作系统是什么?英文版的?有中文语言包吗?

C++非模态对话框自动销毁的好方法 .

非模态对话框自动销毁的好方法在进行非模态对话框编程时,由于其需要通过new 一个对话框对象,然后调用Create函数来创建,这就牵涉到何时把对话框delete掉的问题,通过如下方法,可以让你不再担心对话框忘记delete掉而导致的内存泄漏问题.1.用ClassWizard在对话框中添加如下虚拟函数virtual void PostNcDestroy();这样就有了这样一个函数:void CAboutDlg::PostNcDestroy() { // TODO: Add your speciali

关于非模态对话框的创建释放与释放

问题描述 关于非模态对话框的创建释放与释放 创建了一个对话框父窗口为桌面窗口m_pDecorBMapDlg = new CDecorBMapDlg;m_pDecorBMapDlg->Create(CDecorBMapDlg::IDDGetDesktopWindow()); 然后将它销毁m_pDecorBMapDlg->DestroyWindow();SAFE_DELETE(m_pDecorBMapDlg); 然后再创建就出错了 解决方案 再创建是1.m_pDecorBMapDlg = new

非模态对话框如何判断我点击的是IDOK按钮

问题描述 非模态对话框如何判断我点击的是IDOK按钮 我想通过单击非模态对话框上的"确定"按钮,实现一些东西,如何判断我单击的就是IDOK按钮 解决方案 MFC:如何判断非模态对话框已经创建了 解决方案二: PreTranslateMsg捕获信息 然后判断控件ID

VC 如何实现将创建的多个非模态对话框合并在一个对话框中(像QQ聊天室一样)?

问题描述 VC 如何实现将创建的多个非模态对话框合并在一个对话框中(像QQ聊天室一样)? //点击该按钮创建子窗口61 void CCDockDlgDlg::OnBtnCrtdlg() { // TODO: Add your control notification handler code here CChildDlg *dlg_Child = new CChildDlg; dlg_Child->Create(IDD_CHILD_DLG); dlg_Child->ShowWindow(SW_