Adding a Customozied 'More Windows...' Dialog to an MDI Application

To add a customized windows dialog to the windows menu, you just have to take only two following steps in the mainframe class...

  • Override InitPopupMenu and replace it with the following code :
  • #define DEFAULT_NUMBER_OF_MDIS 9
    
    void CMainFrame::OnInitMenuPopup(CMenu* pPopupMenu, 
                                     UINT nIndex, 
                                     BOOL bSysMenu )
    {
     CMDIFrameWnd::OnInitMenuPopup(pPopupMenu, nIndex, bSysMenu);
    
     // If the number of active windows is zero, the window submenu 
     // probably does'nt esists. If you have the window submenu present
     // even in zero child windows, remove this code.
    
     int nCount = 0;
     CWnd * pWnd = GetWindow (GW_CHILD);
     ASSERT (pWnd);
     pWnd = pWnd->GetWindow (GW_CHILD);
     while (pWnd)
     {
      nCount++;
      pWnd = pWnd->GetWindow (GW_HWNDNEXT);
     }
    
     // The count is zero. exit.
     if ( nCount == 0 )
      return;
    
     // If it's a system menu, we don't need to handle that...
     if ( !bSysMenu )
     {
      // The default handler places the "more windows" command in the 
      // submenu which contains IDs between AFX_IDM_FIRST_MDICHILD and 
      // AFX_IDM_LAST_MDICHILD, so check the popup for occurence of
      // AFX_IDM_FIRST_MDICHILD.
    
      int nLength = pPopupMenu->GetMenuItemCount();
      for ( int i = 0; i < nLength; i++ ) 
      { 
       if ( pPopupMenu->GetMenuItemID( i ) == AFX_IDM_FIRST_MDICHILD )
       {
        // Found. If the last item is already the "more windows"
        // command than remove it.
        if ( pPopupMenu->GetMenuItemID( nLength - 1 ) == 
        AFX_IDM_FIRST_MDICHILD + DEFAULT_NUMBER_OF_MDIS ) 
        {
         pPopupMenu->DeleteMenu( nLength - 1, MF_BYPOSITION );
        }
    
        // Add our own window command.
        // Note : The ID must be - ( AFX_IDM_FIRST_MDICHILD +  
        // ( total number of entries in window list supported ) ). 
        // This saves us to make any default handler for the  
        // command, as the default procedure itself 
        // handles the command and sends it to the mainframe class.
        pPopupMenu->AppendMenu(MF_ENABLED|MF_STRING, 
                               AFX_IDM_FIRST_MDICHILD + DEFAULT_NUMBER_OF_MDIS,
                               "&Windows..." );
    
        // Done the processing.
        return;
       }
      }
     }
    }
    
  • Override OnCommand and replace it with the following code:
  • BOOL CMainFrame::OnCommand(WPARAM wParam, LPARAM lParam) 
    {
     // If the command is "more windows" command call our 
     // own customized dialog
     if ( wParam == AFX_IDM_FIRST_MDICHILD + 9 )
     {
      // Replace CWindowDlg with your own class
      CWindowDlg dlgWindowDlg;
      dlgWindowDlg.DoModal();
    
      // OK. We handled the command so return true, 
      // as we don't want the default handler to 
      // handle this command too.
      return TRUE;
     }
    
     return CMDIFrameWnd::OnCommand(wParam, lParam);
    }
    

Downloads

Download demo project - 22 Kb


Comments

  • There are no comments yet. Be the first to comment!

Leave a Comment
  • Your email address will not be published. All fields are required.

Top White Papers and Webcasts

  • Ever-increasing workloads and the challenge of containing costs leave companies conflicted by the need for increased processing capacity while limiting physical expansion. Migration to HP's new generation of increased-density rack-and-blade servers can address growing demands for compute capacity while reducing costly sprawl. Sponsored by: HP and Intel® Xeon® processors Intel, the Intel logo, and Xeon Inside are trademarks of Intel Corporation in the U.S. and/or other countries. HP is the sponsor …

  • The latest release of SugarCRM's flagship product gives users new tools to build extraordinary customer relationships. Read an in-depth analysis of SugarCRM's enhanced ability to help companies execute their customer-facing initiatives from Ovum, a leading technology research firm.

Most Popular Programming Stories

More for Developers

Latest Developer Headlines

RSS Feeds