DOCWIN.CPP
/* 
 * DOCWIN.CPP 
 * Sample Code Class Libraries 
 * 
 * Window procedure for document windows. 
 * 
 * Copyright (c)1993-1996 Microsoft Corporation, All Rights Reserved 
 * 
 * Kraig Brockschmidt, Software Design Engineer 
 * Microsoft Systems Developer Relations 
 * 
 * Internet  :  kraigb@microsoft.com 
 * Compuserve:  >INTERNET:kraigb@microsoft.com 
 */ 
 
 
 
#include <windows.h> 
#include "classlib.h" 
 
 
 
 
/* 
 * DocumentWndProc 
 * 
 * Purpose: 
 *  Document window class that contains a polyline but does not own 
 *  things like the gizmobar. 
 * 
 *  We handle all commands from menus and gizmobars as well as 
 *  notifications from the polyline itself.  The frame window 
 *  just makes sure that commands and such are dispatched here 
 *  as necessary, especially in an MDI case. 
 */ 
 
LRESULT APIENTRY DocumentWndProc(HWND hWnd, UINT iMsg 
    , WPARAM wParam, LPARAM lParam) 
    { 
    PCDocument      pDoc; 
    BOOL            fOK=FALSE; 
    LPARAM          lTemp; 
    LRESULT         lRet; 
 
    pDoc=(PCDocument)GetWindowLong(hWnd, DOCWL_STRUCTURE); 
 
    if (NULL!=pDoc) 
        { 
        //Call the hook and return its value if it tells us to. 
        if (pDoc->FMessageHook(hWnd, iMsg, wParam, lParam, &lRet)) 
            return lRet; 
        } 
 
 
    switch (iMsg) 
        { 
        case WM_CREATE: 
            /* 
             * Save our object pointer with this window.  We have to 
             * do this inside this message since we don't get the 
             * MDICREATESTRUCT anywhere else. 
             */ 
 
            lTemp=(LPARAM)((LPCREATESTRUCT)lParam)->lpCreateParams; 
            pDoc=(PCDocument)(((LPMDICREATESTRUCT)lTemp)->lParam); 
            SetWindowLong(hWnd, DOCWL_STRUCTURE, (LONG)pDoc); 
            break; 
 
 
        case WM_CLOSE: 
            //Tell our main window to close us 
            if (NULL!=pDoc->m_pAdv) 
                pDoc->m_pAdv->OnCloseRequest(pDoc); 
 
            break; 
 
 
        case WM_QUERYENDSESSION: 
            return TRUE;    //Right now we can always close. 
 
 
        case DOCM_PDOCUMENT: 
            //Return our object pointer 
            return (LONG)pDoc; 
 
        case WM_MDIACTIVATE: 
            /* 
             * NEWMDIACTIVE isolates wParam/lParam differences 
             * between Win16 and Win32. 
             */ 
            if (0!=NEWMDIACTIVE && NULL!=pDoc->m_pAdv) 
                pDoc->m_pAdv->OnActivate(pDoc); 
 
            break; 
 
        case WM_MENUSELECT: 
            { 
            PCStatStrip     pSS; 
 
            pSS=pDoc->m_pFR->GetStatusControl(); 
 
            if (NULL!=pSS) 
                pSS->MenuSelect(wParam, lParam); 
 
            } 
            break; 
 
        default: 
            return DEFDOCUMENTPROC(hWnd, iMsg, wParam, lParam); 
        } 
 
    return 0L; 
    }