下载本文示例代码
使用过OFFICE、Visual Studio等工具的朋友们注意过没有,在上述工具在程序界面上都提供了多个工具条,其中两个或多个工具条可以在一行中并行排列,每个工具条拖动后又可以实现"浮动"效果。在实际的软件开发中,我们也常常需要创建多个自定义的工具条,并且要象标准的工具条那样,允许用户通过鼠标将自定义的工具条移动到框架的其它地方。那么这种功能是如何实现的呢?针对这个问题,本实例提供了一种解决方法,程序编译运行后代的界面效果如图一所示:
(a)"浮动"状态的工具条
(b)并列工具条
图一、工具条示例 一、实现方法 一般情况Visual C 生成的程序中会自动处理一个默认的工具条IDR_MAINFRAME,所以开发人员要作的工作是处理一个自定义的工具条。首先调用CframeWnd::RecalcLayout()函数来让Windows重新调整计算界面中各个工具条的尺寸大小,该函数原型如下:
virtual void RecalcLayout( BOOL bNotify = TRUE ); 函数中的参数bNotify为TRUE时,Windows会向在活动控件发出外观尺寸变化的通知消息,否则就不会发出该通知消息。 当Windows将程序中默认的工具条精确定位后,还要得到该默认工具条的尺寸和风格,得到它的尺寸是为了确定自定义工具条的停靠区域,本实例的解决办法是在用CWnd::GetWindowRect()函数的到默认工具条的尺寸后,将该尺寸右移一个像素,这样以来在确定自定义工具条的显示过程中Windows会根据此尺寸自动调整显示区域。判断默认工具条的风格是为了得到它的停靠信息,如停靠在顶端、底端、左侧或右側等,这样自定义工具条好根据该信息确定同样的停靠位置。这里面有一个小技巧,使用CToolBar::GetBarStyle()得到的工具属性很多,需要屏蔽掉其它属性,而只留下停靠属性,为此,使用了如下代码:
dw=LeftOf->GetBarStyle();n = 0;n = (dw&CBRS_ALIGN_TOP) ? AFX_IDW_DOCKBAR_TOP : n;n = (dw&CBRS_ALIGN_BOTTOM && n==0) ? AFX_IDW_DOCKBAR_BOTTOM : n;n = (dw&CBRS_ALIGN_LEFT && n==0) ? AFX_IDW_DOCKBAR_LEFT : n;n = (dw&CBRS_ALIGN_RIGHT && n==0) ? AFX_IDW_DOCKBAR_RIGHT : n; 上面的代码首先判断工具条是否是停靠在顶端,如是,n等于AFX_IDW_DOCKBAR_TOP,否则n等与初始值0,然后继续进行停靠属性的判断。 最后,调用DockControlBar()函数来停靠字定义工具条,该函数的原型如下:
void DockControlBar( CControlBar * pBar, UINT nDockBarID = 0, LPCRECT lpRect = NULL ); 函数中参数pBar代表要停靠的工具条,参数nDockBarID为工具条要停靠的风格,参数lpRect为工具条要停靠的区域,注意该区域的坐标要设置为窗口的坐标。共2页。 1 2 :
使用过OFFICE、Visual Studio等工具的朋友们注意过没有,在上述工具在程序界面上都提供了多个工具条,其中两个或多个工具条可以在一行中并行排列,每个工具条拖动后又可以实现"浮动"效果。在实际的软件开发中,我们也常常需要创建多个自定义的工具条,并且要象标准的工具条那样,允许用户通过鼠标将自定义的工具条移动到框架的其它地方。那么这种功能是如何实现的呢?针对这个问题,本实例提供了一种解决方法,程序编译运行后代的界面效果如图一所示:
(a)"浮动"状态的工具条
(b)并列工具条
图一、工具条示例 一、实现方法 一般情况Visual C 生成的程序中会自动处理一个默认的工具条IDR_MAINFRAME,所以开发人员要作的工作是处理一个自定义的工具条。首先调用CframeWnd::RecalcLayout()函数来让Windows重新调整计算界面中各个工具条的尺寸大小,该函数原型如下:
virtual void RecalcLayout( BOOL bNotify = TRUE ); 函数中的参数bNotify为TRUE时,Windows会向在活动控件发出外观尺寸变化的通知消息,否则就不会发出该通知消息。 当Windows将程序中默认的工具条精确定位后,还要得到该默认工具条的尺寸和风格,得到它的尺寸是为了确定自定义工具条的停靠区域,本实例的解决办法是在用CWnd::GetWindowRect()函数的到默认工具条的尺寸后,将该尺寸右移一个像素,这样以来在确定自定义工具条的显示过程中Windows会根据此尺寸自动调整显示区域。判断默认工具条的风格是为了得到它的停靠信息,如停靠在顶端、底端、左侧或右側等,这样自定义工具条好根据该信息确定同样的停靠位置。这里面有一个小技巧,使用CToolBar::GetBarStyle()得到的工具属性很多,需要屏蔽掉其它属性,而只留下停靠属性,为此,使用了如下代码:
dw=LeftOf->GetBarStyle();n = 0;n = (dw&CBRS_ALIGN_TOP) ? AFX_IDW_DOCKBAR_TOP : n;n = (dw&CBRS_ALIGN_BOTTOM && n==0) ? AFX_IDW_DOCKBAR_BOTTOM : n;n = (dw&CBRS_ALIGN_LEFT && n==0) ? AFX_IDW_DOCKBAR_LEFT : n;n = (dw&CBRS_ALIGN_RIGHT && n==0) ? AFX_IDW_DOCKBAR_RIGHT : n; 上面的代码首先判断工具条是否是停靠在顶端,如是,n等于AFX_IDW_DOCKBAR_TOP,否则n等与初始值0,然后继续进行停靠属性的判断。 最后,调用DockControlBar()函数来停靠字定义工具条,该函数的原型如下:
void DockControlBar( CControlBar * pBar, UINT nDockBarID = 0, LPCRECT lpRect = NULL ); 函数中参数pBar代表要停靠的工具条,参数nDockBarID为工具条要停靠的风格,参数lpRect为工具条要停靠的区域,注意该区域的坐标要设置为窗口的坐标。共2页。 1 2 :
下载本文示例代码
VC 中定制并列/浮动状态的工具条VC 中定制并列/浮动状态的工具条VC 中定制并列/浮动状态的工具条VC 中定制并列/浮动状态的工具条VC 中定制并列/浮动状态的工具条VC 中定制并列/浮动状态的工具条VC 中定制并列/浮动状态的工具条VC 中定制并列/浮动状态的工具条VC 中定制并列/浮动状态的工具条VC 中定制并列/浮动状态的工具条VC 中定制并列/浮动状态的工具条VC 中定制并列/浮动状态的工具条VC 中定制并列/浮动状态的工具条VC 中定制并列/浮动状态的工具条VC 中定制并列/浮动状态的工具条