按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!
需向工具条及帧窗口发送消息。这可通过调用
CToolBar::EnableDocking和CFrame::EnableDocking实现。二函数原
型均如下:
void EnableDocking( DWORD dwStyle );
其中参数dwStyle为工具条风格,对CToolBar其取值可如下:
而对于CFrame,风格值CBRS_FLOAT_MULTI不可用。
下面这段代码几乎也是标准的:
d_pToolBar…》EnableDocking(CBRS_ALIGN_ANY);
EnableDocking(CBRS_ALIGN_ANY);
表5。 2 工具条停靠风格
风格 含义
CBRS_ALIGN_TOP 工具条可在客户区顶端移动
CBRS_ALIGN_BOTTOM 工具条可在客户区底端移动
CBRS_ALIGN_LEFT 工具条可在客户区左端移动
CBRS_ALIGN_RIGHT 工具条可在客户区右端移动
…………………………………………………………Page 240……………………………………………………………
CBRS_ALIGN_ANY 工具条可在客户区任意位置移动
CBRS_FLOAT_MULTI 允许在一单边窗口内存在多个可
移动控制条
用户也可以将工具条移动或定位。或者在程序控制下,通过调用
CFrameWnd::DockControlBar来移动以及调用
CFrameWnd::FloatControlBar来定位一工具条。它们的原型及参数如
下所示:
void DockControlBar( CControlBar * pBar; UINT nDockBarID = 0; LPCRECT lpRect =
NULL );
其中pBar为指向欲移动的工具条的指针,nDockBarID决定框架窗口哪
一边可移动。它为0时,则控制条可任意移动,它取值
AFX_IDW_DOCKBAR_TOP,AFX_IDW_DOCKBAR_ BOTTOM,
AFX_IDW_DOCKBAR_LEFT,AFX_IDW_DOCKBAR_RIGHT时,分别表示控制
条可移动至框架窗口的顶端,底端,左端及右端,该函数最后一个参
数标识控制条可放置的框架非客户区的屏幕坐标。
第二个函数的原型及参数读者不妨从系统帮助文件中查到。
例如,我们可以这样编写代码:
d_pToolBar…》EnableDocking(CBRS_ALIGN_ANY);
EnableDocking(CBRS_ALIGN_ANY);
接下来我们再谈谈工具条的显隐控制。由于工具条是一个窗口,它的
显隐可以通过其父类CWnd的成员函数实现。
在我们要改变工具条状态前知道当时工具条的状态有时是至关重要
的,工具条的可视性可以通过函数CWnd::GetStyle拣取。该函数不带
参数,其原型为:
DWORD GetStyle( ) const;
函数返回当前控制条风格值。
而通过对函数CWnd::SetStyle的调用可以改变某些窗口风格,但该函
数不能改变WS_VISABLE,这意味着我们不得不通过调用其基类的成员
函数ShowWindow来实现:将参数SW_HIDE传给函数以使工具条不可见
或传递SW_SHOWNORMAL使工具条再次显示。函数SetStyle的原型及参
数读者不妨自己从系统的帮助文件中查到。
…………………………………………………………Page 241……………………………………………………………
一旦在程序中改变了工具条,就必须将这一改变通知帧窗口,为此需
再次计算控制条的位置,这可以通过调用函数
CFrameWnd::RecalcLayout来实现。该函数为一不带参数的函数,读
者在程序中可以简单地进行调用即可。例如程序中下列代码
RecalcLayout( );
即可将该工具条的变化通知到程序窗口中。
图5。 20 程序初始画面
图5。 21 两个工具条并存
l 注意:
l 限于篇幅原因,本节内容给出一个源程序代码,但较不完整。读
者如果感兴趣,可以自己试着编写完全。但需要注意的是,在编
…………………………………………………………Page 242……………………………………………………………
辑工具条时,应该将工具条的各个按钮作为位图储存。否则,在
程序进行编译时,会出现ID号未定义错。(Undeclared
Identifier error)。下面给出程序的一些关键性代码。而且由于
前文对各函数讲得较细致;对下面的源代码我们给 出的解释较简
单。同时;考虑到只有文件mainframe。cpp中改动较多;下面的源代
码仅为该文件。但我们给 出了几幅运行画面(图5。20到图5。22)供比
较。
图5。 22 隐去自编工具条
// mainfrm。cpp : 类DMainFrame的实现
//
// 。。。
#include 〃stdafx。h〃
// 。。。
//以上为程序包含文件部分。
IMPLEMENT_DYNCREATE(DMainFrame; CFrameWnd)
BEGIN_MESSAGE_MAP(DMainFrame; CFrameWnd)
//{{AFX_MSG_MAP(DMainFrame)
ON_WM_CREATE()
ON_MAND(ID_TOOLBAR_CREATE; OnToolbarCreate)
ON_MAND(ID_TOOLBAR_SHOW; OnToolbarShow)
…………………………………………………………Page 243……………………………………………………………
ON_UPDATE_MAND_UI(ID_TOOLBAR_CREATE; OnUpdateToolbarCreate)
ON_UPDATE_MAND_UI(ID_TOOLBAR_SHOW; OnUpdateToolbarShow)
ON_MAND(ID_EDIT_COPY; OnEditCopy)
ON_MAND(ID_EDIT_CUT; OnEditCut)
ON_MAND(ID_EDIT_PASTE; OnEditPaste)
ON_MAND(ID_EDIT_UNDO; OnEditUndo)
ON_MAND(ID_FILE_NEW; OnFileNew)
ON_MAND(ID_FILE_OPEN; OnFileOpen)
ON_MAND(ID_FILE_SAVE; OnFileSave)
ON_MAND(ID_FILE_PRINT; OnFilePrint)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
//以上部分为消息响应;由于要在程序中改变图标选中状态;我们处理了消息
ON_UPDATE_MAND;
//该消息在每一个发送该消息之前发送;因此;通过处理该消息;我们就可以在用户看到该图标
出
//现以前改变该图标表现。
/////////////////////////////////////////////////////////////////////////////
// arrays of IDs used to initialize control bars
// toolbar buttons IDs are mand buttons
static UINT BASED_CODE buttons'' =
{
// same order as in the bitmap 'bitmap1。bmp'
ID_TOOLBAR_CREATE;
ID_SEPARATOR;
ID_TOOLBAR_SHOW
//以上部分为工具条上按钮对应情况;ID_SEPARATOR在两个相邻按钮间加一分隔线
…………………………………………………………Page 244……………………………………………………………
};
// toolbar buttons IDs are mand buttons
static UINT BASED_CODE Toolbar2Buttons'' =
{
// same order as in the bitmap 'toolbar。bmp'
ID_FILE_NEW;
ID_FILE_OPEN;
ID_FILE_SAVE;
ID_SEPARATOR;
ID_EDIT_CUT;
ID_EDIT_COPY;
ID_EDIT_PASTE;
ID_SEPARATOR;
ID_FILE_PRINT;
ID_APP_ABOUT;
//这一部分同上;注意;工具条按钮间分隔线最好在编程时确定。同时;一定要注意按钮的对应
情况。
};
static UINT BASED_CODE indicators'' =
{
ID_SEPARATOR; // status line indicator
ID_INDICATOR_CAPS;
ID_INDICATOR_NUM;
ID_INDICATO