MFC通用控件使用详解(7)

2019-03-23 13:08

CBRS_HIDE_INPLACE 表示工具条隐藏

除以上函数外,还包括设置按钮和位图的大小SetSizes、设置工具条的高度SetHeight、调入工具条资源LoadToolBar、调入工具条按钮位图LoadBitmap、设置工具条按钮位图SetBitmap、设置工具条中位图按钮的风格和索引值SetButtons等控制函数。 (2)工具条的类属性

工具条控制类的属性包括取得标识符ID对象按钮索引CommandToIndex、取得索引对应的命令标识符ID或分隔符GetItemID、取得索引对应的矩形区域GetItemRect、取得按钮风格 GetButtonStyle、设置按钮风格SetButtonStyle、取得按钮的ID标识-风格-图象数GetButtonInfo、设置按钮ID标识-风格-图象数SetButtonInfo、取得按钮提示文本

GetButtonText、设置按钮提示文本SetButtonText和取得工具条直接存取控制GetToolBarCtrl等。 2、工具条控制的对象结构 (1)工具条控制的建立方法

CToolBarCtrl &ToolBarCtrl 建立工具条控制对象结构 Create 建立工具条控制对象并绑定 工具条控制类CToolBarCtrl::Create的调用格式如下:

BOOL Create( DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID ); 其中参数dwStyle用来确定工具条控制的风格,必须存在WS_CHILD风格;参数rect用来确定工具条控制的大小和位置;参数pParentWnd用来确定工具条控制的父窗口指针,不能为NULL;参数nID用来确定工具条控制的标识符。

可以利用WS_CHILD、WS_VISIBLE和WS_DISABLED来设置工具条窗口的风格,但必须合理设置如下控制风格:

CCS_ADJUSTABLE 允许用户处理工具条窗口大小,如果存在工具条窗口必须处理相应信 CCS_BOTTOM 使控制处于父窗口客户区域底部并与窗口同样宽 CCS_NODIVIDER 禁止在控制的顶部绘制2个象素的高亮条 CCS_NOHILITE 禁止在控制的顶部绘制1个象素的高亮条

CCS_NOMOVEY 使控制改变大小和移动时自动水平对齐,垂直对齐必须处理WM_SIZE消息

如果CCS_NORESIZE风格有效,则该风格无效

CCS_NOPARENTALIGN禁止控制自动移到父窗口顶部或底部,如果CCS_TOP或 CCS_BOTTOM风格

有效,则高度调整为默认而宽度可以改变

CCS_NORESIZE 禁止设置新的大小或无效值时使用默认宽度和高度值,而使用建立值 CCS_TOP 使控制自动停靠在父窗口客户区域顶部并与父窗口同样宽度 最后,还必须利用下面的风格来控制工具条 TBSTYLE_TOOLTIPS 使工具条建立并管理动态提示控制 TBSTYLE_WRAPABLE 使工具条控制按钮具有多行排列格式 (2)工具条控制中的数据结构

