神仙见了也发愁的问题。。。。。。。。。。。。。
我定义一个 dialogbar 的继承控件。。。。。。
当父窗口尺寸改变。。。。。。要修改相应的 dialogbar 的客户区高度。。。
所以重载了 OnNcCalcSize
但是我的客户好象反应不是很好。。。客户区的的面积对应不上 !
当拖动边框的时候,特别是上下两个边框的时候, 客户区面积根本不会变化!
没办法在父窗口的
OnWindowPosChanged 中加了一句:
RecalcLayout()
解决问题 !
但是我看别人做的从 CONTROLBAR 继承的控件只要一激活就会进入:
OnNcCalcSize 事件;
但是我的反应非常不灵活 !代码是一样的代码:
GetWindowRect(m_rectBorder);
m_rectBorder = CRect(0, 0, m_rectBorder.Width(), m_rectBorder.Height());
DWORD dwBorderStyle = m_dwStyle | CBRS_BORDER_ANY;
switch(m_nDockBarID)
{
case AFX_IDW_DOCKBAR_TOP:
dwBorderStyle &= ~CBRS_BORDER_BOTTOM;
lpncsp->rgrc[0].left += m_cxGripper;
lpncsp->rgrc[0].bottom += -m_cxEdge;
lpncsp->rgrc[0].top += m_cxBorder;
lpncsp->rgrc[0].right += -m_cxBorder;
m_rectBorder.top = m_rectBorder.bottom - m_cxEdge;
break;
case AFX_IDW_DOCKBAR_BOTTOM:
dwBorderStyle &= ~CBRS_BORDER_TOP;
lpncsp->rgrc[0].left += m_cxGripper;
lpncsp->rgrc[0].top += m_cxEdge;
lpncsp->rgrc[0].bottom += -m_cxBorder;
lpncsp->rgrc[0].right += -m_cxBorder;
m_rectBorder.bottom = m_rectBorder.top + m_cxEdge;
break;
case AFX_IDW_DOCKBAR_LEFT:
dwBorderStyle &= ~CBRS_BORDER_RIGHT;
lpncsp->rgrc[0].right += -50;// -m_cxEdge;
lpncsp->rgrc[0].left += m_cxBorder;
lpncsp->rgrc[0].bottom += -150;//-m_cxBorder;
lpncsp->rgrc[0].top += 50;// m_cxGripper;
m_rectBorder.left = m_rectBorder.right - m_cxEdge;
break;
case AFX_IDW_DOCKBAR_RIGHT:
dwBorderStyle &= ~CBRS_BORDER_LEFT;
lpncsp->rgrc[0].left += m_cxEdge;
lpncsp->rgrc[0].right += -m_cxBorder;
lpncsp->rgrc[0].bottom += -m_cxBorder;
lpncsp->rgrc[0].top += m_cxGripper;
m_rectBorder.right = m_rectBorder.left + m_cxEdge;
break;
default:
m_rectBorder.SetRectEmpty();
break;
}
SetBarStyle(dwBorderStyle);