CDialog类
CDilalog包含三个关键函数:OnInitDialog、OnOK和OnCancel,可以覆盖这三个函数初始化对话框、响应点击OK和Cancel按钮。尽管每个函数都响应一条对话框消息,但是不需要你提供消息映射,因为CDialog已经做了消息映射,并把它们视为一般的虚函数。CDialog还提供了这三个函数的默认实现,如果充分利用MFC的对话框数据交换机制和验证机制,就不必覆盖它们。
对话框创建后,它会收到一条WM_CREATE消息。但是 WM_CREATE到达时,对话框模板上指定的控件还没有被创建,因此,不能被初始化。对话框是空的。Windows用来处理对话框消息的内部窗口过程响 应WM_CREATE时创建对话框的控件。控件创建后,对话框收到WM_INITDIALOG消息,使得对话框有机会进行必要的初始化,包括初始化控件。 在CDialog派生类中,WM_INITDIALOG激活对话框的OnInitDialog函数,它的原型是:
- virtual BOOL OnInitDialog ()
OnInitDialog是对话框工作前作必要准备的地方,例如:选择单选按钮或在编辑控件插入文本。该函数一被调用,对话框就存在于内存中,只是在屏幕上不可见。用户无法知道在OnInitDialog中做了什么,但是将会看到结果。
OnInitDialog的返回值告诉Windows如何处理输 入焦点。如果返回TRUE,Windows按照tab顺序使第一个控件具有输入焦点。如果想让其它控件具有输入焦点,可以在OnInitDialog中调 用控件的SetFocus函数,并返回FALSE,阻止Windows设置输入焦点。可以这样设置输入焦点:
- GetDlgItem (IDC_EDIT)->SetFocus ();
如果覆盖了OnInitDialog,就应该调用基类的OnInitDialog函数。原因稍后讲解。
用户点击OK按钮时,对话框收到WM_COMMAND消息,报告按钮被单击,MFC就调用对话框的OnOK虚函数。为了使这种机制可以工作,必须使OK按钮的ID值等于IDOK,例如下面的资源语句:
- DEFPUSHBUTTON "OK", IDOK, 60, 34, 40, 24, WS_GROUP
如果要在对话框关闭前进行特殊的处理,可以覆盖OnOK函数,这可能包含数据交换和数据验证。如果覆盖了OnOK,必须调用EndDialog或基类的OnOK函数销毁对话框。否则,点击OK按钮时,对话框不会消失。
点击Cancel按钮时如果要调用OnCancel,它的ID就 必须等于IDCANCEL。即使对话框中没有Cancel按钮,按下Esc键或标题栏上的关闭按钮都会调用OnCancel。通常不会覆盖 OnCancel,因为改变被取消后,无需从控件读取数据。CDialog::OnCancel使用IDCANCEL参数调用EndDialog销毁对话 框,并通知用户应该忽略控件的改变。
除了WM_INITDIALOG消息(该消息是对话框特有的),对话框接收的消息和窗口接收的消息相同。可以使用消息映射将这些消息映射到对话框类的成员函数。例如:
- ON_BN_CLICKED (IDC_RESET,OnReset)
点击ID值等于IDC_RESET的按钮时,就会调用OnReset。
对话框甚至可以处理WM_PAINT消息。因为控件可以重画自身,多数对话框不需要OnPaint。
CDialog类的更多相关文章
- CDialog类中OnCancel()、OnInitDialog()作用
1.void CCOMDDlg::OnCancel() { // TODO: Add extra cleanup here CDialog::OnCancel();} 如果把CDialog::OnCa ...
- MFC编程入门之十三(对话框:属性页对话框及相关类的介绍)
前面讲了模态对话框和非模态对话框,本节来将一种特殊的对话框--属性页对话框. 属性页对话框的分类 属性页对话框想必大家并不陌生,XP系统中桌面右键点属性,弹出的就是属性页对话框,它通过标签切换各个页面 ...
- MFC编程入门之八(对话框:创建对话框类和添加控件变量)
创建好对话框资源后要做的就是生成对话框类了.生成对话框类主要包括新建对话框类.添加控件变量和控件的消息处理函数. 例程Addition是基于对话框的程序,所以程序自动创建了对话框模板IDD_ADDIT ...
- 【转】VS2010/MFC编程入门之八(对话框:创建对话框类和添加控件变量)
原文网址:http://www.jizhuomi.com/software/153.html 前两讲中鸡啄米为大家讲解了如何创建对话框资源.创建好对话框资源后要做的就是生成对话框类了.鸡啄米再声明下, ...
- VS2010/MFC对话框三:创建对话框类和添加控件变量
创建对话框类和添加控件变量 前两讲中讲解了如何创建对话框资源.创建好对话框资源后要做的就是生成对话框类了.生成对话框类主要包括新建对话框类.添加控件变量和控件的消息处理函数等. 例程Addition是 ...
- Visual C++中最常用的类与API函数
这篇文章能让初学者快速了解visual C++ MFC中常见的核心的类与函数,虽然全部看下来有点枯燥,但对初学者快速了解MFC的框架结构很有好处. 常用类 CArchive类:用于二进制保存档案 CB ...
- VS2010/MFC编程入门之十三(对话框:属性页对话框及相关类的介绍)
前面讲了模态对话框和非模态对话框,本节开始鸡啄米讲一种特殊的对话框--属性页对话框.另外,本套教程所讲大部分对VC++各个版本均可适用或者稍作修改即可,但考虑到终究还是基于VS2010版本的,所以将& ...
- VS2010/MFC编程入门之八(对话框:创建对话框类和添加控件变量)
前两讲中鸡啄米为大家讲解了如何创建对话框资源.创建好对话框资源后要做的就是生成对话框类了.鸡啄米再声明下,生成对话框类主要包括新建对话框类.添加控件变量和控件的消息处理函数等. 因为鸡啄米给大家的例程 ...
- CDialog与CDialogEx的区别联系
CDialogEx是VS2003之后出现的,VC++6.0没有.CDialogEx = CDialog ExtendExtend的意思是扩展,即扩展的CDialog! 这个类是CDialog的扩展类, ...
随机推荐
- 'Microsoft.VisualStudio.Editor.Implementation.EditorPackage' package did not load correctly
Visual Studio 2012 Ultimate Removing "C:\Users\UserName\AppData\Local\Microsoft\VisualStudio\11 ...
- 跨域请求设置withCredentials
最近在做运动城项目,这一个项目下面有多个子项目,如主数据项目,pos项目等.主数据项目的域名为www.topmall.com,POS项目的域名为pos.topmall.com.即两个项目的主域名相同, ...
- org.Hs.eg.db包简介(转换NCBI、ensemble等数据库中基因ID,symbol等之间的转换)
1)安装载入 ------------------------------------------- if("org.Hs.eg.db" %in% rownames(install ...
- NavMesh KeyNote
[NavMesh KeyNote] 1.NavMesh.CalculatePath(srcPos, desPos) 若srcPos,desPos相等,则CalculatePath返回false. 2. ...
- 第十章 泛型程序设计与C++标准模板库 泛型程序设计及STL的结构
- cdoj第13th校赛初赛A - AC Milan VS Juventus 【枚举】
http://acm.uestc.edu.cn/#/contest/show/54 A - AC Milan VS Juventus Time Limit: 3000/1000MS (Java/Oth ...
- Princess Principal(思维题)
Princess Principal https://www.nowcoder.com/acm/contest/201/J 题目描述 阿尔比恩王国(the Albion Kingdom)潜伏着一群代号 ...
- SpringMVC入门(基于注解方式实现)
---------------------siwuxie095 SpringMVC 入门(基于注解方式实现) SpringMVC ...
- Maven项目标准目录结构
-----------------------siwuxie095 Maven 项目标准目录结构 1.Maven 项目分为两种 (1)Java 项目 (2)Web 项目 2.对于 Java 项目 其中 ...
- PAT L2-005 集合相似度(模拟集合set)
给定两个整数集合,它们的相似度定义为:Nc/Nt*100%.其中Nc是两个集合都有的不相等整数的个数,Nt是两个集合一共有的不相等整数的个数.你的任务就是计算任意一对给定集合的相似度. 输入格式: 输 ...