第四部分装饰应用程序的外观教学课件上课讲义

上传人:yuzo****123 文档编号:137415341 上传时间:2020-07-08 格式:PPT 页数:136 大小:590.50KB
返回 下载 相关 举报
第四部分装饰应用程序的外观教学课件上课讲义_第1页
第1页 / 共136页
第四部分装饰应用程序的外观教学课件上课讲义_第2页
第2页 / 共136页
第四部分装饰应用程序的外观教学课件上课讲义_第3页
第3页 / 共136页
第四部分装饰应用程序的外观教学课件上课讲义_第4页
第4页 / 共136页
第四部分装饰应用程序的外观教学课件上课讲义_第5页
第5页 / 共136页
点击查看更多>>
资源描述

《第四部分装饰应用程序的外观教学课件上课讲义》由会员分享,可在线阅读,更多相关《第四部分装饰应用程序的外观教学课件上课讲义(136页珍藏版)》请在金锄头文库上搜索。

1、第四章 装饰应用程序的外观,创建友好, 美观的用户界面是成功设计和编制一个 Windows 应 用程序的重要组成部分,程序用户界面的设计编程工作包括菜单、控制栏( 其中包括工具栏、状态栏、对话框栏等) 创建和控制、对话框、帮助信息的制作和运行,以及框架、视图窗口的位置和大小控制等。其中对话框的制作和运行操作将在下一 章中作详细的描述。 在 AppWizard 创建的应用程序框架中,菜单,工具栏, 状态栏 和视图窗口均可以缺省隶属于主框架窗口,并由主框架窗口管 理和控制。一个典型主框架窗口的组成以及与用户界面各个组 成部分的关系如下图所示:, SDI 应用程序框架,标题栏,菜单栏,工具栏窗口,状

2、态栏窗口,视图窗口, MDI 应用程序框架,标题栏,菜单栏,工具栏窗口,状态栏窗口,标题栏,视图窗口,工具栏和状态栏分别由 CToolBar 和 CStatusBar 类描述, 它们都是控制栏类 CControlBar 的派生类,而 CControlBar又是 CWnd 的派生类,因此,工具栏和状态栏本身也是一个能响 应消息的特定窗口,在主框架窗口中可以视为是子窗口。,CObject,菜单是由 CMenu 类描述, 它是直接从 CObject 类派生的,因此该类的对象只能用于完 成菜单的创建、跟踪、修改、销毁和发送命令消息,而本身 不能响应消息;在主框架窗中可以视为用于发送命令消息的 一个特定

3、区域。,CObject,主框架窗口是由 CFrameWnd(用于 SDI)或 CMDIFrameWnd 和 CMDIChildWnd(用于 MDI),它们都是 CWnd 的直接或间接派 生类。,CObject,由 AppWizard 创建的文档视图结构的应用程序主框架窗口类 对象中缺省的工具栏被定义成名为 m_wndToolBar 的 CToolBar 类 对象成员,而状态栏被定义成名为 m_wndStatusBar 的 CStatusBar 类对象成员 。创建和显示工具栏和状态栏的操作应在程序主框 架窗类 CMainFrame 对象所关联的窗口已经创建完成(窗口句柄已有效) 但还未显示时进行

4、,即在窗口创建消息 WM_CREATE 的响应成员函数 OnCreate 被调用中完成的。因此,需要在 CMainFrame 类中重新定义 OnCreate 函数,以便在主框架窗口显 示之前添加任何需要附加的初始化工作,例如创建和显示工具 栏和状态栏、创建其他子窗口等。,与其它 Windows 资源所对应的 MFC 类一样,CMenu 类也是将菜 单的句柄和属性和对菜单属性的各种操作等封装了起来,并且 只有当菜单句柄有效时,对菜单属性的操作才是合法的。通常 情况下,菜单总是主框架窗口的一个区域,所以当主框架窗口 的产生函数或 LoadFrame 函数被调用时,与菜单资源相关联的 CMenu 对

