Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1469367
  • 博文数量: 218
  • 博客积分: 6394
  • 博客等级: 准将
  • 技术积分: 2563
  • 用 户 组: 普通用户
  • 注册时间: 2008-02-08 15:33
个人简介

持之以恒

文章分类

全部博文(218)

文章存档

2013年(8)

2012年(2)

2011年(21)

2010年(55)

2009年(116)

2008年(16)

分类: WINDOWS

2009-07-25 10:31:07

对话框的学习

         分成两种模态和非模态

模态对话框的创建

         创建一个对话框模板

         构造一个CDialog对象,并封装该对话框的模板

         调用CDialog::DoModal显示对话框

WM_CREATE

         创建对话框内的相应的控件,以便进行初始化

WM_INITDIALOG    OnInitDialog()

         初始化相应的控件

设置焦点:SetFocus(),一般是这样调用的GetDlgItem(int nID)->SetFoucs()

         关于DoModal的返回值的利用的问题:

默认的情况下,DoModal的返回值只有两个就是IDOKIDCANCEL,可以编写自己的对话框类返回其他的值

         EndDialog(ReturnValue);

对话框的数据交换和数据校验

         建立相关控件和成员变量的映射表DDX

        DDV数据校验机制

无模式对话框

         两者之间的主要的区别:

         显示模态对话框需要调用DoModal(清除的时候进行返回),而显示无模态对话框则需要调用CDilalog::Create(创建后就要进行返回)

         清除非模态对话框要调用DestoryWindow而不是调用EndDialog,禁止对非模态对话框调用CDialog::OnOK或者是CDialog::OnCancel(),因为两者都调用EndDialog()

         模态对话框是在栈上进行相应的初始化,所以进行自动的析构,非模态对话框通过new来进行创建,所以该对话框不会被过早的清除。

         删除非模态对话框对象的一种方法是在在派生的对话框中覆盖CDialog::PostNcDestory,并执行Delete this;语句

1.       new Dialog

2.       设定相应的参数

3.       调用相应的Create方法

4.       调用ShowWindow(SW_)

UpdateData(TRUE)函数

关于OnCommand(WPARAM wParam,LPARAM lParam);

此函数完成了对菜单、通告消息或加速键的响应处理

在菜单或工具条上按下某项,(或按了对应的热键)将向窗口发送一个WM_COMMAND消息

为什么要提这个功能,因为在指定命令的响应函数时,是具体到某一个类中,比如在view类中增加一个对菜单项的响应函数,此时某个菜单项的响应和处理就是在view类的范围中进行处理的。
 在消息的路由中,只要中view类的上层中没有处理相应菜单项的函数,就会默认路由到view中,所以这就有了OnCommand这个函数的需求。可以在view类的上层进行动态的处理。

它是命令响应函数。在32位系统中 lParam 中存在的是句柄 HWND hwnd=(HWND)lParam;

        wParam 低位是命令ID 高位是代码

        UINT ID=HIWORDwParam);

        int code=LOWORD(wParam);

        如果是加速键code=1 其他的code=0

关于OnCommand()OnCmdMsg()

首先,OnCommand()是在CWnd类中的,而OnCmdMsg()是在CCmdTarget类中的。你如果看了MFC的类的继承图的话,你就会知道CWnd是从CCmdTarget类中继承的。

OnCommand()主要是用来处理消息(控件,菜单,加速键)的;而OnCmdMsg(   )主要是用来处理消息的路由的。

阅读(732) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~