对话框主要分为两个类型,即模式对话框和非模式对话框。当模式对话框弹出后,无法操作它的父窗口或者上一级窗口,直到关闭该对话框为止。图4-3 插入对话框资源用于测试模式对话框图4-4 修改对话框的外观和属性5)选中编辑好的对话框资源,执行View→ClassWizard命令,或按快捷键<Ctrl+W>打开类向导。图4-8 查看运行结果单击“关于”按钮弹出关于对话框,在关闭关于对话框前,主对话框是不可以操作的,这就是模式对话框的特点。......
2023-11-25
当用户单击对话框标题栏上的关闭按钮后,可能顺次发生的回调包括WM_SYSCOMMAND消息、WM_CLOSE消息、CDialog::OnCancel虚函数和WM_DESTROY消息等。
当用户单击一个系统菜单项,或者单击最大化按钮、最小化按钮、还原按钮或关闭按钮时,窗口将会接收到系统命令消息WM_SYSCOMMAND。在WM_SYSCOMMAND消息或者CWnd::OnSysCommand函数的MSDN说明中,可以了解到所有系统命令更详细的信息。
单击标题栏上的关闭按钮或系统菜单的“关闭”菜单项,或者按快捷键<Alt+F4>等事件,窗口首先接收到WM_SYSCOMMAND消息。在WM_SYSCOMMAND消息映射函数中编写代码,可以实现当单击系统关闭按钮时最小化或者隐藏窗口的功能。
打开第1节建立的“Test”工程,本节继续演示对话框关闭过程的回调函数。
1)在类视图中的主对话框类上单击鼠标右键,在弹出的快捷菜单中,选择“Add Windows Message Handler”命令,如图4-19所示。
图4-19 添加WM_SYSCOMMAND消息映射函数
在右下角的消息筛选器“Filter for message available to”中,选择“Window”代表显示所有窗口类支持的消息。在左边列表中选中WM_SYSCOMMAND消息,再单击“Add Handler”按钮或者直接双击该列表项,添加对应的消息映射函数OnSysCommand。
2)单击“Edit Existing”按钮,编辑系统命令消息映射函数代码。
3)编译并运行,测试程序。
当单击系统关闭菜单或按钮,或者按<Alt+F4>组合键都不能关闭对话框,对话框不是真正地关闭而只是最小化了。在掌握托盘图标技术以后,通过修改以上回调函数代码,还可以将窗口隐藏为一个托盘图标。
4)WM_CLOSE消息。
WM_CLOSE消息就是WM_SYSCOMMAND消息在接收SC_CLOSE时的分支消息,或者说WM_CLOSE消息是专门用于接收系统命令中的关闭命令的消息。使用WM_CLOSE消息代替WM_SYSCOMMAND消息,处理单击系统关闭按钮时最小化或者隐藏窗口就更容易了。
5)在类视图中的主对话框类上单击鼠标右键,在弹出的快捷菜单中,选择“Add Windows Message Handler”命令,如图4-20所示。
图4-20 添加WM_CLOSE消息映射函数
在左边列表中选中WM_CLOSE消息再单击“Add Handler”按钮,或者直接双击WM_CLOSE添加对应的消息映射函数OnClose。
6)单击“Edit Existing”按钮,编辑消息函数代码。
7)编译并运行,测试程序。
使用OnClose代替OnSysCommand函数,实现关闭时最小化窗口的功能更容易。
8)OnOK和OnCancel函数。
这两个函数一般只在对话框窗口中回调,回调的原因是单击IDOK和IDCANCEL按钮时发出了WM_COMMAND消息。除此以外,在对话框窗口中按<Esc>键时OnCancel函数会发生回调;当焦点在非按钮类型的控件上时,在对话框窗口中按<Enter>键时OnOK函数会发生回调。
9)在对话框资源中双击IDOK或IDCANCEL按钮,可以建立消息映射函数,如图4-21所示。
10)在类视图中的一个对话框类上单击鼠标右键,在弹出的快捷菜单中,选择“Add Member Function”命令,建立普通类成员函数,如图4-22所示。(www.chuimin.cn)
图4-21 添加OnOK或OnCancel回调函数
图4-22 添加OnOK或OnCancel成员函数
11)在函数类型中填写void,在函数声明中填写函数名OnOK,不带参数,如图4-23所示。
图4-23 添加普通类成员函数
12)单击“OK”按钮生成按钮的消息映射函数。
13)编译运行并测试代码。
分别按<Esc>键,按快捷键<Alt+F4>,单击系统关闭按钮,单击“OK”或“Cancel”按钮进行测试。
14)WM_DESTROY消息。
WM_DESTROY的消息映射函数是OnDestroy函数,这个函数对比以上所有回调函数,是最晚接收到的回调函数。所有以上其他回调函数都发生在对话框消失之前,并且可以取消继续关闭对话框窗口。当窗口已经从视野消失后,OnDestroy回调函数才到达,而且此时已经不再可以取消窗口的关闭过程了。
15)在对话框模板上单击鼠标右键,在弹出的快捷菜单中,选择“Events”命令,弹出简易消息管理器,如图4-24所示。
图4-24 打开消息映射管理器
16)选中WM_DESTROY,单击“Add Handler”按钮,或者直接双击该消息,如图4-25所示。
图4-25 添加WM_DESTROY消息映射函数
17)单击“Edit Existing”按钮,编辑消息映射函数代码。
18)编译运行并测试代码。当对话框已经消失后,OnDestroy函数代码才被执行。
总结以上内容,关闭对话框消息的流程如图4-26所示。
图4-26 关闭对话框消息的流程
有关VC++就业培训宝典之MFC视频教程的文章
对话框主要分为两个类型,即模式对话框和非模式对话框。当模式对话框弹出后,无法操作它的父窗口或者上一级窗口,直到关闭该对话框为止。图4-3 插入对话框资源用于测试模式对话框图4-4 修改对话框的外观和属性5)选中编辑好的对话框资源,执行View→ClassWizard命令,或按快捷键<Ctrl+W>打开类向导。图4-8 查看运行结果单击“关于”按钮弹出关于对话框,在关闭关于对话框前,主对话框是不可以操作的,这就是模式对话框的特点。......
2023-11-25
图5-1 插入新对话框资源图5-2 编辑登录对话框3)添加一些控件并修改控件的属性,见表5-1。表5-1 “登录”对话框的控件属性4)在“登录”对话框上单击鼠标右键,在弹出的快捷菜单中,选择“ClassWizard”命令,或按快捷键<Ctrl+W>,如图5-3所示。图5-3 打开类向导图5-4 创建登录对话框的关联类6)在登录对话框资源中双击“登录”按钮,建立消息映射函数OnOK并编写代码。......
2023-11-25
打开本章第1节建立的“Test”工程,本节继续演示非模式对话框的调用过程。1)通过菜单命令或者按快捷键<Ctrl+1>再插入一个对话框,用于测试非模式对话框,如图4-9所示。7)非模式对话框的特点如下。①在关闭模式对话框前,不阻挡对背景窗口的操作。②使用CDialog::Create函数创建非模式对话框,该函数是非阻塞函数。......
2023-11-25
通过MSDN的说明可以查看到,WM_CREATE和WM_INITDIALOG都是窗口刚创建时的回调消息,当窗口还未显示出来之前,对窗口作预先处理的回调函数。WM_CREATE是所有窗口通用的创建时回调消息,用于包括对话框、MDI或者SDI等任何窗口的初始化,对应的消息映射函数是OnCreate。WM_INITDIALOG对话框是对话框专用消息,最常用来初始化对话框及其内部控件,对应的消息映射函数是OnInitDialog。打开第1节建立的“Test”工程,本节继续演示对话框启动过程的回调函数。......
2023-11-25
打开本章第1节建立的“QQ”工程,本节继续演示账号及权限管理与登录对话框的组合。表5-2 “权限管理”对话框的控件属性4)通过类向导为IDD_PRIOR_DLG建立一个对话框类“CPriorDlg”,如图5-8所示。12)在权限管理对话框中,分别双击增、删、改的3个按钮,建立消息映射函数。登录成功后进入主对话框单击“权限管理”按钮,进入“权限管理”对话框添加一些账户信息,然后使用新添加的账户重新登录,如图5-16所示。......
2023-11-25
CBrush类的主要成员见表7-4。表7-4 CBrush类的主要成员1)用于填充的阴影线风格主要包括以下几种。创建一个工程名为“Brush”的对话框程序,用于演示选用不同画刷进行绘画的效果。2)在资源视图中,单击鼠标右键,在弹出的快捷菜单中,选择“Import”命令导入位图,如图7-16所示。图7-19 查看运行结果CBrush类构造函数与CreateSolidBrush和CreateHatchBrush等函数的功能基本一样,都可以用于创建一个画刷。一般当使用新画刷绘画结束后,最好恢复选择回旧画刷。......
2023-11-25
在本章第5节中,通过“Win32 Application”建立的MFC32工程,目的是为了演示MFC工程的架构原理。一个MFC工程必须包含一个CWinApp的派生类,并定义一个派生类的全局变量theApp,最后重写InitInstance虚函数用于处理进程启动过程。本节直接通过“MFC AppWizard”来创建MFC工程,用于对照以上说明的MFC必备因素。图3-54 程序向导生成的代码图3-55 MFC类向导在Class name下拉列表中选择CTestMFCDlg类,在Member functions列表框中显示4个已添加的回调函数。......
2023-11-25
标签控件,又称选项卡控件。很多软件的用户资料注册部分是采用注册向导模式,而用户资料修改则采用标签控件管理模式。打开本章第3节建立的“usd”工程,本节继续演示采用标签控件来管理多个分页。1)新插入一个对话框资源,作为使用标签控件进行分页管理的父窗口,如图9-20所示。6)添加标签控件的TCN_SELCHANGE消息反射函数OnSelchangeTab,如图9-22所示。图9-24 查看运行结果单击“修改”按钮或者双击列表选项,就会打开带标签控件的修改资料的对话框。......
2023-11-25
相关推荐