mfc对话框与组件控件编程剖析

上传人:今*** 文档编号:106868648 上传时间:2019-10-16 格式:PPT 页数:39 大小:352KB
返回 下载 相关 举报
mfc对话框与组件控件编程剖析_第1页
第1页 / 共39页
mfc对话框与组件控件编程剖析_第2页
第2页 / 共39页
mfc对话框与组件控件编程剖析_第3页
第3页 / 共39页
mfc对话框与组件控件编程剖析_第4页
第4页 / 共39页
mfc对话框与组件控件编程剖析_第5页
第5页 / 共39页
点击查看更多>>
资源描述

《mfc对话框与组件控件编程剖析》由会员分享,可在线阅读,更多相关《mfc对话框与组件控件编程剖析(39页珍藏版)》请在金锄头文库上搜索。

1、,1,MFC对话框与组件控件编程,2,1、对话框编程 2、组件和ActiveX控件的使用,3,1、对话框编程,工程中加入有模式对话框 标准控件常用控件 工程中加入无模式对话框 对话框中的数据交换 使用标准对话框,4,工程中加入有模式对话框,对话框是基于资源的,资源指定其包含的元素和布局。 对话框包含最基本的窗口元素:控件 一个从CDialog类派生的MFC类完成和对话框界面的联系,5,有模式对话框:对话框关闭之前,用户无法在该程序的其它窗口中工作,如记事本中的字体对话框。 无模式对话框:对话框关闭前,用户可在其它窗口工作(但对话框在最顶端),如记事本中的替换对话框。,6,设计对话框模板 在资源

2、编辑器中插入对话框模板 在模板中添加所需控件 设置控件的各种属性 设计对话框模板时经常使用的工具(如图钉按钮,对齐,统一大小),规划对话框中的各种元素,使之美观大方,使用方便,7,生成对话框类: ClassWizard生成对话框类派生类 添加数据成员,与控件进行交互操作: 用ClassWizard定义一个与控件相关联的成员变量(可为一控件对象,也可为一数据量),可在构造函数中或OnInnitDialog函数中进行初始化 在程序运行中创建一个MFC控件的窗口对象,使用GetDlgItem方法为对话框的控件获取一个指向CWnd对象的指针 接收来自控件的BN_CLICKED等各种消息:用ClassW

3、izard添加消息映射,8,工程中加入有模式对话框步骤: 使用对话框编辑器创建对话框资源,并用ClassWizard生成派生对话框类,添加数据成员和消息映射 特殊控件初始化:程序控制 在视图中编写代码,激活对话框对象 CTestDialog dlg; if(dlg.DoModal( )IDOK) (注:在文件头加上对话框的头文件),9,有模式对话框的运行过程: 先创建对话框类实例:仅仅是一个类对象 调用DoModal函数 disable原窗口,使原窗口无法接收用户输入 创建基于对话框模板的窗口 建立自己的窗口过程:可进行消息处理 WM_INITDIALOG消息触发调用OnInitDialog,

4、进行一些对话框初始化工作 CWnd:UpdateData(FALSE) DoDataExchage,10,有模式对话框的运行过程: 用户输入数据或进行其他消息处理操作 用户单击OK按钮 OnOK UpdateData(TRUE)从控件传到数据成员 DoDataExchage Cdialog:EndDialog(IDOK),11,处理关于在使用对话框时Enter键和Escape键的处理: 在使用对话框是你会发现当你按下Enter键或Escape键都会退出对话框,这是因为Enter键会引起CDialog:OnOK()的调用,而Escape键会引起CDialog:OnCancel()的调用。而这两个

5、调用都会引起对话框的退出。 在MFC中这两个成员函数都是虚拟函数,所以我们需要进行重载,如果我们不希望退出对话框那么我们可以在函数中什么都不做。如果需要进行检查则可以添加检查代码,然后调用父类的OnOK()或OnCancel()。,12,在对话框中绘图:重载OnPaint函数 void CTestDialog:OnPaint() CPaintDC dc(this); COLORREF color=RGB(255,0,0); CPen pen(PS_SOLID,10, color); CPen* pOldPen=dc.SelectObject( ,13,标准控件常用控件,信息显示控件:如静态文本

6、、图形、树状、列表框等,用于向用户显示数据 信息请求控件:按钮、树状、列表框等,使用户能从应用程序中获取信息 信息修改控件:编辑框、单选按钮、复选框等,使用户能够修改应用程序的数据,14,标准控件(基本控件): 图形控件 静态文本 编辑框 分组框 按钮 复选框 单选按钮 组合框 列表框 横向滚动条 纵向滚动条,15,常用控件: 微调控件 进程指示器 滑块 热键 列表控件 树状控件 选项卡控件 动画控件 月历 多信息文本编辑控件 IP地址控件 日期/时间调节器 扩展组合框,16,标准控件和常用控件在MFC中都有对应的类,从CWnd类派生出来的,都具有窗口的属性,17,控件不但可以在对话框模板中设

7、计并显示,也可以脱离对话框存在 简单的控件直接在对话框中设计并简单映射成员变量和消息即可很好的使用 复杂的控件可以由GetDlgItem返回指向控件的类指针,通过该指针可以对该控件进行程序运行时操作 也可以通过这种方法运行时增加控件,18,通用窗口(CWnd)的一些用法 改变窗口状态: EnableWindowIsWindowEnabled设置查询窗口的禁止/允许状态 ModifyStyleModifyStyleEx 修改窗口风格 IsWindowVisible 可以检查窗口是否被显示 ShowWindow; (SW_HIDE,SW_SHOW等) 改变窗口位置 MoveWindow/GetWi

8、ndowRect/IsIconic/SetWindowPos 使窗口失效,印发重绘 Invalidate/InvalidateRect,19,通用窗口的一些用法 窗口查找: FindWindow/IsChild/GetParent/GetDlgItem/ GetDlgCtrlID/WindowFromPoint 可以利用重载来添加消息处理的虚函数 OnCreate/OnDestroy;窗口被创建/销毁时被调用 OnGetMinMaxInfo需要得到窗口尺寸时被调用 OnSize窗口改变大小后被调用 OnMove窗口被移动后时被调用 OnPaint( ); OnChar/OnKeyDown/On

9、KeyUp键盘字符消息 OnLButtonDown/OnRButtonDown/OnLButtonUp/OnRButtonUp/OnLButtonDblClk/OnRButtonDblClk/OnMouseMove鼠标消息,20,工程中加入无模式对话框,工程中加入无模式对话框步骤: 1)利用资源编辑器和ClassWizard创建对话框模板和对话框类 2)调用CDialog的缺省构造函数构造对象,可以将父窗口指针保存,用于发送消息 3)调用CDialog:Create(IDD)创建对话框窗口 if(pDlg-m_hWnd=NULL) pDlg-Create(IDD_TESTDIALOG); pD

