Annotation of mstools/mfc/doc/tn005.txt, revision 1.1.1.1

1.1       root        1: Microsoft Foundation Classes                           Microsoft Corporation
                      2: Technical Notes 
                      3: 
                      4: #5 : Multiple Document Interface (MDI) and Foundation
                      5: 
                      6: This note describes the Foundation routines for supporting the
                      7: Multiple Document Interface (MDI) of MS-Windows.
                      8: 
                      9: -----------------------------------------------------------------------------
                     10: The Problem
                     11: ===========
                     12: 
                     13: Creating a MDI frame window traditionally requires quite a bit of
                     14: "boiler-plate" code.  In order to simplify writing an MDI
                     15: application, the Foundation class library provides as much of this
                     16: boiler-plate code as possible.  Because of this, the steps required
                     17: to create an MDI frame window are different than in traditional
                     18: MS-Windows programming.
                     19: 
                     20: -----------------------------------------------------------------------------
                     21: Creating a MDI Frame Window
                     22: ===========================
                     23: 
                     24: 1. Define a new class derived from CMDIFrameWnd
                     25: 2. In the derived class constructor, invoke (for example):
                     26: 
                     27:    Create(NULL, pTitle, WS_OVERLAPPEDWINDOW, rectDefault, NULL, pMenuName);
                     28: 
                     29: Notes:
                     30: See MFC sample programs (sample\minmdi, sample\mdi, sample\multi) for
                     31: complete, working examples of how to call CMDIFrameWnd::Create.
                     32: 
                     33: The MDICLIENT window (the area where MDI children appear) is created
                     34: by CMDIFrameWnd::CreateClient which is called from the default
                     35: WM_CREATE handler for CMDIFrameWnd.  
                     36: 
                     37: When a MDICLIENT window is created it must be told which menu should
                     38: contain the list of open MDI child windows and where the range of IDs
                     39: for MDI child windows starts.  
                     40: 
                     41: CMDIFrameWnd::OnCreate assumes the Window menu is the second from
                     42: the right end of the menu bar (in conformance with the User Interface
                     43: Style Guide) and that MDI child window IDs should start at
                     44: AFX_IDM_FIRST_MDICHILD (which is defined to be 0xff00; Windows and 
                     45: Foundation reserve IDs between 0xf000 and 0xffff for system use).
                     46: 
                     47: If the default menu position is not satisfactory, OnCreate should be 
                     48: overridden and CreateClient called appropriately.
                     49: 
                     50: 
                     51: -----------------------------------------------------------------------------
                     52: Creating a MDI Child Window
                     53: ===========================
                     54: 
                     55: 1. Define a new class derived from CMDIFrameWnd
                     56: 2. In the derived class constructor, invoke (for example):
                     57:     
                     58:    Create(NULL, pTitle, 0, rectDefault, pMDIFrameWnd)
                     59: 
                     60: As above, see the MDI sample applications for complete examples.
                     61: 
                     62: -----------------------------------------------------------------------------
                     63: Command Accelerators
                     64: ====================
                     65: 
                     66: The default PreTranslateMessage functions handle manually loaded
                     67: accelerator tables for both MDI child windows and the MDI frame as
                     68: well as the standard MDI system-command accelerators normally handled
                     69: by TranslateMDISysAccel.
                     70: 
                     71: If the active MDI child window has an accelerator table attached to
                     72: it, that table is searched first for keys as they are pressed.  If a
                     73: key is not found in the child's table, the MDI frame window is
                     74: checked.  If the key is not found in the frame's table either or the
                     75: frame does not have a table, the key is passed to TranslateMDISysAccel.  
                     76: If that function translates the key, processing of the key stops.
                     77: Otherwise, the key is sent to the window with the focus via one of
                     78: OnKeyDown, OnSysKeyDown, OnChar, or OnSysChar.
                     79: 
                     80: -----------------------------------------------------------------------------
                     81: Other Functions
                     82: ===============
                     83: 
                     84: MDI Frame Windows
                     85: -----------------
                     86: 
                     87: GetChildFrame   --  returns the active MDI child window or 
                     88:                     'this' if there are no children.
                     89: GetParentFrame  --  returns 'this'.
                     90: MDIActivate     --  activates a particular MDI child.
                     91: MDICascade      --  arranges the MDI children so they overlap.
                     92: MDIGetActive    --  returns the active MDI child window or 
                     93:                     NULL if there are no children.
                     94: MDIIconArrange  --  arranges the MDI child icons.
                     95: MDIMaximize     --  maximizes a particular MDI child window.
                     96: MDINext         --  activate a different MDI child window.
                     97: MDIRestore      --  restores a particular MDI child window.
                     98: MDISetMenu      --  change the menu bar.
                     99: MDITile         --  arranges the MDI children to they don't overlap.
                    100: 
                    101: 
                    102: MDI Child Windows
                    103: -----------------
                    104: 
                    105: GetChildFrame   --  returns 'this'.
                    106: GetParentFrame  --  returns the parent MDI frame window.
                    107: MDIDestroy      --  destroys this MDI child window.
                    108: MDIActivate     --  activates this MDI child window.
                    109: MDIMaximize     --  maximizes this MDI child window.
                    110: MDIRestore      --  restores this MDI child window.

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.