一、单文档子窗口
OnSize()中通过发送WM_SIZEPARENT消息给子窗口,对于单文档而言,子窗口是CControlBar的派生类和视图View类,ControlBar的子窗口切去自己占有的矩形区,并用::EndDeferWindowPos()来设置,设置之后,对于还有有子窗体,会发送WM_WINDOWPOSCHANGED和WM_SIZE,通知下面的子窗体。
CDocTemplate::InitialUpdateFrame()
ActivateFrame(1)//里面调用了一个ShowWindow,显示所有窗口,发送WM_SIZE消息
CFrameWnd::OnSize()//CMainFrame收到WM_SIZE,交给CFrameWnd::OnSize()处理
{
if (nType != SIZE_MINIMIZED)
RecalcLayout();//调用CFrameWnd::RecalcLayout()
{
RepositionBars(0, 0xffff, AFX_IDW_PANE_FIRST, reposExtra, &m_rectBorder);//AFX_IDW_PANE_FIRST是作为最后一个窗口,占据剩余的空间来安排窗口位置。
{
::GetTopWindow(m_hWnd)、::GetNextWindow()分别获取子窗体、兄弟窗体,发送WM_SIZEPARENT消息
}
AfxRepositionWindow(&layout, hWndLeftOver, &layout.rect);//放置最后一个窗口,hWndLeftOver是上面遍历所有窗口之后,最后一个id = AFX_IDW_PANE_FIRST