void CMDIChildWnd::OnUpdateFrameMenu(BOOL bActivate, CWnd* pActivateWnd, HMENU hMenuAlt) { CMDIFrameWnd* pFrame = GetMDIFrame(); if (hMenuAlt == NULL && bActivate) { // attempt to get default menu from document CDocument* pDoc = GetActiveDocument(); if (pDoc != NULL) hMenuAlt = pDoc->GetDefaultMenu(); } // use default menu stored in frame if none from document if (hMenuAlt == NULL) hMenuAlt = m_hMenuShared; if (hMenuAlt != NULL && bActivate) { ASSERT(pActivateWnd == this); // activating child, set parent menu ::SendMessage(pFrame->m_hWndMDIClient, WM_MDISETMENU, (WPARAM)hMenuAlt, (LPARAM)pFrame->GetWindowMenuPopup(hMenuAlt)); } else if (hMenuAlt != NULL && !bActivate && pActivateWnd == NULL) { // destroying last child HMENU hMenuLast = NULL; ::SendMessage(pFrame->m_hWndMDIClient, WM_MDISETMENU, (WPARAM)pFrame->m_hMenuDefault, (LPARAM)hMenuLast); } else { // refresh MDI Window menu (even if non-shared menu) ::SendMessage(pFrame->m_hWndMDIClient, WM_MDIREFRESHMENU, 0, 0); } }