mfc 子窗体 按钮不触发_实战经验:MFC非模态对话框的使用

问题

在MFC编程中,我们经常会使用到模态对话框,模态对话框的一个典型特征是当对话框弹出后,其父窗口将不接受任何UI响应,直到关闭当前的模态对话框后才能继续。然而,非模态对话框就没有这个限制,今天我们就来讲讲如何在MFC中使用非模态对话框。

Step by step

1) 在VS的资源管理器中新建一个对话框资源。

c4dd79eca761f5070e31274d5f027bcd.png

2) 为这个对话框新建对话框类,这里将对话框类命名为CTestDlg。

4496c10d259456394ba5cc9a8830b12c.png

3) 对话框资源及对话框类创建好之后,需要在父窗口类中定义一个指向对话框对象的指针。例如,我们的对话框类名为CTestDlg,那么我们就需要在父窗口类中定义一个CTestDlg指针。

b6ab13c966e702364e54555d4f197338.png

4) 在父窗口类的构造函数中初始化m_pTestDlg为空。

5) 创建并显示非模态对话框。

e972d03ca722eacbb4b4b3f2f48671b1.png

6) 对话框关闭并销毁

对话框的关闭:

可以使用DestroyWindow函数实现。

fdb646ee9570ee5708ac18b7f2f2ad9d.png

对话框的销毁:

由于对话框是动态在堆内存上创建的,当我们不再使用到这个对话框后,我们需要手动销毁对话框并释放内存,否则会造成内存泄漏。方法如下:重写CTestDlg的PostNcDestroy虚函数,其函数实现为delete this,也即在非模态对话框窗口销毁之后,自动释放对话框对象的内存。

f1badedbe22583298b91257cd0f8f702.png

7) OnOK和OnCancel的处理

当用户在对话框上点击OK按钮或者敲击回车,系统会自动调用OnOK虚函数。当用户在对话框上点击Cancel按钮或者敲击ECS,系统会自动调用OnCancel虚函数,如果我们需要在这些事件发生时做一些自定义处理,则可以重写这两个虚函数。

9903f8172171cb965c0c7f849d72e956.png

8) WM_SIZE消息处理

当对话框上有子控件时,我们需要映射对话框的WM_SIZE消息并编写子控件的自适应代码。

a5c33f836e3590bb0137396fb429fc0e.png

9) 客户区拖动

当我们希望用户通过拖动对话框的客户区来改变对话框的位置时,可以重写OnNcHitTest方法。

ab8ac0de6ca05a7828c87b520f54da92.png

总结

今天主要讲解了如何使用MFC中的模块对话框,有了这个技能,就可以做出一些比较有意思的界面了。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值