tbstyle_check 表示建立检查状态按钮
tbstyle_checkgroup表示建立检查按钮群
tbstyle_group 表示建立按下状态按钮群
tbstyle_sep 表示建立按钮分隔符
6.2.2.3 工具条控制的类属性
工具条控制的类属性必然的联系判断按钮使能状态isbuttonenabled、判断按钮检查状态 isbuttonchecked、判断按钮按下状态isbuttonpressed、判断按钮是否隐藏isbuttonhidden、判断按钮变灰状态isbuttonindeterminate、设置按钮状态setstate、取得按钮状态getstate、取得按钮有关信息getbutton、取得按钮总数getbuttoncount、取得按钮矩形区域getitemrect、设置按钮结构大小setbuttonstructsize、设置按钮大小setbuttonsize、设置按钮位图大小setbitmapsize、取得按钮提示控制gettooltips、设置按钮提示控制settooltips等。
6.2.2.4 工具条控制类的操作方法
工具条控制类的操作方法包括使能按钮enablebutton、检查按钮checkbutton、按下按钮pressbutton、隐藏按钮hidebutton、变灰按钮indeterminate、增加按钮addbuttons、插入按钮insertbutton、删除按钮deletebutton、取得控制符id对应的索引commandtoindex、恢复工具条状态restorestate、保存工具条状态savestate和重新确定工具条大小autosize等。
6.3 工具条控制的应用技巧
可以这样说,工具条和上述常用控制是应用程序中不可缺少的功能元素,它的优劣会直接影响程序的基本功能和操作特性。所以这里将对工具条的建立技巧、状态保存与恢复、平面特性、停靠位置、排序方法、消息映射、状态更新、控制使用和属性控制等方面,全面阐述工具条的使用技巧。
6.3.1 工具条的建立技巧
6.3.1.1 普通工具条的建立方法
如果应用程序在建立时就具有工具条,则只需对工具条中的按钮图标进行简单的增加、修改和删除等操作就可满足要求。如果未建立或者想增加其它工具条,则应按步骤追加建立。
首先打开已建立好的基于单文档的框架工程文件ctool并选择"insert->resource->toolbar"选项,插入工具条资源并设置资源标识符;然后编辑工具栏中的按钮图标和相应的按钮标识符,并利用类向导classwizard 为按钮消息增加command和update_command_ui两种处理函数;在资源文件中增加和修改工具条图标的动态提示等内容;打开mainfrm.h包含文件在"ctoolbar m_wndmaintoolbar"后增加"ctoolbar m_wndtesttoolbar" 等来创建增加的工具条对象;在mainfrm.h 中设置建立函数所需的成员变量,如颜色变量为m_bcolor、动态提示功能变量为m_btooltips 等,注意成员变量名与其获取的参数应完全对应以便使用;最后在mainfrm.cpp中的oncreate()建立函数中按下述示例规则增加控制代码,其实现具体步骤如下:
①在mainfrm.h中增加工具条对象控制和成员变量
#define toolleft 18
class cmainframe:public cframewnd
......//其它代码
public:
bool m_btooltips;//工具条提示功能
......//其它代码
protected://工具条控制成员变量
cstatusbar m_wndstatusbar; file://框架程序的状态条
ctesttoolbar m_wndmaintoolbar;//框架程序的工具条
ctesttoolbar m_wndtesttoolbar;//新增工具条
ctesttoolbar m_wnddocktoolbar;//浮动工具条
ctesttoolbar m_wnddocknextbar;//浮动工具条
......//其它代码
}
框架程序中工具条的控制类正常应为ctoolbar,可以是自己设计的派生类ctesttoolbar(为笔者扩充平面特性等功能后的新工具条控制类名)等,具体根据实际需要而定。利用cdialogbar类和cstylebar 类还可以建立扩展类型的工具条,详见后面工具条中控制应用技巧,但在该文件头处必须
包含如下命令:
#ifndef __afxext_h__
#include <afxext.h>//直接存取ctoolbar和cstatusbar
#endif
②在mainfrm.cpp中完善窗口建立函数
int cmainframe::oncreate(lpcreatestruct lpcreatestruct)
{ if (cframewnd::oncreate(lpcreatestruct) == -1)
return -1;
windowplacement wp;//保存主窗口及工具栏窗口位置状态
if (readwindowplacement(&wp))//读取位置状态信息
setwindowplacement(&wp); file://设置位置状态信息
m_btooltips=(afxgetapp()->getprofileint(//读提示功能
_t("general"),_t("tooltips"),1)!=0); file://默认值为1
m_wndmaintoolbar.setstate(toolleft,true);//设置初始状态
enabledocking(cbrs_align_any);//停靠位置,必须提前位置
if (!m_wndmaintoolbar.create(this,ws_child|ws_visible
|cbrs_size_dynamic|cbrs_top|((m_btooltips)?
(cbrs_tooltips|cbrs_flyby):0),idr_mainframe)||
!m_wndmaintoolbar.loadtoolbar(idr_mainframe))
{ file://cbrs_size_dynamic为锁定位置风格
trace0("主工具条mainframe建立失败\n");
return -1;} // 建立失败处理
......//建立其它工具条代码,基本相同
if (!m_wndstatusbar.create(this)||
!m_wndstatusbar.setindicators(indicators,