永发信息网

MFC如何创建无模式对话框a

答案:2  悬赏:10  手机版
解决时间 2021-04-26 19:11
MFC如何创建无模式对话框
最佳答案
一种次要窗口,包含按钮和各种选项,通过它们可以完成特定命令或任务。
  对话框与窗口有区别,它没有最大化按钮、没有最小化按钮、不能改变形状大小
  对话框:是人机交流的一种方式,用户对对话框进行设置,计算机就会执行相应的命令。对话框中有单选框、复选框等。
  对话框的组成
  对话框主要由两部分组成。
  对话框资源:可以使用对话框编辑器来配置对话框的界面,如对话框的大小、位置、样式,对话框中控件的类型和位置等。另外,我们还可以在程序的执行过程中动态创建对话框资源。
  对话框类:在MFC程序中,可以使用向导帮助用户建立一个与对话框资源相关联的类,通常这个类由CDialog类派生。
  对话框的类型
  对话框可以分为模式对话框和无模式对话框两种类型。
  CDialog
  为了能够方便的操作对话框,MFC为用户提供了CDialog类。它是在屏幕上显示对话框的基类,与对话框资源紧密相关,提供了管理对话框的接口,封装了一些对话框的相关操作。
  从CDialog的定义代码可以看出,Cdialog提供了两套构建Cdialog对象的系统,分别用于模式对话框和无模式对话框。
  无模式对话框对象的构建过程,它首先调用缺省的构造函数生成对话框对象,然后调用Create函数创建和初始化对话框。Cdialog类中的Create函数有两种函数原型:
  BOOL Create( LPCTSTR lpszTemplateName, CWnd* pParentWnd = NULL );
  BOOL Create( UINT nIDTemplate, CWnd* pParentWnd = NULL );
  其中,
  参数lpszTemplateName是无模式对话框模板资源的标志符;
  参数nIDTemplat是对话框模板资源的标志符,它通常以IDD_开头(例如IDD_DIALOG1);
  参数pParentWnd是指向对话框对象所属的父窗口的指针(如果它为NULL,则表示对话框对象的父窗口是应用程序主窗口)。如果希望对话框中它的父窗口创建后马上被显示,就必须把对话框模板设置为WS_VISIBLE形式。否则,需要调用ShowWindow函数来显示对话框。
  对于模式对话框,其构造函数如下所示:
  CDialog( LPCTSTR lpszTemplateName, CWnd* pParentWnd = NULL );
  CDialog( UINT nIDTemplate, CWnd* pParentWnd = NULL );
  构造函数的参数说明与无模式对话框的Create函数类似。在模式对话框中,当创建了对话框对象后,可以通过调用DoModal函数来显示对话框。
  一般情况下,无论是模式对话框还是无模式对话框,都有两个按钮OK和CANCEL。对话框为它们提供了默认的消息处理函数OnOk和OnCancel。调用这两个函数都将关闭对话框。所不同的是,默认的OnOk函数中关闭对话框前将更新对话框数据,而默认的OnCancel函数不更新对话框数据。
  当CDialog类检测到OK或Cancel键时,它将调用::EndDialog函数。EndDialog函数虽然结束了对话框应用程序,但却并没有删除对话框对象,释放内存。这对于模式对话框来说,不是问题,它的生存时间不长,我们一般在栈上创建它们;但无模式对话框则不同,它的生存时间更长,我们通常在栈上创建它们,并且希望它在消失之前能够删除自己。因此,大多数情况下,我们需要在无模式对话框中重载OnOK和OnCancel函数,加入DestroyWindows函数来彻底地删除它。
  对话框数据交换和验证机制
  在VC中,所有的对话框函数都是使用C++代码实现的,它并没有采用特殊的资源或“奇特”的宏,但却可以很好地实现用户与应用程序之间的交互工作,这里的关键就在于对话框应用程序中广泛采用的对话框数据交换和验证机制。
  对话框数据交换(DDX,Dialog Data Exchange)用于初始化对话框中的控件并获取用户的数据输入,而对话框数据验证(DDV,Dialog Data Validation)则用于验证对话框中数据输入的有效性。MFC在每个对话框类中提供了一个用于重载的虚函数——DoDataExchange来实现对话框数据交换和验证工作。
  对话框数据交换
全部回答
1、首先创建对话框模板资源 2、从CDialog类派生自己的无模式对话框类:CModelessDlg 3、在合适的位置动态创建(new)CModelessDlg的对象:pDlg 4、调用pDlg的Create函数创建无模式对话框 5、调用pDlg的ShowWindow函数显示无模式对话框; 6、覆盖OnOK和OnCancel函数,执行DestroyWindow函数销毁无模式对话框 7、覆盖PosNcDestroy函数,执行delete this;
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
我的声音和音频测试说话很不清楚,为什么?
最近为什么有那么为了空间人气的死骗子
曹操傳青州之战
使用酷点桌面为什么开始里面的东西没有改变
求助汽车大神。这车什么车,多少钱?
南三条金正商贸广场北门在什么地方啊,我要过
游鱼与飞鸟传说概括
梦B是什么意思?
DN箭神连招怎么完美使用
问道法宝,金蛟剪 和阴阳镜哪个好用?
R软件的全局变量怎么定义
想开一个饰品店
谁知道矫正牙齿最便宜得花多少钱?只是上排牙
伊香源饭馆地址在哪,我要去那里办事
我手机的系统坏的了,刷机可以刷好的吗?
推荐资讯
请问燕子是什么意思? ,
速求辩论赛资料,我方观点:网络的娱乐性大于
一本书共有x页,第一天读了全书的1/2,第二天
等待最后等到的就只会是失望吗
当一个女孩和一个男孩有了孩子,但女方家的父
搜,不要情歌,要几首较好听的不是情歌的新歌
微信提现到底多久到账,猪八戒威客里面的钱要
用PQ分区完了为什么系统做不进去
、熱血英豪甚麼時候會開新區?
怎么样给别人过个有创意的生日?
男方订婚 想退婚是不是要给女方家很多钱?
dnf剑魂技能必须加满的有?
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?