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类的更多相关文章

  1. CDialog类中OnCancel()、OnInitDialog()作用

    1.void CCOMDDlg::OnCancel() { // TODO: Add extra cleanup here CDialog::OnCancel();} 如果把CDialog::OnCa ...

  2. MFC编程入门之十三(对话框:属性页对话框及相关类的介绍)

    前面讲了模态对话框和非模态对话框,本节来将一种特殊的对话框--属性页对话框. 属性页对话框的分类 属性页对话框想必大家并不陌生,XP系统中桌面右键点属性,弹出的就是属性页对话框,它通过标签切换各个页面 ...

  3. MFC编程入门之八(对话框:创建对话框类和添加控件变量)

    创建好对话框资源后要做的就是生成对话框类了.生成对话框类主要包括新建对话框类.添加控件变量和控件的消息处理函数. 例程Addition是基于对话框的程序,所以程序自动创建了对话框模板IDD_ADDIT ...

  4. 【转】VS2010/MFC编程入门之八(对话框:创建对话框类和添加控件变量)

    原文网址:http://www.jizhuomi.com/software/153.html 前两讲中鸡啄米为大家讲解了如何创建对话框资源.创建好对话框资源后要做的就是生成对话框类了.鸡啄米再声明下, ...

  5. VS2010/MFC对话框三:创建对话框类和添加控件变量

    创建对话框类和添加控件变量 前两讲中讲解了如何创建对话框资源.创建好对话框资源后要做的就是生成对话框类了.生成对话框类主要包括新建对话框类.添加控件变量和控件的消息处理函数等. 例程Addition是 ...

  6. Visual C++中最常用的类与API函数

    这篇文章能让初学者快速了解visual C++ MFC中常见的核心的类与函数,虽然全部看下来有点枯燥,但对初学者快速了解MFC的框架结构很有好处. 常用类 CArchive类:用于二进制保存档案 CB ...

  7. VS2010/MFC编程入门之十三(对话框:属性页对话框及相关类的介绍)

    前面讲了模态对话框和非模态对话框,本节开始鸡啄米讲一种特殊的对话框--属性页对话框.另外,本套教程所讲大部分对VC++各个版本均可适用或者稍作修改即可,但考虑到终究还是基于VS2010版本的,所以将& ...

  8. VS2010/MFC编程入门之八(对话框:创建对话框类和添加控件变量)

    前两讲中鸡啄米为大家讲解了如何创建对话框资源.创建好对话框资源后要做的就是生成对话框类了.鸡啄米再声明下,生成对话框类主要包括新建对话框类.添加控件变量和控件的消息处理函数等. 因为鸡啄米给大家的例程 ...

  9. CDialog与CDialogEx的区别联系

    CDialogEx是VS2003之后出现的,VC++6.0没有.CDialogEx = CDialog ExtendExtend的意思是扩展,即扩展的CDialog! 这个类是CDialog的扩展类, ...

随机推荐

  1. 'Microsoft.VisualStudio.Editor.Implementation.EditorPackage' package did not load correctly

    Visual Studio 2012 Ultimate Removing "C:\Users\UserName\AppData\Local\Microsoft\VisualStudio\11 ...

  2. 跨域请求设置withCredentials

    最近在做运动城项目,这一个项目下面有多个子项目,如主数据项目,pos项目等.主数据项目的域名为www.topmall.com,POS项目的域名为pos.topmall.com.即两个项目的主域名相同, ...

  3. org.Hs.eg.db包简介(转换NCBI、ensemble等数据库中基因ID,symbol等之间的转换)

    1)安装载入 ------------------------------------------- if("org.Hs.eg.db" %in% rownames(install ...

  4. NavMesh KeyNote

    [NavMesh KeyNote] 1.NavMesh.CalculatePath(srcPos, desPos) 若srcPos,desPos相等,则CalculatePath返回false. 2. ...

  5. 第十章 泛型程序设计与C++标准模板库 泛型程序设计及STL的结构

  6. 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 ...

  7. Princess Principal(思维题)

    Princess Principal https://www.nowcoder.com/acm/contest/201/J 题目描述 阿尔比恩王国(the Albion Kingdom)潜伏着一群代号 ...

  8. SpringMVC入门(基于注解方式实现)

    ---------------------siwuxie095                             SpringMVC 入门(基于注解方式实现)         SpringMVC ...

  9. Maven项目标准目录结构

    -----------------------siwuxie095 Maven 项目标准目录结构 1.Maven 项目分为两种 (1)Java 项目 (2)Web 项目 2.对于 Java 项目 其中 ...

  10. PAT L2-005 集合相似度(模拟集合set)

    给定两个整数集合,它们的相似度定义为:Nc/Nt*100%.其中Nc是两个集合都有的不相等整数的个数,Nt是两个集合一共有的不相等整数的个数.你的任务就是计算任意一对给定集合的相似度. 输入格式: 输 ...