VC----MFC对话框(1)

 在正式开始对话框的学习之前,先简单看一看菜单的操作。一个窗口具有一个菜单区,如“文件”、“编辑”、“查看”等。在MFC中编辑菜单时,我们主要使用其中的资源选项。新建一个名为menu的单文档项目,在其资源选项中找到IDR_MAINFRAME即为当前菜单的资源,选中后VS2008的最右侧会显示其属性信息:Caption表示其显示的内容,Popup为真说明其为弹出式菜单,弹出式菜单无法添加事件消息的相应。菜单的高级操作如图形标记、动态菜单等今天不会过多涉及,因为这些内容属于应用性的技术,需要的时候拿来资料一查就会用了。这里对于菜单只说明三点:一是懂的如何添加新的菜单,如何为添加的菜单添加绑定事件相应行为;二是了解MFC中各个组成类间的菜单出发事件的响应顺序;三是了解MFC资源的ID命名规则。
     在窗口上菜单触发事件时,按照以下顺序进行相应:View类-->Doc类-->Frame类-->App类;
     MFC的资源ID命名通常是:ID+类型+名称,如IDM表示菜单资源(menu),IDC表示光标资源(Cursor),IDI表示图标资源(Icon)等;
     我们添加一个菜单,绑定事件弹出对话框:


      关于菜单就先说这么多了,以后有需要的时候再来查阅资料吧。接下来是比较重要的对话框的设计。对话框属于一种特殊的控件,而所有的控件都是由CWnd类派生而来,因此对话框其实是一种特殊的窗口。对话框的作用在于接受用户输入数据,然后处理之后将结果呈现给用户。对话框可以分为两类:
1. 模态对话框:简单来说就是弹出该对话框时程序卡在该处,无法对用户的其他操作进行响应,如word程序的“查找”操作;
2. 非模态对话框:弹出对话框后程序继续运行,可以响应用户的其他操作,如文本程序的“查找”对话框;
     就我自己而言,当然更加喜欢可以实时响应用户的非模态对话框了。我们可以直接创建一个对话框,也可以在一个单文档MFC上添加一个对话框,这里使用第二种,新建一个单文档MFC:MyTest,而后在项目中选择“添加资源”,选择Dialog,“新建”即可得到一个对话框:



     接下来可以查看该对话框,在资源模式下的Dialog下可以看到IDD_DIALOG1,这是MFC为我们提供的默认ID,双击后可以查看属性,VS2008不能在属性中直接修改对话框的名字了,需要在初始化中使用函数实现。在MFC中,所有针对资源的操作都是通过与其关联的类实现的,为了操作IDD_DIALOG1,我们需要新建一个CDialog的子类,双击对话框,即可弹出类的添加向导,输入CTestDlg,OK之后MFC就自动添加了相应的函数和声明,生成了CTestDlg的cpp和.h文件。为了使得我们点击菜单时能够弹出对话框,我们需要为新的菜单设置事件响应绑定,方法同开始讲述的部分。MFC会自动生成添加OnDialog函数,我们需要在其中添加响应的动作代码:

点击(此处)折叠或打开

  1. void CMyTestView::OnDialog()
  2. {
  3.     //模态对话框的创建
  4.     CTestDlg dlg;
  5.     dlg.DoModal();

  6.     // TODO: 在此添加命令处理程序代码
  7. }
      我们首先创建一个资源对象dlg,而后调用其成员函数DoModal实现模态对话框的创建与显示,注意此时的菜单都是灰色不可用的:

     如果想创建一个非模态的对话框,需要注意以下几点:
1. 模态对话框不需要考虑成员生存期问题,因为程序是卡在一点暂停执行的;而对于非模态对话框,需要将dlg设置成更长的生存期,一种方案是添加为CMyTestView类的成员变量,另一种则是声明为指针利用动态分配写入堆内存,而堆内存也是程序的最后才释放的,这时在相应的析构函数中也要添加delete pDlg;
2. 模态函数DoModal()负责创建和显示对话框,非模态则需要Create和ShowWindow两个函数来完成任务;
     好了,我们来看看非模态的代码:

点击(此处)折叠或打开

  1. void CMyTestView::OnDialog()
  2. {
  3.     //模态对话框的创建
  4.     //CTestDlg dlg;
  5.     //dlg.DoModal();

  6.     //非模态对话框的创建
  7.     CTestDlg *pDlg = new CTestDlg;
  8.     pDlg->Create(IDD_DIALOG1, this);
  9.     pDlg->ShowWindow(SW_SHOW);

  10.     // TODO: 在此添加命令处理程序代码
  11. }
      我们运行一下程序,可以看到弹出对话框的同时菜单栏都是黑色可选的:
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值