我有CFrameWndEx几个停靠CDockablePanes的窗口,但是当停靠窗格的大小更改时,我似乎无法收到通知(因此我可以相应地调整其他窗口的大小)。尝试 Spy++ 来检查消息,但自定义绘制似乎是唯一的(这似乎不合适)并且还尝试覆盖 RecalcLayout,但在这种情况下不会调用。 OnSize不起作用,因为框架本身的大小没有改变。有任何想法吗?
(Ps:我很确定这是可能的,因为我曾经有一个拆分窗口作为“客户”区域,并且在调整窗格大小时它会神奇地调整自己的大小)
好吧,这有点奇怪,但我有完全相同的问题,在谷歌上搜索,然后看到我一年多前回答过这个问题,但完全误解了问题的含义:)
无论如何,作为未来 Google 使用人员的参考,这个问题的答案是重写 virtual void CFrameWndEx::EAdjustDockingLayout(HDWP hdwp) 并在那里调整客户端控件的大小。要在隐藏/关闭/任何窗格后获取客户区,请使用 m_dockManager.GetClientAreaBounds()。我的AdjustDockingLayout看起来像这样(m_View是子窗口,无论任何停靠窗格的状态如何,它都应该填充整个客户区域,根据需要进行调整):
void CMainFrame::AdjustDockingLayout(HDWP hdwp)
{
CFrameWndEx::AdjustDockingLayout(hdwp);
if (m_View.GetSafeHwnd()) {
CRect rectUsable = m_dockManager.GetClientAreaBounds();
m_View.MoveWindow(rectUsable);
}
}
Run Code Online (Sandbox Code Playgroud)