MFC创建浮动工具条

本文详细介绍了在MFC中创建浮动工具条的过程,强调了EnableDocking函数的使用和浮动窗口属性的设置。讨论了CBRS_ALIGN_ANY和CBRS_FLOAT_MULTI属性,以及CDockContext如何存储浮动窗口信息。此外,还探讨了CDockBar类在浮动操作中的作用,以及如何通过重载函数处理CControlBar的显示空间分配。最后,提到了SetWindowPos函数在窗口布局计算中的关键作用。
摘要由CSDN通过智能技术生成
void CControlBar::EnableDocking(DWORD dwDockStyle)
{
	ASSERT((dwDockStyle & ~(CBRS_ALIGN_ANY|CBRS_FLOAT_MULTI)) == 0);
	ASSERT(((dwDockStyle & CBRS_FLOAT_MULTI) == 0) || ((m_dwStyle & CBRS_SIZE_DYNAMIC) == 0));
	m_dwDockStyle = dwDockStyle;
	if (m_pDockContext == NULL)
		m_pDockContext = new CDockContext(this);
	if (m_hWndOwner == NULL)
		m_hWndOwner = ::GetParent(m_hWnd);
}

在创建CControlBar类的窗口之后,需要调用两次EnableDocking函数。一次调用相应的浮动窗口的EnableDocking函数设置浮动窗口的一些属性,然后调用父窗口的EnableDocking函数设置父窗口浮动的属性。首先验证窗口创建的属性,因为浮动窗口只可能存在两种情况,第一种依赖在父窗口的边缘,这个属性设置为CBRS_ALIGN_ANY表明依靠到父窗口的某一个边缘,这个边缘由创建时的CBRS_XXX(表示左右上下的四个方位);如果设置为CBRS_FLOAT_MULTI则在创建的时候不能设置CBRS_SIZE_DYNAMIC属性。如果没有设置CBRS_SIZE_DYNAMIC则不论是依靠还是浮动窗口的大小不会改变,不过在用鼠标将工具条浮动之后就不能依靠到父窗口了。验证参数之后,就会根据需要获取父窗口句柄以及浮动的上下文类。其中CDockContext包含浮动窗口的显示信息包括窗口的高和宽以及浮动属性父窗口等等。

void CFrameWnd::EnableDocking(DWORD dwDockStyle)
{
	ASSERT((dwDockStyle & ~(CBRS_ALIGN_ANY|CBRS_FLOAT_MULTI)) == 0);
	m_pFloatingFrameClass = RUNTIME_CLASS(CMiniDockFrameWnd);
	for (int i = 0; i < 4; i++)
	{
		if (dwDockBarMap[i][1] & dwDockStyle & CBRS_ALIGN_ANY)
		{
			CDockBar* pDock = (CDockBar*)GetControlBar(dwDockBarMap[i][0]);
			if (pDock == NULL)
			{
				pDock = new CDockBar;
				if (!pDock->Create(this,
					WS_CLIPSIBLINGS|WS_CLIPCHILDREN|WS_CHILD|WS_VISIBLE |
						dwDockBarMap[i
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值