5、象作为框架窗口的保护成员被创建。 因此,通常情况下,编程者只需要通过设计菜单的静态资 源,而且无须通过 CMenu 类对象的调用对象的行为,就能满足 程序对主菜单的一般设计编程需求。但在程序需要动态创建新 菜单或修改已有菜单时,则必须调用 CMenu 对象的行为。,如果你需要修改主框架窗口的菜单,你可能需要通过窗口类 CWnd 的成员函数 GetMenu 获取保护成员 CMenu 对象的指针, 并通过该指针对该菜单对象进行各种需要的访问和操作,以便 满足特殊的菜单设计编程需求,例如: 动态切换不同菜单; 动态隐藏和显示菜单; 动态添加和删除菜单项; 动态禁止和激活菜单项; 动态为菜单项添加图形

6、标签; 动态创建浮动的弹出式环境菜单。,对框架和视图窗口的外观操作,就是对它们的位置、大小、状 态的控制,称之为放置(Placement)操作。视图窗口是包含在 框架窗口中的,它随着框架窗口的变化而变化,换句话说,对 视图窗口的放置操作是通过对框架窗口的放置操作实现的。虽 然用户可以方便地通过框架窗口提供的最大化、最小化等窗口 操作界面对框架和视图窗口的放置进行动态交互控制,但在不 少情况下,还是需要在程序中通过代码对框架和视图窗口的放 置进行定制操作。例如,希望程序在运行开始时能保持最近一 次运行的框架和视图窗口的位置、大小、状态。实现这些放置 操作是窗口创建过程中完成的,这对于 SDI 和

7、 MDI 应用程序是 不完全一样的,对于 MDI ,不仅要考虑主框架窗口的放置,还 要考虑子框架窗口的放置。,本章将通过 5 类实例程序分别讲述如何实现上述外观设计: 第 1 类实例讲解工具栏和状态栏编程; 第 2 类实例讲解 CDialogBar 编程; 第 3 类实例讲解 CReBar 编程; 第 4 类实例讲解菜单编程; 第 5 类实例讲解具有持续特性的定制框架窗口类编程。,4.1 创建浮动工具栏 4.1.1 利用 AppWizard 自动创建工具栏 在 MFC 中,工具栏资源和工具栏类 CToolBar 是实现工具栏的 两个要素。创建工具栏对象的基本步骤为: 创建工具栏资源; 创建一个

8、 CToolBar 对象; 调用 CToolBar:Create 函数创建工具栏窗口; 调用 CToolBar:LoadToolBar 载入工具栏资源。,在使用 AppWizard 生成的默认配置的应用程序框架中包括了 能创建一个缺省工具栏的四步操作的所有代码,因此修改工具 栏中的按钮只需要修改缺省工具栏资源就可以实现。而如果需 要创建缺省工具栏以外的工具栏,则必须在 AppWizard 生成的框 架基础上,效仿上述缺省资源和代码添加相应的自定义资源和 代码。为此,分析创建缺省工具栏的代码是十分必要的。 创建一个 SDI 应用程序项目 “Default” (使用 AppWizard 的缺 省选

9、择),查询所创建的应用程序框架的代码,可以发现与工 具栏有关的资源和代码有:,1 在资源中添加了工具栏资源 IDR_MAINFRAME : 2 在 CMainWnd 的定义中添加了定义工具栏对象成员的代码: CToolBar m_wndToolBar; 3 在重新定义的 CMainWnd:OnCreate 中添加了创建工具栏, 装 载工具资源和初始化工具栏的缺省代码。 分析 CMainWnd:OnCreate ,该虚函数首先调用了基类中定义 的版本 CFrameWnd:OnCreate 进行基类部分的初始化工作, 然后可以添加主框架窗口所需要的任何初始化代码,其中包 括了对工具栏的创建和初始化

