版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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/GetWindowRec
8、t/IsIconic/SetWindowPos 使窗口失效,印发重绘 Invalidate/InvalidateRect,19,通用窗口的一些用法 窗口查找: FindWindow/IsChild/GetParent/GetDlgItem/ GetDlgCtrlID/WindowFromPoint 可以利用重载来添加消息处理的虚函数 OnCreate/OnDestroy;窗口被创建/销毁时被调用 OnGetMinMaxInfo需要得到窗口尺寸时被调用 OnSize窗口改变大小后被调用 OnMove窗口被移动后时被调用 OnPaint( ); OnChar/OnKeyDown/OnKeyUp键盘
9、字符消息 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); pDlg-Show
10、Window(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_Text(pDX
11、,IDC_EDIT1,m_number); UpdateData用于保持所有DDX关联的同步 UpdateData(TRUE):数据从控件传递给相关联的成员变量 UpdateData(FALSE):数据从成员变量传递给相关联的控件,24,标准DDV (动态数据验证) DDV_MinMaxInt(pDX,m_number,1,200); 在给控件添加成员变量时可设置改变量的大小范围 也可在DoDataExchange中修改范围 它只能简单的设置,复杂的数据有效判断需编程实现,25,使用标准对话框,常用标准对话框 CColorDialog CFileDialog CFindReplaceDialo
12、g 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 (IDD_SPEC
13、IALFILEDIALOG); 该类有CFileDialog的功能,也可加入自己定义的功能 控件由特殊的资源ID号得到,28,小结,常用控件有那些?对应MFC的哪一些类? 有模式对话框的创建使用? 无模式对话框的创建使用? 常用对话框有那些?,29,2、组件和ActiveX控件使用,组件和控件 组件使用 ActiveX控件使用,30,组件和控件,可重复使用的C+类: 代码准确,效率高 完整 封装性好 使用方便 Component Gallery就是一些微软所提供的可重复使用的C+类集,不一定是窗口,31,组件和控件,普通控件(标准控件和常用控件) 都是子窗口(经常在对话框中使用) 通过MFC类
14、对象操控 客户程序负责创建控件的子窗口 控件向父窗口发送标准窗口消息(BN_CLICKED) 父窗口通过调用对应控件的C+类的成员函数操作控件,32,ActiveX控件 属性和方法 属性具有符号名字(可以匹配到整型索引)和类型 方法与函数非常相似 不是向控件容器发送WM_通知消息,而是“触发”事件入单击事件 常用动态连接库存放,但其扩展名是OCX ActiveX 控件实质上也是一个DLL,只不过它需要满足COM规范,并需要提供一些ActiveX控件所需要的接口,33,组件使用,加入组件: Project-AddtoProject-Components and Controls-Visual C
15、+ Components-Splash screen VC+ IDE将自动加入一些代码: 在CEx06aApp和CMainFrame类中 重新编译连接即可 有时需要加入一些代码或对其中的一些参数代码进行修改满足应用程序的需要,34,ActiveX控件编程,ActiveX控件相当于一个封装完好的C+类 Property(属性):相当于C+类的成员变量 Method (方法) :相当于C+类的成员函数 Event (事件) :相当于Windows控件发出的notification消息,送给父窗口,通常是对话框,35,安装新ActiveX控件: 拷贝相关文件到系统目录下(*.ocx,*.hlp,*.
16、lic) 运行Regsvr32 注册 将想要的控件加到项目中:AddtoProject得到控件的C+包装类 在对话框模板中加入控件,设置属性,加入事件函数; 或者在某个类中手工加入控件类,控件资源号,程序设置属性,手工加入事件函数,36,加入Windows Media Player控件: Project-Add to Project-Compotents and Controls-Registed ActiveX Control- Windows Media Player 在非对话框窗口中使用: 在类声明一串口控件类实例,由View-Resouce Symbol添加一个新资源号 在查看类OnC
17、reate中创建控件并初始化: m_MediaPlayer.Create(My MediaPlay,WS_VISIBLE,CRect(0,0,400,350),this,ID_ADDMEDIAPLAYINVIEW); 接着可进行初始化:相当于在对话框模板中设置属性,37,可通过该对象调用相关的函数: m_MediaPlayer.Open(PathName),38,可手工加入事件映射(类似于消息映射),如不知道具体参数,可参考ClassWizard: /View类头文件中加入 afx_msg void OnEndOfStreamMediaplayer1(long Result); DECLARE_EVENTSINK_MAP() /View类实现文件中加入 BEGIN_EVENTSINK_MAP(CEx06aView, CView) ON_EVENT(CEx06aView, ID_ADDMEDIAPLAYINVIEW, 3002
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 《材料成型计算机辅助设计A》教学大纲
- 玉溪师范学院《西方哲学史》2022-2023学年第一学期期末试卷
- 华师版反比例函数新课教案
- 2024年车装石油修井机项目成效分析报告
- 《黑神话:悟空》2025高中物理练习题含答案
- 2024届河北省石家庄二中润德学校高三下学期第一次联合模拟考试数学试题
- 2024届海南省鲁迅中学第二学期高三年级期末质量检测试题数学试题
- 2024届广西南宁市马山县金伦中学高三下学期3月月考数学试题
- 采购合同管理重点工作方案设计
- 保证无挂靠协议书
- 数字孪生应用技术员职业技能竞赛试题及答案
- 《中药鉴定技术》课件-甘草的鉴定
- 退役军人技能培训课件
- 【川教版】《生命 生态 安全》四上第13课《预防冻疮》课件
- 截肢幻肢痛心理护理
- 糖尿病治疗效果的药物经济学研究
- 生殖中心胚胎室出科小结
- 职业生涯发展展示
- 展会工作总结个人收获
- 金融借款纠纷案件的审判要点授课
- 《现代护士职业素养》课件
评论
0/150
提交评论