[WINDOW/New Window]的处理过程:
void CMDIFrameWnd::OnWindowNew()
{
//获得当前的AcitveChild
CMDIChildWnd* pActiveChild = MDIGetActive();
//获得当前ActiveChild的当前ActiveDocument,同用一个CDocument
CDocument* pDocument;
pDocument = pActiveChild->GetActiveDocument()
//再获得CDocTemplate
CDocTemplate* pTemplate = pDocument->GetDocTemplate();
//创建一个Frame
CFrameWnd* pFrame = pTemplate->CreateNewFrame(pDocument, pActiveChild);
pTemplate->InitialUpdateFrame(pFrame, pDocument);
}
[WINDOW/CASCADE,TILE,ARRAGE]的处理过程
BOOL CMDIFrameWnd::OnMDIWindowCmd(UINT nID)
{
ASSERT(m_hWndMDIClient != NULL);
UINT msg;
UINT wParam = 0;
switch (nID)
{
default:
return FALSE; // not for us
case ID_WINDOW_ARRANGE:
msg = WM_MDIICONARRANGE;
break;
case ID_WINDOW_CASCADE:
msg = WM_MDICASCADE;
break;
case ID_WINDOW_TILE_HORZ:
wParam = MDITILE_HORIZONTAL;
// fall through
case ID_WINDOW_TILE_VERT:
ASSERT(MDITILE_VERTICAL == 0);
msg = WM_MDITILE;
break;
}
::SendMessage(m_hWndMDIClient, msg, wParam, 0);
return TRUE;
}