6.3--如何通过编程来实现将一个工具栏紧随另一个工具栏停靠?

      如果你的应用程序添加了几个工具栏,你将需要一个控制他们初始停靠位置的方法,重复调用CFrameWnd::DockControlBar()并不是办法,因为标准的MFC布置算法将把每个工具栏放置在不同的停靠区,你可能更希望把这些工具栏停靠在同一停靠区,那么就需要借助下面的函数:

void EkDockBarNextTo(CControlBar* pNewBar,CControlBar* pDockedBar,UINT nDockBarID=AFX_IDW_DOCKBAR_TOP)
{
      ASSERT_VALID( pDockedBar );
      ASSERT_VALID( pNewBar );

      // 1 - 找到将要停靠的框架
      CFrameWnd* pFrame = pDockedBar->GetDockingFrame();

 

      // 2 - 强制MFC计算停靠工具条的位置
      pFrame->RecalcLayout();

 

      // 3 - 计算已经停靠的工具条的CRect
      CRect rect;
      pDockedBar->GetWindowRect( &rect );

 

      // 4 -轻微的将该矩形偏移到右下,从而使新的条停靠在已存在的条的右部或底部
      rect.OffsetRect(1,1);

 

      // 5 - 将新的工具条停靠在指定的位置
      pFrame->DockControlBar( pNewBar, nDockBarID, &rect );

}

 

下面的代码说明了如何使用这个函数:

//新工具栏停靠
 m_wndNewToolbar.EnableDocking( CBRS_ALIGN_ANY );
 EkDockBarNextTo(&m_wndNewToolbar,&m_wndToolBar,AFX_IDW_DOCKBAR_TOP);


CFrameWnd::RecalcLayout

virtual void RecalcLayout(BOOL bNotify = TRUE);

参数:

bNotify 决定活动的项目 是否接收 布局改变通知。如果为TRUE,则此项被通知,否则不通知。

说明:
当标准控制条正在开/关 或 框架窗口重新设置大小时,由框架调用。此成员函数的缺省实现是调用CWnd的成员函数RepositionBars在 框架 和 主客户窗口中 重新定位各种控件条,主客户窗口 通常是CView或MDICLIENT。
覆盖此函数,在框架窗口设计 改变时 控制外观形式和动作。例如 在使 控件条开或闭或加入另一个控件条时调用它。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值