10、操作:, 创建工具栏窗口 创建工具栏窗口的函数是 CToolBar:Create 或CToolBar:CreateEx 它们的原型分别为: BOOL Create( CWnd *pParentWnd,/ 父窗口指针 DWORD dwStyle = WS_CHILD| WS_VISIBLE|CBRS_TOP, / 风格 UINT nID=AFX_IDW_TOOLBAR/* 工具栏子窗口 ID */ ); BOOL CreateEx(CWnd* pParentWnd,/父窗口指针 DWORD dwCtrlStyle = TBSTYLE_FLAT,/ 工具栏控件风格 DWORD dwStyle =

11、WS_CHILD| WS_VISIBLE|CBRS_ALIGN_TOP, CRect rcBorders=CRect(0,0,0,0),/ 工具栏的矩形边界 UINT nID=AFX_IDW_TOOLBAR/* 工具栏子窗口 ID */ );,其中: pParentWnd 是指向工具栏的父窗口,即主框架窗口对象的 指针。 dwCtrlStyle 和 dwStyle 的设置是决定所创建的工具栏的外观 和状态的重要因素,可设置的样式值包括 CWnd 的样式和 CToolBar 的样式两部分(祥见 MSDN 的有关部分)。 如果创建成功,返回真实的;否则返回错误的。 例如,在本例中实现创建工具栏窗口

12、的缺省代码为: m_wndToolBar.CreateEx( this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE| CBRS_TOP|CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY|CBRS_SIZE_DYNAMIC ); 注意,该调用中第 4 参数 rcBorders 和第 5 参数 nID 使用了缺省 值 CRect(0,0,0,0) 和 AFX_IDW_TOOLBAR 。, 加载工具栏资源 为工具栏对象加载资源的函数为 CToolBar:LoadToolBar ,其 原型为: BOOL LoadToolBar ( LPC

13、TSTR lpszResourceName /*资源名 */ ); BOOL LoadToolBar ( UINT nIDResource /* 资源 ID */ ); 本例中实现加载工具栏资源的代码为: m_wndToolBar.LoadToolBar ( IDR_MAINFRAME ); IDR_MAINFRAME 是工具栏资源的 ID 。如果资源加载成功,则 返回 TRUE 的;否则返回 FALSE 的。, 设置工具栏停靠特性 实现设置的函数为 CControlBar:EnableDocking ,其原型为: void EnableDocking ( DWORD dwStyle ); 参

14、数为停靠样式,种类和取值参考 MSDN 中的相关部分。 本例中实现设置的代码为: m_wndToolBar.EnableDocking ( CBRS_ALIGN_ANY ); 参数 CBRS_ALIGN_ANY 所指示的停靠样式是允许工具栏停靠 到主框架窗口中的任何一边。, 设置主框架窗口的工具栏停靠特性 实现该设置的函数为 CFrameWnd:EnableDocking ,其原型: void EnableDocking ( DWORD dwdocStyle ); 参数为停靠样式,种类和取值参考 MSDN 中的相关部分。 本例中实现设置的代码为: EnableDocking ( CBRS_AL

15、IGN_ANY ); 参数 CBRS_ALIGN_ANY 所指示的停靠样式是使框架窗口的任 何一边都可以停放控制栏。在拥有多个控制栏的框架窗口中 该函数只需调用一次。, 把工具栏停靠在主框架窗口中的确定位置 实现停靠操作的函数为 CFrameWnd:DockControlBar ,原型: void DockControlBar ( CControlBar*pBar, UINT nDockBarID=0, LPCRECT lpRect=NULL ); 本例中实现停靠的代码为: DockControlBar ( 使工具栏按照创建工具栏窗口时的默认位置(框架窗口工作 区的顶部),实现停靠操作。,4.

16、1.2 添加自定义工具栏 创建一个名为 Tb 的 SDI 应用程序项目,参照由 AppWizard 缺省创建的工具栏添加自定义工具栏。 1 自定义工具栏资源 使用资源编辑器添加一个标识为 ID_TOOLBAR1 的工具栏资源 其中包括两个按钮: 2. 添加自定义工具栏的程序代码 在 CMainFrame 类中增加一个 CToolBar 类的保护成员对象: CToolBar m_wndToolBar1; 在 CMainFrame:OnCreate 添加对应于 m_wndToolBar1 的创建、 加载资源和初始化代码:, if ( !m_wndToolBar1.CreateEx ( this,TBSTYLE_FLAT,WS_CHILD | WS_VISIBLE | CBRS_TOP|CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) |

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

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

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