友情提示:如果本网页打开太慢或显示不完整,请尝试鼠标右键“刷新”本网页!阅读过程发现任何错误请告诉我们,谢谢!! 报告错误
狗狗书籍 返回本书目录 我的书架 我的书签 TXT全本下载 进入书吧 加入书签

C语言实例教程(PDF格式)-第52章

按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 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
返回目录 上一页 下一页 回到顶部 0 0
未阅读完?加入书签已便下次继续阅读!
温馨提示: 温看小说的同时发表评论,说出自己的看法和其它小伙伴们分享也不错哦!发表书评还可以获得积分和经验奖励,认真写原创书评 被采纳为精评可以获得大量金币、积分和经验奖励哦!