10、lg-ShowWindow(SW_SHOW);,21,无模式对话框也可由函数ShowWindow 显示和隐藏,而不直接销毁窗口: pDlg-ShowWindow(SW_SHOW); pDlg-ShowWindow(SW_HIDE);,22,自定义消息: #define WM_GOODBYE WM_USER+5 手工加入消息映射 可以通过向视图发送用户定义的消息处处理按钮消息。 SendMessage(WM_GOODBYE) PostMessage(WM_GOODBYE) 触发由消息映射定义的消息处理函数。 消息是谁发送谁接收。,23,对话框中的数据交换,标准DDX (动态数据交换) DDX_T

11、ext(pDX,IDC_EDIT1,m_number); UpdateData用于保持所有DDX关联的同步 UpdateData(TRUE):数据从控件传递给相关联的成员变量 UpdateData(FALSE):数据从成员变量传递给相关联的控件,24,标准DDV (动态数据验证) DDV_MinMaxInt(pDX,m_number,1,200); 在给控件添加成员变量时可设置改变量的大小范围 也可在DoDataExchange中修改范围 它只能简单的设置,复杂的数据有效判断需编程实现,25,使用标准对话框,常用标准对话框 CColorDialog CFileDialog CFindRepla

12、ceDialog CPageSetupDialog CFontDialog CPrintDialog 等等,26,直接使用标准对话框类,如CFontDialog CFontDialog dlg; if(dlg.DoModal()=IDOK) LOGFONT lplf; dlg.GetCurrentFont( ,27,从标准对话框类中派生出新类 先从CDialog类派生出基于模板的对话框类,手工修改将基类变为CFileDialog,并修改构造函数: m_ofn.Flags |= OFN_ENABLETEMPLATE; m_ofn.lpTemplateName=MAKEINTRESOURCE (I

13、DD_SPECIALFILEDIALOG); 该类有CFileDialog的功能,也可加入自己定义的功能 控件由特殊的资源ID号得到,28,小结,常用控件有那些?对应MFC的哪一些类? 有模式对话框的创建使用? 无模式对话框的创建使用? 常用对话框有那些?,29,2、组件和ActiveX控件使用,组件和控件 组件使用 ActiveX控件使用,30,组件和控件,可重复使用的C+类: 代码准确,效率高 完整 封装性好 使用方便 Component Gallery就是一些微软所提供的可重复使用的C+类集,不一定是窗口,31,组件和控件,普通控件(标准控件和常用控件) 都是子窗口(经常在对话框中使用)

14、 通过MFC类对象操控 客户程序负责创建控件的子窗口 控件向父窗口发送标准窗口消息(BN_CLICKED) 父窗口通过调用对应控件的C+类的成员函数操作控件,32,ActiveX控件 属性和方法 属性具有符号名字(可以匹配到整型索引)和类型 方法与函数非常相似 不是向控件容器发送WM_通知消息,而是“触发”事件入单击事件 常用动态连接库存放,但其扩展名是OCX ActiveX 控件实质上也是一个DLL,只不过它需要满足COM规范,并需要提供一些ActiveX控件所需要的接口,33,组件使用,加入组件: Project-AddtoProject-Components and Controls-V

15、isual C+ Components-Splash screen VC+ IDE将自动加入一些代码: 在CEx06aApp和CMainFrame类中 重新编译连接即可 有时需要加入一些代码或对其中的一些参数代码进行修改满足应用程序的需要,34,ActiveX控件编程,ActiveX控件相当于一个封装完好的C+类 Property(属性):相当于C+类的成员变量 Method (方法) :相当于C+类的成员函数 Event (事件) :相当于Windows控件发出的notification消息,送给父窗口,通常是对话框,35,安装新ActiveX控件: 拷贝相关文件到系统目录下(*.ocx,*

16、.hlp,*.lic) 运行Regsvr32 注册 将想要的控件加到项目中:AddtoProject得到控件的C+包装类 在对话框模板中加入控件,设置属性,加入事件函数; 或者在某个类中手工加入控件类,控件资源号,程序设置属性,手工加入事件函数,36,加入Windows Media Player控件: Project-Add to Project-Compotents and Controls-Registed ActiveX Control- Windows Media Player 在非对话框窗口中使用: 在类声明一串口控件类实例,由View-Resouce Symbol添加一个新资源号 在查看类OnCreate中创建控件并初始化: m_MediaPlayer.Create(“My MediaPlay“,WS_VISIBLE,CRect(0,0,400,350),this,ID_ADDMEDIAPLAYINVIEW); 接着可进

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号