Download presentation
Presentation is loading. Please wait.
Published byTobias Knopp Modified 6年之前
1
第5章 文本与字体 2018/11/14 面向对象与可视化 程序设计 --Visual C++ 编程 主讲教师: 唐 龙教授 (计算机科学与技术系) 黄维通博士 (计算机与信息管理中心) 清 华 大 学 2001年2月 2018/11/14 Huang Weitong
2
第5章 文本与字体 2018/11/14 第十五章 工具条类及其应用 2018/11/14 Huang Weitong
3
内容提要 工具条类简介 工具条类控件的应用 2018/11/14
4
第5章 文本与字体 2018/11/14 § 工具条类简介 2018/11/14 Huang Weitong
5
1. 工具条 工具条是图形化的菜单,可更快捷、更有效的命令输入方式。 工具条作为程序的一个资源存放在资源脚本中,在程序运行时才调用。
第5章 文本与字体 2018/11/14 1. 工具条 工具条是图形化的菜单,可更快捷、更有效的命令输入方式。 工具条作为程序的一个资源存放在资源脚本中,在程序运行时才调用。 工具条的标识符在resource.h文件中定义,并与系统菜单、系统图标的ID相同,这样,可以使工具条资源建立后直接链接到主窗口。 Huang Weitong
6
2. 工具条资源模板 工具条资源模板在工具条资源文件中定义工具条各个按钮和整个工具条的位图,其格式如下:
ID TOOLBAR [工具条属性] 像素宽,像素高 BEGIN BUTOON ID1 …... BUTOON IDn END ID ID TOOLBAR [工具条属性] bmp文件名 2018/11/14
7
2. 工具条资源模板(续) 例如,在名为mytoolbar.rc工具条资源文件中定义的文件操作工具条资源模板如下:
IDR_ TOOLBAR TOOLBAR DISCARDABLE 16,15 BEGIN BUTOON ID_FILE_NEW //新建 BUTOON ID_FILE_OPEN //打开 BUTOON ID_FILE_SAVE_AS //另存 SEPERATOR //分隔块 BUTOON ID_SHOW //显示 END IDR_ TOOLBAR TOOLBAR DISCARDABLE “res\toolbar.bmp” 2018/11/14
8
3.CToolBar类 工具条类CToolBar由控制条类CControlBar派生的,而控制条类CControlBar由CWnd类直接派生的。 CToolBar类有几个兄弟类,都是用来接收某些命令输入并向用户显示状态消息的类,包括: CStatusBar(状态条) COleResizeBar(OLE控制条) CDialogBar(对话条) 在AfxWin.h中定义了CToolBar类。
9
4. CToolBar类的方法 CToolBar类的方法,包括: 构造方法; 工具条按钮操作方法; 虚拟方法。
10
创建并初始化工具条对象 (1) Create()函数 BOOL Create ( CWnd* pParentWnd, //指向父窗口的指针
DWORD dwStyle=WS_CHILD|WS_VISIBLE|CBRS_TOP, //风格 UINT nID = AFX_IDW_TOOLBAR //工具条的ID号 ); 例如:CToolBar m_ToolBar=new CToolBar( ); m_ToolBar.Create(this,WS_VISIBLE|CBRS_TOP,0x9100); 风格为“初始可见”, 且置于窗口“顶部” 工具条窗口的ID号 2018/11/14
11
BOOL LoadToolBar(LPCTSTR lpszResourceName); 加载整型形式定义的资源
加载字符串形式定义的资源 BOOL LoadToolBar(LPCTSTR lpszResourceName); 加载整型形式定义的资源 BOOL LoadToolBar(UINT nIDResource); (3) LoadBitmap()函数 加载字符串形式定义的位图资源 BOOL LoadToolBar(LPCTSTR lpszResourceName); 加载整型形式定义的位图资源 BOOL LoadToolBar(UINT nIDResource); 2018/11/14
12
重设置工具条风格,例如 (4) SetBarStyle()函数 m_wndToolBar.SetBarStyle
工具条的 大小可变 重设置工具条风格,例如 m_wndToolBar.SetBarStyle (CBRS_TOOLTIPS|CBRS_FLYBY|CBRS_SIZE_DYNAMIC); 光标在按钮上暂停时, 显示工具提示 光标在按钮上暂停时, 显示命令描述 工具条窗口的风格 WS_VISIBLE 使工具条窗口初始可见 CBRS_BOTTOM 初始时将工具条放到窗口底部 CBRS_FLYBY 鼠标光标在按钮上暂停时,显示命令描述 CBRS_NOALIGN 防止控制条在其父窗口改变大小时被复位 CBRS_TOOLTIPS 鼠标光标在按钮上暂停时,显示工具提示 CBRS_TOP 初始时将工具条放在窗口底部 CBRS_SIZE_DYNAMIC 工具条的大小可变 2018/11/14
13
缺省状况下,CToolBar工具条只能被应用程序所移动。 用户移动工具条,需向工具条及框架窗口发送消息。这可通过调用如下函数实现:
(5) 工具条的移动 缺省状况下,CToolBar工具条只能被应用程序所移动。 用户移动工具条,需向工具条及框架窗口发送消息。这可通过调用如下函数实现: CToolBar::EnableDocking 或CFrameWnd::EnableDocking。 这二函数原型均为: void EnableDocking( DWORD dwStyle ); 停靠 风格 对于CFrameWnd 不可用 2018/11/14
14
调用CWnd::GetStyle获取当时工具条状态,即: DWORD GetStyle( ) const;
(6)工具条的显隐控制 调用CWnd::GetStyle获取当时工具条状态,即: DWORD GetStyle( ) const; 若WS_VISIBLE风格的工具条不能用SetStyle( )改变 由于工具条是一个窗口,其显示或隐藏可通过其父类CWnd的成员函数ShowWindow( )来实现。 2018/11/14
15
第5章 文本与字体 2018/11/14 § 工具条类的应用 2018/11/14 Huang Weitong
16
[例15-1]带工具条类的应用程序,其界面标题为MyToolBar,有四个下拉菜单和 “文件”工具条。
“文件”工具条有四个按钮 “N”,“O”,“S”和“sh”。 工具条 “N”,“O”,“S”按钮与 “文件(F)”下拉菜单中几项功能相同; 工具条“sh”按钮与菜单“显示(S)”功能相同,显示一个“这是关于工具条的样例程序”信息窗口; 工具条隐现由“查看”的下拉菜单中“工具条(T)”项控制。
17
带工具条类的应用程序MyToolBar 的其界面
2018/11/14
18
应用程序的可视化编程部分 这样在资源文件MyToolbar.rc中增加了一项资源,即一个工具条。 1.对话框中的工具条的设计
选Insert菜单中的Resource。这时,显示Insert Resource窗口。选Toolbar项,单击New按钮。 这样在资源文件MyToolbar.rc中增加了一项资源,即一个工具条。 为IDR_TOOLBAR 设置属性 2018/11/14
19
2.工具条按钮的编辑 加入工具条按钮 可以利用VC所提供的绘图工具,直接编缉自己的按钮。
若已经存在的图标,作为下一个按钮,应先加入一个 ICON资源,再经拷贝和粘贴,放到Toolbar上。 删除工具条按钮 删除按钮只要把该按钮拖出工具条以外。 分隔工具条按钮 用鼠标将要移动的按钮拖动到工具条上需要的位置。 2018/11/14
20
N ID_FILE_NEW 建立新文档\n新建 O ID_FILE_OPEN 打开一个现有文档\n打开
3.菜单的编辑 按钮 ID Prompt N ID_FILE_NEW 建立新文档\n新建 O ID_FILE_OPEN 打开一个现有文档\n打开 S ID_FILE_SAVE_AS 以一个新文件名保存\n另存为 sh ID_SHOW 显示一个对话框\n显示 2018/11/14
21
应用程序的代码编程 1. 给菜单“显示(S)”选项编写代码 (1) 在菜单“显示”上单击右键,在弹出菜单中选ClassWizard命令。
(2) 在Object IDs列表框中选择ID_SHOW项。 (3) 在Messages列表框中选择COMMAND 项是BN_CLICKED。 (4) 单击Add Functtion按钮,接受弹出的窗口中函数名OnShow()。 (5) 这样在ClassWizard窗口的Member functions列表框中增加了成员函数OnShow(),单击Edit Code按钮。Visual C++显示源代码文件(.cpp),并将光标停在函数OnShow()处,等待用户定义函数的内容。 (6) 在函数OnShow ()中输入以下代码: void CMainFrame::OnShow() { AfxMessageBox(”这是关于工具条的样例程序”);//显示对话框 } 2018/11/14
22
2 添加工具条代码——有三个地方需要添加工具条代码
(1)为类CMainFrame 加入一个成员变量m_wndToolBar,有两种方法。 用Class Wizard进行,在Workspace 窗口的ClassView选项卡中,找到CmainFrame类的标识,点击鼠标的右键,选择Add Member Variable…子菜单,在Variable Type 编辑框中填入CToolBar,在Variable Name编辑框中填入m_wndToolBar, 在Access中选择protected一项。 在头文件 MainFrm.h中直接添加所需的代码,如下这段代码为类CMainFrame加入一个受保护的成员变量m_wndToolBar : class CMainFrame : public CFrameWnd { … protected: // control bar embedded members CToolBar m_wndToolBar;//加入成员变量m_wndToolBar } 2018/11/14
23
// MainFrm.cpp : implementation of the CMainFrame class
(2)在MAINFRAME.CPP文件中加入代码,设置工具条的特性以实现使工具条可见的功能。在CMainFrame的OnCreate函数中加入以下代码 // MainFrm.cpp : implementation of the CMainFrame class int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) { … if (!m_wndToolBar.Create(this) || //创建工具条 !m_wndToolBar.LoadToolBar(IDR_TOOLBAR))//引入IDR_TOOLBAR TRACE0("Failed to create toolbar\n"); return -1; //若失败,则给出提示,并返回-1 } 若现在运行程序,则可以看见工具条了。 2018/11/14
24
(3)更改属性为了使工具条成为可“浮动”工具条,要考虑进行一些其它的编码。仍在MAINFRAME
(3)更改属性为了使工具条成为可“浮动”工具条,要考虑进行一些其它的编码。仍在MAINFRAME.CPP文件中,在CmainFrame的OnCreate函数中在刚才加入的代码后面加入以下代码 // MainFrm.cpp : implementation of the CMainFrame class int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) { … m_wndToolBar.SetBarStyle(m_wndToolBar.GetBarStyle() | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC); //设定工具条的风格为:当鼠标光标在按钮上暂停时,显示工具提示和命令描述,并//设定工具条的大小是可变的。 m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY); EnableDocking(CBRS_ALIGN_ANY); DockControlBar(&m_wndToolBar); //实现工具条的移动 } 注意:若希望有两个工具条,只要象刚才那样定义工具条资源并为类CMainFrame加入第二个成员变量m_wndToolBar2,然后添加合适的响应程序代码即可 。 2018/11/14
25
(第十五章) 完 2018/11/14
26
第15-16章课后练习题 编写一个具有下拉菜单和工具条单(或多)文档应用程序,菜单包括:“文件”,“绘图”等,工具条含有“直线”,“圆”,“矩形”等绘图按钮。 [注]6月4日前完成 2018/11/14
Similar presentations