工具条控制中最常用的数据结构为TBBUTTON,其具体结构如下: typedef struct _TBBUTTON {

int iBitmap; // 基于0的位图索引值 int idCommand; // 按钮按下时发送的命令值 BYTE fsState; // 按钮的状态 BYTE fsStyle; // 按钮的风格

DWORD dwData; // 应用程序定义的数据

int iString; // 基于0的按钮标签字符串索引值 } TBBUTTON;

其中按钮状态fsState的值如下:

TBSTATE_CHECKED 表示按钮具有TBSTYLE_CHECKED风格并且被按下 TBSTATE_ENABLED 表示按钮允许接受输入,否则变灰不接受任何输入 TBSTATE_HIDDEN 表示按钮不可见并且不接受任何输入 TBSTATE_INDETERMINATE 表示按钮是变灰的 TBSTATE_PRESSED 表示按钮正被按下

TBSTATE_WRAP 表示按钮具有换行特性,该按钮必须具有TBSTATE_ENABLED状态 按钮风格style可以是下列值的组合: TBSTYLE_BUTTON 表示建立标准下推按钮 TBSTYLE_CHECK 表示建立检查状态按钮 TBSTYLE_CHECKGROUP表示建立检查按钮群 TBSTYLE_GROUP 表示建立按下状态按钮群 TBSTYLE_SEP 表示建立按钮分隔符 (3)工具条控制的类属性

工具条控制的类属性必然的联系判断按钮使能状态IsButtonEnabled、判断按钮检查状态 IsButtonChecked、判断按钮按下状态IsButtonPressed、判断按钮是否隐藏IsButtonHidden、判断按钮变灰状态IsButtonIndeterminate、设置按钮状态SetState、取得按钮状态GetState、取得按钮有关信息GetButton、取得按钮总数GetButtonCount、取得按钮矩形区域GetItemRect、设置按钮结构大小SetButtonStructSize、设置按钮大小SetButtonSize、设置按钮位图大小SetBitmapSize、取得按钮提示控制GetToolTips、设置按钮提示控制SetToolTips等。 (4)工具条控制类的操作方法

工具条控制类的操作方法包括使能按钮EnableButton、检查按钮CheckButton、按下按钮PressButton、隐藏按钮HideButton、变灰按钮Indeterminate、增加按钮AddButtons、插入按钮InsertButton、删除按钮DeleteButton、取得控制符ID对应的索引CommandToIndex、恢复工具条状态RestoreState、保存工具条状态SaveState和重新确定工具条大小AutoSize等。 (三)工具条控制的应用技巧

可以这样说,工具条和上述常用控制是应用程序中不可缺少的功能元素,它的优劣会直接影响程序的基本功能和操作特性。所以这里将对工具条的建立技巧、状态保存与恢复、平面特性、停靠位置、排序方法、消息映射、状态更新、控制使用和属性控制等方面,全面阐述工具条的使用技巧。

1、工具条的建立技巧 (1)普通工具条的建立方法

如果应用程序在建立时就具有工具条,则只需对工具条中的按钮图标进行简单的增加、修改和删除等操作就可满足要求。如果未建立或者想增加其它工具条,则应按步骤追加建立。 首先打开已建立好的基于单文档的框架工程文件CTool并选择\选项,插入工具条资源并设置资源标识符;然后编辑工具栏中的按钮图标和相应的按钮标识符,并利用类向导ClassWizard 为按钮消息增加COMMAND和UPDATE_COMMAND_UI两种处理函数;在资源文件中增加和修改工具条图标的动态提示等内容;打开MainFrm.h包含文件在\m_wndMainToolBar\后增加\等来创建增加的工具条对象;在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; //框架程序的状态条 CTestToolBar m_wndMainToolBar;//框架程序的工具条 CTestToolBar m_wndTestToolBar;//新增工具条 CTestToolBar m_wndDockToolBar;//浮动工具条 CTestToolBar m_wndDockNextBar;//浮动工具条 ......//其它代码 }

框架程序中工具条的控制类正常应为CToolBar,可以是自己设计的派生类CtestToolBar(为笔者扩充平面特性等功能后的新工具条控制类名)等,具体根据实际需要而定。利用CDialogBar类和CStyleBar 类还可以建立扩展类型的工具条,详见后面工具条中控制应用技巧,但在该文件头处必须 包含如下命令:

#ifndef __AFXEXT_H__

#include //直接存取CToolBar和CStatusBar #endif

②在MainFrm.cpp中完善窗口建立函数

int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)

