/设置偏移植以停靠在同一边上
----dw=LeftOf->GetBarStyle();
----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;
----DockControlBar(Bar,n,&rect);
----}
----在这个函数中应注意对RecalcLayout()函数和OffestRect()函数的调用,前者用来重新显示被调整的客户区和工具条,后者用来重新确定矩形区域,这相当于利用鼠标将第二个工具条窗口拖动到前一个工具条上然后释放。
----3.修改应用程序建立函数OnCreate()中的相应DockControlBar()函数为DockControlBarOf()函数,并正确设置工具条对象的指针。笔者在实现
程序中的控制代码如下:
----EnableDocking(CBRS_ALIGN_ANY);//停靠位置必须在最前面
----//工具条建立函数
----m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
----m_wndTestToolBar.EnableDocking(CBRS_ALIGN_ANY);
----DockControlBar(&m_wndToolBar,AFX_IDW_DOCKBAR_TOP);
----//使两个工具条并列停靠
----DockControlBarLeftOf(&m_wndTestToolBar,&m_wndToolBar);
----工具条的顶部停靠控制
----1.打开菜单资源增加顶部位置控制菜单项IDD_DLGBARTOP;
----2.在实现文件MainFrm.h中增加成员控制变量m_bDialogTop:
----BOOLm_bDialogTop;
----并在构造函数中设置初始值;
----3.利用类向导ClassWizard为菜单项设置响应函数;
----4.在实现文件MainFrm.cpp中通过充分利用SetWindowPos()成员完善消息映射功能。
voidCMainFrame::OnButtonDIgbartop()
{//定制工具条顶部位置控制函数
if(m_bDialogTop)
m_wndDIgBar.SetWindowPos(&m_wndStatusBar,0,0,0,0,
SWP_NOSIZE|SWP_NOMOVE);
//顶部工具条停靠在窗口边,左右工具条停靠其下
else
m_wndDIgBar.SetWindowPos(&wndTop,0,0,0,0,
SWP_NOSIZE|SWP_NOMOVE);//停靠在最顶部
RecalcLayout();//重新显示窗口
m_bDialogTop=!m_bDialogTop;//改变变量标志
}
voidCMainFrame::OnUpdateButtonDIgbartop(CCmdUI*pCmdUI)
{//设置菜单项检查状态更新函数
pCmdUI-SetCheck(m_bDialogTop);
}
----这样,就可利用菜单项来控制定制工具条的顶部停靠位置。