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

1.1       root        1: Microsoft Foundation Classes                             Microsoft Corporation
                      2: Technical Notes                                        
                      3: 
                      4: #1 : WNDCLASSes and MFC
                      5: 
                      6: This note describes the MFC routines for registering special
                      7: WNDCLASSes as needed by MS-Windows.  Specific WNDCLASS attributes
                      8: used by MFC and Windows are discussed.
                      9: 
                     10: =============================================================================
                     11: 
                     12: The Problem
                     13: ===========
                     14: 
                     15: The attributes of a CWnd object, like an HWND in Windows, are stored
                     16: in two places, the window object and the WNDCLASS.  A WNDCLASS is different
                     17: than a C++ class.  The MFC C++ class in Windows still requires that
                     18: the name of a WNDCLASS be passed to the creation function.  This WNDCLASS
                     19: must be registered via one of four means:
                     20: 
                     21:     * implicitly by MFC
                     22:     * implicitly by an MS-Windows control (or some other control)
                     23:     * explicitly by calling the MFC routine AfxRegisterClass
                     24:     * explicitly by calling the Windows routine RegisterClass
                     25: 
                     26: -----------------------------------------------------------------------------
                     27: WNDCLASSes and MFC
                     28: ==================
                     29: 
                     30: The WNDCLASS structure consists of various fields used to describe a
                     31: window class.  Here are the fields and how they apply to an MFC app.
                     32: 
                     33:     style               -- style of window, see below
                     34:     lpfnWndProc         -- window proc, must be 'AfxWndProc'
                     35:     cbClsExtra          -- not used
                     36:     cbWndExtra          -- not used
                     37:     hInstance           -- automatically filled with AfxGetInstanceHandle()
                     38:     hIcon               -- icon for frame windows, see below
                     39:     hCursor             -- cursor for when mouse is over window, see below
                     40:     hbrBackground       -- background color, see below
                     41:     lpszMenuName        -- not used
                     42:     lpszClassName       -- class name, see below
                     43: 
                     44: -----------------------------------------------------------------------------
                     45: Provided WNDCLASSes
                     46: ===================
                     47: 
                     48: MFC provides 3 standard window classes.
                     49: 
                     50:     "AfxWnd" is used for all child windows created with CWnd::Create().
                     51: 
                     52:     "AfxFrameWnd" is used for frame windows (both stand-alone CFrameWnds
                     53:     and CMDIChildWnds).
                     54: 
                     55:     "AfxMDIFrameWnd" is used for the MDI frame window (i.e. the parent)
                     56:     created with CMDIFrameWnd::Create().
                     57: 
                     58: 
                     59: The following table shows the registered attributes:
                     60: 
                     61: Class name -->     AfxWnd    AfxFrameWnd          AfxMDIFrameWnd
                     62: 
                     63: Attribute
                     64: ---------
                     65: style              0         0                    0
                     66: icon               none      AFX_IDI_STD_FRAME    AFX_IDI_STD_MDIFRAME
                     67: cursor             arrow     arrow                arrow
                     68: background color   none      COLOR_WINDOW         n/a
                     69: 
                     70: NOTE: if the application provides a resource with the specified 'AFX_ID*'
                     71: resource ID, MFC will use that resource.  Otherwise the default resource
                     72: is used.  For the icon, the standard app icon is used (a white box),
                     73: and for the cursor, the standard arrow cursor is used.
                     74: 
                     75: NOTE: we provide two alternative icons for supporting MDI applications
                     76: with single document types (one icon for the main app, the other icon
                     77: for iconic document/MDIChild windows).  If you desire an MDI application
                     78: with multiple document types with different icons, you must register
                     79: additional WNDCLASSes.
                     80: 
                     81: NOTE: the values for background color and cursor for the MDIFrameWnd
                     82: are not used since the client area of the MDIFrameWnd is completely
                     83: covered with the "MDICLIENT" window.  We do not support subclassing
                     84: of the "MDICLIENT" window and you should be sticking to the standard
                     85: colors and cursor types.
                     86: 
                     87: -----------------------------------------------------------------------------
                     88: Subclassing controls:
                     89: =====================
                     90: 
                     91: If you subclass or superclass a Windows control (eg: CButton) then your class
                     92: automatically gets the WNDCLASS attributes as provided in the Windows
                     93: implementation of that control.
                     94: 
                     95: -----------------------------------------------------------------------------
                     96: The AfxRegisterWndClass() Function
                     97: ==================================
                     98: 
                     99: MFC provides a helper routine for registering a window class.
                    100: Given a set of attributes for: window class style, cursor,
                    101: background brush and icon, a synthetic name is generated, and
                    102: the resulting window class registered.
                    103: 
                    104: const char* AfxRegisterWndClass(UINT nClassStyle,
                    105:         HCURSOR hCursor, HBRUSH hbrBackground, HICON hIcon);
                    106: 
                    107: This function takes the arguments (all except the first one default
                    108: to zero) and returns a temporary string of the registered window
                    109: class.
                    110: 
                    111: AfxRegisterWndClass will throw a CResourceException if the window
                    112: class failed to register (either because of bad parameters, or out of
                    113: Windows memory).
                    114: 
                    115: NOTE: the string returned is a temporary pointer to a static string buffer
                    116: which is valid until the next call to AfxRegisterWndClass.  If you want
                    117: to keep this string around, store it in a CString variable.
                    118: 
                    119:         CString wndClass = AfxRegisterWndClass(CS_DBLCLK, defaultCursor);
                    120: 
                    121:         ...
                    122:         CWnd wnd;
                    123:         wnd.Create(wndClass, ...);
                    124:         ...
                    125: 
                    126: -----------------------------------------------------------------------------
                    127: Last resort: use RegisterClass
                    128: ==============================
                    129: 
                    130: If you want to do anything more sophisticated than what
                    131: AfxRegisterWndClass provides, you can always call the Windows API
                    132: 'RegisterClass'.
                    133: 
                    134: Most of the MFC window creation routines take a string name for a
                    135: window class as the first parameter, and any window class name
                    136: can be used, regardless of how it was registered.
                    137: 
                    138: -----------------------------------------------------------------------------

unix.superglobalmegacorp.com

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