home *** CD-ROM | disk | FTP | other *** search
- // mdichild.cpp
- //
- // This is a part of the Microsoft Foundation Classes C++ library.
- // Copyright (C) 1992-1998 Microsoft Corporation
- // All rights reserved.
- //
- // This source code is only intended as a supplement to the
- // Microsoft Foundation Classes Reference and related
- // electronic documentation provided with the library.
- // See these sources for detailed information regarding the
- // Microsoft Foundation Classes product.
- //
- // Purpose: implementation of the CDynaMDIChildWnd class
- //
- // Functions:
- // Most of this file was generated by AppWizard. The functions
- // which contain code specific to this sample are:
- //
- // CDynaMDIChildWnd::OnMDIActivate() -- handle activation/deactivation
- // CDynaMDIChildWnd::RefreshColorMenu() -- update Color submenu contents
-
- #include "stdafx.h"
- #include "dynamenu.h"
- #include "mdichild.h"
- #include "dmdoc.h" // for color menu definitions
-
- #ifdef _DEBUG
- #undef THIS_FILE
- static char BASED_CODE THIS_FILE[] = __FILE__;
- #endif
-
- /////////////////////////////////////////////////////////////////////////////
- // CDynaMDIChildWnd
-
- IMPLEMENT_DYNCREATE(CDynaMDIChildWnd, CMDIChildWnd)
-
- CDynaMDIChildWnd::CDynaMDIChildWnd()
- {
- }
-
- CDynaMDIChildWnd::~CDynaMDIChildWnd()
- {
- }
-
-
- BEGIN_MESSAGE_MAP(CDynaMDIChildWnd, CMDIChildWnd)
- //{{AFX_MSG_MAP(CDynaMDIChildWnd)
- ON_WM_MDIACTIVATE()
- //}}AFX_MSG_MAP
- END_MESSAGE_MAP()
-
-
- /////////////////////////////////////////////////////////////////////////////
- // CDynaMDIChildWnd message handlers
-
-
- //***********************************************************************
- // Function: CDynaMDIChildWnd::OnMDIActivate()
- //
- // Purpose:
- // OnMDIActivate is called for the MDI child window being
- // deactivated and the child window being activated.
- //
- // We override this function so that we can update the Color submenu
- // when a child window is activated. A call to RefreshColorMenu()
- // performs the actual update.
- //
- // Parameters:
- // bActivate -- TRUE if child window being activated, otherwise
- // FALSE
- // pActivateWnd -- pointer to MDI child window being activated
- // pDeactivateWnd -- pointer to MDI child window being deactivated
- //
- // Returns:
- // none
- //
- // Comments:
- // see the CWnd::OnMDIActivate() docs for further information.
- //
- //***********************************************************************
- void CDynaMDIChildWnd::OnMDIActivate(BOOL bActivate, CWnd* pActivateWnd, CWnd* pDeactivateWnd)
- {
- // call the base class to let standard processing switch to
- // the top-level menu associated with this window
- CMDIChildWnd::OnMDIActivate(bActivate, pActivateWnd, pDeactivateWnd);
-
- // do our modifications, if we are being activated
- if (bActivate)
- RefreshColorMenu();
- }
-
- //***********************************************************************
- // Function: CDynaMDIChildWnd::RefreshColorMenu()
- //
- // Purpose:
- // RefreshColorMenu updates the Color submenu so that it only
- // contains the text colors which are enabled for the active document.
- //
- // The Color submenu is located by searching for a submenu with
- // ID_COLOR_OPTIONS as its first menu item.
- //
- // Parameters:
- // none
- //
- // Returns:
- // none
- //
- // Comments:
- // none
- //
- //***********************************************************************
- void CDynaMDIChildWnd::RefreshColorMenu()
- {
- // Get the active document
- CDynaMenuDoc* pDoc = (CDynaMenuDoc*)GetActiveDocument();
- ASSERT_KINDOF(CDynaMenuDoc, pDoc);
-
- // Locate the color submenu
- CMenu* pColorMenu = NULL;
- CMenu* pTopMenu = AfxGetMainWnd()->GetMenu();
- int iPos;
- for (iPos = pTopMenu->GetMenuItemCount()-1; iPos >= 0; iPos--)
- {
- CMenu* pMenu = pTopMenu->GetSubMenu(iPos);
- if (pMenu && pMenu->GetMenuItemID(0) == ID_COLOR_OPTIONS)
- {
- pColorMenu = pMenu;
- break;
- }
- }
- ASSERT(pColorMenu != NULL);
-
- // Update the color submenu to reflect the text colors available to
- // the active document
-
- // First, delete all items but ID_COLOR_OPTIONS at position 0
- for (iPos = pColorMenu->GetMenuItemCount()-1; iPos > 0; iPos--)
- pColorMenu->DeleteMenu(iPos, MF_BYPOSITION);
-
- // Then, add a separator and an item for each available text color
- BOOL bNeedSeparator = TRUE;
- for (int i = 0; i < NUM_TEXTCOLOR; i++)
- {
- if (pDoc->m_abAllowColor[i] == TRUE)
- {
- if (bNeedSeparator)
- {
- pColorMenu->AppendMenu(MF_SEPARATOR);
- bNeedSeparator = FALSE;
- }
- CString strColor;
- strColor.LoadString(pDoc->m_aColorDef[i].m_nString);
- pColorMenu->AppendMenu(MF_STRING,
- pDoc->m_aColorDef[i].m_nID, strColor);
- }
- }
- }
-