{ if (CFrameWnd::OnCreate(lpCreateStruct) == -1) return -1;

WINDOWPLACEMENT wp;//保存主窗口及工具栏窗口位置状态 if (ReadWindowPlacement(&wp))//读取位置状态信息 SetWindowPlacement(&wp); //设置位置状态信息 m_bToolTips=(AfxGetApp()->GetProfileInt(//读提示功能 _T(\默认值为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)) { //CBRS_SIZE_DYNAMIC为锁定位置风格 TRACE0(\主工具条MAINFRAME建立失败\\n\ return -1;} // 建立失败处理 ......//建立其它工具条代码,基本相同 if (!m_wndStatusBar.Create(this)||

!m_wndStatusBar.SetIndicators(indicators, sizeof(indicators)/sizeof(UINT))) { //建立状态条

TRACE0(\ return -1;} // fail to create

m_wndMainToolBar.SetWindowText(_T(\主工具栏\设置标题 m_wndMainToolBar.EnableDocking(CBRS_ALIGN_ANY);//停靠位置 //m_wndMainToolBar.ModifyStyle(0,TBSTYLE_FLAT);//平面特性 ......//设置其它工具条位置代码,基本相同 DockControlBar(&m_wndMainToolBar, AFX_IDW_DOCKBAR_TOP);//锁定位置 DockControlBarLeftOf(&m_wndTestToolBar, &m_wndMainToolBar);//连接工具条

DockControlBar(&m_wndDockToolBar,AFX_IDW_DOCKBAR_RIGHT); m_wndDockToolBar.SetColumns(AfxGetApp()->GetProfileInt( _T(\恢复列格式,默认为3 DockControlBarLeftOf(&m_wndDockNextBar,&m_wndDockToolBar); m_wndDockNextBar.SetColumns(AfxGetApp()->GetProfileInt( _T(\

LoadBarState(_T(\恢复保存的状态和位置 return 0; }

以上建立过程除工具条建立和资源调用函数外,还涉及到了窗口和工具条的状态保存和恢复函数、注册表参数读取函数、工具条停靠位置函数、工具条标题修改函数、工具条连接函数、工具条列格式控制函数和工具条风格修改函数,其中工具条建立函数中的风格设置很重要,如果建立的工具条需要重新设置多行多列的排序功能,除正确设置工具条停靠位置参数外,还必须设置CBRS_SIZE_FIXED 风格,即允许程序改变工具条窗口的尺寸,如果工具条不需要重新排序,则必须设置为CBRS_SIZE_DYNAMIC 风格,否则工具栏不但不能进行重新排序和正确停靠到理想的位置,而且也无法正确保存和恢复工具条的位置和状态,这一点应引起编程者高度重视。其余函数以后分别介绍。

(2)浮动工具条的建立方法

如果要建立浮动工具条,必须使用如下工具条的控制方法:

Cpoint pt(GetSystemMetrics(SM_CXSCREEN)-100,GetSystemMetrics(SM_CYSCREEN)/3); FloatControlBar(&m_wndPaletteBar,pt);//浮动工具条 (3)多位图工具条的建立方法

如果工具条存在多幅按钮位图,如单色和彩色等,则必须将工具条按钮存在在位图资源文件中而不是工具条资源中,并如下建立:

if(!m_wndDockToolBar.Create(this,WS_CHILD|WS_VISIBLE| CBRS_SIZE_FIXED|CBRS_TOP|CBRS_TOOLTIPS,ID_PALETTEBAR)|| !m_wndDockToolBar.LoadBitmap(IDR_DOCKTOOLBAR)|| !m_wndDockToolBar.SetButtons(DockTool, sizeof(DockTool)/sizeof(UINT)))

其中DockTool为按钮IDs数据结构,其定义方法如下: static UINT BASED_CODE DockTool[]= { ID_SEPARATOR, ID_STYLE_LEFT, ID_STYLE_CENTERED, ID_STYLE_RIGHT, ID_STYLE_JUSTIFIED, };

上述建立过程中的EnableDocking 函数必须放在所有工具条建立函数之前,否则可能出现很难发现的错误,如特殊工具条初始位置控制等。工具条的所有特性均在上述建立函数中确定,所以其建立过程是实现理想工具条的关键环节。 2、工具条状态保存和恢复

很多应用程序中都具有保存和恢复应用程序及其工具条等状态的功能,即下次启动应用程序后进入上次的运行状态,这种功能只需进行一次界面布局便可永久保存,极大方便用户。


MFC通用控件使用详解(7).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:二年级下册备课(含二次备课)

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: