Annotation of mstools/ole20/samples/outline/main.c, revision 1.1.1.1

1.1       root        1: /*************************************************************************
                      2: ** 
                      3: **    OLE 2 Sample Code
                      4: **    
                      5: **    main.c
                      6: **    
                      7: **    This file contains initialization functions which are WinMain,
                      8: **    WndProc, and OutlineApp_InitalizeMenu.
                      9: **    
                     10: **    (c) Copyright Microsoft Corp. 1992 - 1993 All Rights Reserved
                     11: **
                     12: *************************************************************************/
                     13: 
                     14: #if defined( OLE_SERVER ) || defined( OLE_CNTR )
                     15: // OLE2NOTE: we must force our CLSID GUIDs to be initialized exactly once.
                     16: #define INITCLSID
                     17: #endif
                     18: 
                     19: #include "outline.h"
                     20: #if defined( USE_STATUSBAR )
                     21: #include "status.h"
                     22: #endif  
                     23: 
                     24: #if !defined( WIN32 )
                     25: #if defined( USE_CTL3D )
                     26: #include "ctl3d.h"
                     27: #endif  // USE_CTL3D
                     28: #endif  // !WIN32
                     29: 
                     30: #if defined( OLE_CNTR )
                     31: 
                     32: #if defined( INPLACE_CNTR )
                     33: OLEDBGDATA_MAIN("ICNTR")
                     34: #else 
                     35: OLEDBGDATA_MAIN("CNTR")
                     36: #endif 
                     37: 
                     38: CONTAINERAPP g_OutlineApp;  // Global App object maintains app instance state
                     39: 
                     40: /* Global interface Vtbl's
                     41:  * OLE2NOTE: we only need one copy of each Vtbl. When an object which 
                     42:  *      exposes an interface is instantiated, its lpVtbl is intialized
                     43:  *      to point to one of these global Vtbl's.
                     44:  */
                     45: IUnknownVtbl            g_OleApp_UnknownVtbl;
                     46: IClassFactoryVtbl       g_OleApp_ClassFactoryVtbl;
                     47: IMessageFilterVtbl      g_OleApp_MessageFilterVtbl;
                     48: 
                     49: IUnknownVtbl            g_OleDoc_UnknownVtbl;
                     50: IPersistFileVtbl        g_OleDoc_PersistFileVtbl;
                     51: IOleItemContainerVtbl   g_OleDoc_OleItemContainerVtbl;
                     52: IDataObjectVtbl         g_OleDoc_DataObjectVtbl;
                     53: 
                     54: #if defined( USE_DRAGDROP )
                     55: IDropSourceVtbl         g_OleDoc_DropSourceVtbl;
                     56: IDropTargetVtbl         g_OleDoc_DropTargetVtbl;
                     57: #endif  // USE_DRAGDROP
                     58: 
                     59: IOleUILinkContainerVtbl g_CntrDoc_OleUILinkContainerVtbl;
                     60: 
                     61: IOleClientSiteVtbl      g_CntrLine_UnknownVtbl;
                     62: IOleClientSiteVtbl      g_CntrLine_OleClientSiteVtbl;
                     63: IAdviseSinkVtbl         g_CntrLine_AdviseSinkVtbl;
                     64: 
                     65: #if defined( INPLACE_CNTR )
                     66: IOleInPlaceSiteVtbl     g_CntrLine_OleInPlaceSiteVtbl;
                     67: IOleInPlaceFrameVtbl    g_CntrApp_OleInPlaceFrameVtbl;
                     68: BOOL g_fInsideOutContainer = FALSE;     // default to outside-in activation
                     69: #endif  // INPLACE_CNTR
                     70: 
                     71: 
                     72: #elif defined( OLE_SERVER )
                     73: 
                     74: 
                     75: #if defined( INPLACE_SVR )
                     76: OLEDBGDATA_MAIN("ISVR")
                     77: #else 
                     78: OLEDBGDATA_MAIN("SVR")
                     79: #endif 
                     80: 
                     81: SERVERAPP g_OutlineApp; // Global App object maintains app instance state
                     82: 
                     83: /* Global interface Vtbl's
                     84:  * OLE2NOTE: we only need one copy of each Vtbl. When an object which 
                     85:  *      exposes an interface is instantiated, its lpVtbl is intialized
                     86:  *      to point to one of these global Vtbl's.
                     87:  */
                     88: IUnknownVtbl            g_OleApp_UnknownVtbl;
                     89: IClassFactoryVtbl       g_OleApp_ClassFactoryVtbl;
                     90: IMessageFilterVtbl      g_OleApp_MessageFilterVtbl;
                     91: 
                     92: IUnknownVtbl            g_OleDoc_UnknownVtbl;
                     93: IPersistFileVtbl        g_OleDoc_PersistFileVtbl;
                     94: IOleItemContainerVtbl   g_OleDoc_OleItemContainerVtbl;
                     95: IDataObjectVtbl         g_OleDoc_DataObjectVtbl;
                     96: 
                     97: #if defined( USE_DRAGDROP )
                     98: IDropSourceVtbl         g_OleDoc_DropSourceVtbl;
                     99: IDropTargetVtbl         g_OleDoc_DropTargetVtbl;
                    100: #endif  // USE_DRAGDROP
                    101: 
                    102: IOleObjectVtbl          g_SvrDoc_OleObjectVtbl;
                    103: IPersistStorageVtbl     g_SvrDoc_PersistStorageVtbl;
                    104: 
                    105: #if defined( SVR_TREATAS )
                    106: IStdMarshalInfoVtbl            g_SvrDoc_StdMarshalInfoVtbl;
                    107: #endif // SVR_TREATAS
                    108: 
                    109: #if defined( INPLACE_SVR )
                    110: IOleInPlaceObjectVtbl       g_SvrDoc_OleInPlaceObjectVtbl;
                    111: IOleInPlaceActiveObjectVtbl g_SvrDoc_OleInPlaceActiveObjectVtbl;
                    112: #endif // INPLACE_SVR
                    113: 
                    114: IUnknownVtbl            g_PseudoObj_UnknownVtbl;
                    115: IOleObjectVtbl          g_PseudoObj_OleObjectVtbl;
                    116: IDataObjectVtbl         g_PseudoObj_DataObjectVtbl;
                    117: 
                    118: #else 
                    119: 
                    120: OLEDBGDATA_MAIN("OUTL")
                    121: 
                    122: OUTLINEAPP g_OutlineApp;    // Global App object maintains app instance state
                    123: 
                    124: #endif
                    125: 
                    126: 
                    127: 
                    128: LPOUTLINEAPP g_lpApp=(LPOUTLINEAPP)&g_OutlineApp;   // ptr to global app obj
                    129: RECT        g_rectNull = {0, 0, 0, 0};
                    130: UINT        g_uMsgHelp = 0;  // help msg from ole2ui dialogs 
                    131: 
                    132: 
                    133: /* WinMain
                    134: ** -------
                    135: **    Main routine for the Windows application.
                    136: */
                    137: int PASCAL WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
                    138:                         LPSTR lpszCmdLine, int nCmdShow)
                    139: {
                    140:     LPOUTLINEAPP lpOutlineApp = (LPOUTLINEAPP)g_lpApp;
                    141:     MSG         msg;            /* MSG structure to store your messages */
                    142: 
                    143: #if defined( OLE_VERSION )
                    144:     /* OLE2NOTE: it is recommended that all OLE applications to set
                    145:     **    their message queue size to 96. this improves the capacity
                    146:     **    and performance of OLE's LRPC mechanism.
                    147:     */
                    148:     int cMsg = 96;   // recommend msg queue size for OLE
                    149:     while (cMsg && ! SetMessageQueue(cMsg))  // take largest size we can get.
                    150:         cMsg -= 8;   
                    151:     if (! cMsg) 
                    152:         return -1;  // ERROR: we got no message queue
                    153: #endif
                    154: 
                    155: #if defined( USE_CTL3D )
                    156:    Ctl3dRegister(hInstance);
                    157:    Ctl3dAutoSubclass(hInstance);
                    158: #endif
                    159: 
                    160:     if(! hPrevInstance) {
                    161:         /* register window classes if first instance of application */
                    162:         if(! OutlineApp_InitApplication(lpOutlineApp, hInstance))
                    163:             return 0;
                    164:     }
                    165: 
                    166:     /* Create App Frame window */
                    167:     if (! OutlineApp_InitInstance(lpOutlineApp, hInstance, nCmdShow)) 
                    168:         return 0;
                    169: 
                    170:     if (! OutlineApp_ParseCmdLine(lpOutlineApp, lpszCmdLine, nCmdShow))
                    171:         return 0;
                    172: 
                    173:     lpOutlineApp->m_hAccelApp = LoadAccelerators(hInstance, APPACCEL);
                    174:     lpOutlineApp->m_hAccelFocusEdit = LoadAccelerators(hInstance, 
                    175:             FB_EDIT_ACCEL);
                    176:     lpOutlineApp->m_hAccel = lpOutlineApp->m_hAccelApp;
                    177:     lpOutlineApp->m_hWndAccelTarget = lpOutlineApp->m_hWndApp;
                    178: 
                    179: 
                    180:     // Main message loop
                    181:     while(GetMessage(&msg, NULL, 0, 0)) {        /* Until WM_QUIT message */
                    182:         if(!MyTranslateAccelerator(&msg)) {
                    183:             TranslateMessage(&msg);
                    184:             DispatchMessage(&msg);
                    185:         }
                    186:     }
                    187:     
                    188: #if defined( OLE_VERSION )
                    189:     OleApp_TerminateApplication((LPOLEAPP)lpOutlineApp);
                    190: #else 
                    191:        /* OLE2NOTE: CoInitialize() is called in OutlineApp_InitInstance
                    192:        **    and therefore we need to uninitialize it when exit. 
                    193:        */
                    194:        CoUninitialize();
                    195: #endif
                    196: 
                    197: #if defined( USE_CTL3D )
                    198:    Ctl3dUnregister(hInstance);
                    199: #endif
                    200: 
                    201:     return msg.wParam;
                    202: 
                    203: } /*  End of WinMain */
                    204: 
                    205: 
                    206: BOOL MyTranslateAccelerator(LPMSG lpmsg)
                    207: {
                    208:     if (g_lpApp->m_hWndAccelTarget &&
                    209:                TranslateAccelerator(g_lpApp->m_hWndAccelTarget,
                    210:                                                                                                        g_lpApp->m_hAccel,lpmsg))
                    211:         return TRUE;
                    212:     
                    213: #if defined( INPLACE_SVR )
                    214: 
                    215:        /* OLE2NOTE: if we are in-place active and we did not translate the
                    216:        **    accelerator, we need to give the top-level (frame) in-place
                    217:        **    container a chance to translate the accelerator.
                    218:        */
                    219:     if (g_OutlineApp.m_lpIPData) {
                    220:         if (OleTranslateAccelerator(g_OutlineApp.m_lpIPData->lpFrame, 
                    221:                 (LPOLEINPLACEFRAMEINFO)&g_OutlineApp.m_lpIPData->frameInfo,
                    222:                 lpmsg) == NOERROR)
                    223:             return TRUE;
                    224:     }
                    225: #endif
                    226: 
                    227:     return FALSE;
                    228: }
                    229: 
                    230: 
                    231: /************************************************************************/
                    232: /*                                                                      */
                    233: /* Main Window Procedure                                                */
                    234: /*                                                                      */
                    235: /* This procedure provides service routines for the Windows events      */
                    236: /* (messages) that Windows sends to the window, as well as the user     */
                    237: /* initiated events (messages) that are generated when the user selects */
                    238: /* the action bar and pulldown menu controls or the corresponding       */
                    239: /* keyboard accelerators.                                               */
                    240: /*                                                                      */
                    241: /************************************************************************/
                    242: 
                    243: LRESULT FAR PASCAL AppWndProc(HWND hWnd, UINT Message, WPARAM wParam, LPARAM lParam)
                    244: {
                    245:     LPOUTLINEAPP lpOutlineApp = (LPOUTLINEAPP)GetWindowLong(hWnd, 0);
                    246:     LPOUTLINEDOC lpOutlineDoc = NULL;
                    247:     HWND         hWndDoc = NULL;
                    248:     HWND         hWndStatusBar = NULL;
                    249: 
                    250: #if defined( USE_FRAMETOOLS )
                    251:     LPFRAMETOOLS lptb = OutlineApp_GetFrameTools(lpOutlineApp);
                    252: #endif
                    253: 
                    254:     if (lpOutlineApp) {
                    255:         lpOutlineDoc = OutlineApp_GetActiveDoc(lpOutlineApp);
                    256: 
                    257:         if (lpOutlineDoc) 
                    258:             hWndDoc = OutlineDoc_GetWindow(lpOutlineDoc);
                    259:         hWndStatusBar = OutlineApp_GetStatusWindow(lpOutlineApp);
                    260:     }
                    261: 
                    262:     switch (Message) {
                    263:         case WM_COMMAND:
                    264:         {
                    265: #ifdef WIN32
                    266:                                WORD wID    = LOWORD(wParam);
                    267: #else
                    268:                                WORD wID    = wParam;
                    269: #endif
                    270: 
                    271: 
                    272:             switch (wID) {
                    273: 
                    274:                 case IDM_F_NEW:
                    275: 
                    276:                     OleDbgIndent(-2);   // Reset debug output indent level
                    277: 
                    278:                     OleDbgOutNoPrefix2("\r\n");
                    279:                     OLEDBG_BEGIN2("OutlineApp_NewCommand\r\n")
                    280: 
                    281:                     OutlineApp_NewCommand(lpOutlineApp);
                    282:                 
                    283:                     OLEDBG_END2
                    284: 
                    285: #if defined( USE_FRAMETOOLS )
                    286:                     OutlineDoc_UpdateFrameToolButtons(
                    287:                             OutlineApp_GetActiveDoc(lpOutlineApp));
                    288: #endif                      
                    289:                     break;
                    290: 
                    291:                 case IDM_F_OPEN:
                    292: 
                    293:                     OleDbgOutNoPrefix2("\r\n");
                    294:                     OLEDBG_BEGIN2("OutlineApp_OpenCommand\r\n")
                    295:                         
                    296:                     OutlineApp_OpenCommand(lpOutlineApp);
                    297:                 
                    298:                     OLEDBG_END2
                    299:                         
                    300: #if defined( USE_FRAMETOOLS )
                    301:                     OutlineDoc_UpdateFrameToolButtons(
                    302:                             OutlineApp_GetActiveDoc(lpOutlineApp));
                    303: #endif                      
                    304:                     break;
                    305: 
                    306:                 case IDM_F_SAVE:
                    307: 
                    308:                     OleDbgOutNoPrefix2("\r\n");
                    309:                     OLEDBG_BEGIN2("OutlineApp_SaveCommand\r\n")
                    310:                         
                    311:                     OutlineApp_SaveCommand(lpOutlineApp);
                    312:                 
                    313:                     OLEDBG_END2
                    314:                     break;
                    315: 
                    316:                 case IDM_F_SAVEAS:
                    317: 
                    318:                     OleDbgOutNoPrefix2("\r\n");
                    319:                     OLEDBG_BEGIN2("OutlineApp_SaveAsCommand\r\n")
                    320:                         
                    321:                     OutlineApp_SaveAsCommand(lpOutlineApp);
                    322:                 
                    323:                     OLEDBG_END2
                    324:                     break;
                    325: 
                    326:                 case IDM_F_PRINT:
                    327: 
                    328:                     OleDbgOutNoPrefix2("\r\n");
                    329:                     OLEDBG_BEGIN2("OutlineApp_PrintCommand\r\n")
                    330:                         
                    331:                     OutlineApp_PrintCommand(lpOutlineApp);
                    332:                 
                    333:                     OLEDBG_END2
                    334:                     break;
                    335: 
                    336:                 case IDM_F_PRINTERSETUP:
                    337: 
                    338:                     OleDbgOutNoPrefix2("\r\n");
                    339:                     OLEDBG_BEGIN2("OutlineApp_PrinterSetupCommand\r\n")
                    340:                         
                    341:                     OutlineApp_PrinterSetupCommand(lpOutlineApp);
                    342:                 
                    343:                     OLEDBG_END2
                    344:                     break;
                    345: 
                    346:                 case IDM_F_EXIT:
                    347:                     SendMessage(hWnd, WM_CLOSE, 0, 0L);
                    348:                     break;
                    349: 
                    350:                 case IDM_H_ABOUT:
                    351:                     OutlineApp_AboutCommand(lpOutlineApp);
                    352:                     break;
                    353:                                        
                    354:                 default:
                    355:                     // forward message to document window
                    356:                     if (hWndDoc) {
                    357:                         return DocWndProc(hWndDoc, Message,wParam,lParam);
                    358:                     }
                    359:             }
                    360:             
                    361:             break;  /* End of WM_COMMAND */
                    362:         }
                    363:         case WM_INITMENU:
                    364:             OutlineApp_InitMenu(lpOutlineApp, lpOutlineDoc, (HMENU)wParam);
                    365:             break;
                    366: 
                    367: #if defined( OLE_VERSION )
                    368: 
                    369:                /* OLE2NOTE: WM_INITMENUPOPUP is trapped primarily for the Edit
                    370:                **    menu. We didn't update the Edit menu until it is popped
                    371:                **    up to avoid the overheads of the OLE calls which are
                    372:                **    required to initialize some Edit menu items. 
                    373:                */
                    374:                case WM_INITMENUPOPUP:
                    375:                {
                    376:             HMENU hMenuEdit = GetSubMenu(lpOutlineApp->m_hMenuApp, 1);
                    377: #if defined( INPLACE_CNTR )
                    378:                        LPCONTAINERDOC lpContainerDoc = (LPCONTAINERDOC)lpOutlineDoc;
                    379: 
                    380:                        /* OLE2NOTE: we must check if there is an object currently
                    381:                        **    in-place UIActive. if so, then our edit menu is not
                    382:                        **    on the menu; we do not want to bother updating the
                    383:                        **    edit menu when it is not even there. 
                    384:                        */
                    385:                        if (lpContainerDoc && lpContainerDoc->m_lpLastUIActiveLine &&
                    386:                                lpContainerDoc->m_lpLastUIActiveLine->m_fUIActive)
                    387:                                break;  // an object is in-place UI active
                    388: #endif                 
                    389:                        if ((HMENU)wParam == hMenuEdit &&
                    390:                 (LOWORD(lParam) == POS_EDITMENU) && 
                    391:                                OleDoc_GetUpdateEditMenuFlag((LPOLEDOC)lpOutlineDoc)) {
                    392:                                OleApp_UpdateEditMenu(
                    393:                         (LPOLEAPP)lpOutlineApp, lpOutlineDoc, hMenuEdit);
                    394:                        }
                    395:                        break;
                    396:                }
                    397: #endif                 // OLE_VERSION
                    398:                        
                    399:         case WM_SIZE:
                    400:             if (wParam != SIZE_MINIMIZED)
                    401:                 OutlineApp_ResizeWindows(lpOutlineApp);
                    402:             break;
                    403: 
                    404:         case WM_ACTIVATEAPP:
                    405: 
                    406: #if defined( INPLACE_CNTR )
                    407:             {
                    408:                 LPCONTAINERAPP lpContainerApp = (LPCONTAINERAPP)lpOutlineApp;
                    409:                 LPOLEINPLACEACTIVEOBJECT lpIPActiveObj = 
                    410:                         lpContainerApp->m_lpIPActiveObj;
                    411: 
                    412:                 /* OLE2NOTE: the in-place container MUST inform the
                    413:                 **    inner most in-place active object (this is NOT
                    414:                 **    necessarily our immediate child if there are
                    415:                 **    nested levels of embedding) of the WM_ACTIVATEAPP
                    416:                 **    status.
                    417:                 */
                    418:                 if (lpIPActiveObj) {
                    419:                     OLEDBG_BEGIN2("IOleInPlaceActiveObject::OnFrameWindowActivate called\r\n")
                    420:                     lpIPActiveObj->lpVtbl->OnFrameWindowActivate(
                    421:                         lpIPActiveObj, 
                    422:                         (wParam ? TRUE : FALSE)
                    423:                     );
                    424:                     OLEDBG_END2
                    425:                 }
                    426:             }
                    427: #endif  // INPLACE_CNTR
                    428: 
                    429:             // OLE2NOTE: We can't call OutlineDoc_UpdateFrameToolButtons
                    430:                        //           right away which 
                    431:             //           would generate some OLE calls and eventually 
                    432:             //           WM_ACTIVATEAPP and a loop was formed. Therefore, we
                    433:             //           should delay the frame tool initialization until 
                    434:                        //                       WM_ACTIVATEAPP is finished by posting a message
                    435:                        //                       to ourselves.
                    436:             
                    437:             /* Update enable/disable state of buttons in toolbar */
                    438:             if (wParam) 
                    439:                 PostMessage(hWnd, WM_U_INITFRAMETOOLS, 0, 0L);
                    440:             break;
                    441:             
                    442:         case WM_SETFOCUS:
                    443:             SetFocus(hWndDoc);
                    444:             break;
                    445: 
                    446:         case WM_DESTROY:
                    447:             PostQuitMessage(0);
                    448:             break;
                    449:             
                    450:         case WM_CLOSE:  /* close the window */
                    451: 
                    452:             /* Close all active documents. if successful, then exit */
                    453:  
                    454:             OleDbgOutNoPrefix2("\r\n");
                    455: 
                    456:             OutlineApp_CloseAllDocsAndExitCommand(lpOutlineApp);
                    457:             break;
                    458:                
                    459:                case WM_QUERYENDSESSION:
                    460:                        
                    461:                        if (OutlineApp_CloseAllDocsAndExitCommand(lpOutlineApp))
                    462:                 return 1L;             /* can terminate */
                    463: 
                    464:                        /* else: can't terminate now */
                    465:                        break;
                    466: 
                    467: #if defined( USE_STATUSBAR )
                    468:         case WM_MENUSELECT:
                    469:         {
                    470: #ifdef WIN32
                    471:             UINT fuFlags    = (UINT)HIWORD(wParam);
                    472:                        UINT uItem      = (UINT)LOWORD(wParam);
                    473: #else
                    474:             UINT fuFlags    = (UINT)LOWORD(lParam);
                    475:                        UINT uItem      = (UINT)wParam;
                    476: #endif
                    477: 
                    478:             if (uItem == 0 && fuFlags == (UINT)-1) {
                    479:                 ControlMessage(hWndStatusBar, STATUS_READY, lpOutlineDoc);
                    480:             }
                    481:             else if (fuFlags & MF_POPUP) {
                    482: #ifdef WIN32
                    483:                 HMENU hMainMenu = (HMENU)lParam;
                    484:                 HMENU hPopupMenu = GetSubMenu(hMainMenu,uItem);
                    485: #else
                    486:                 HMENU hPopupMenu = (HMENU)wParam;
                    487: #endif
                    488:                 PopupMessage(hWndStatusBar, hPopupMenu, lpOutlineDoc);
                    489:             }
                    490:             else if (fuFlags & MF_SYSMENU) {
                    491:                 SysMenuMessage(hWndStatusBar, uItem, lpOutlineDoc);
                    492:             }
                    493:             else if (uItem != 0) {  // Command Item
                    494:                 ItemMessage(hWndStatusBar, uItem, lpOutlineDoc);
                    495:             }
                    496:             else {
                    497:                 ControlMessage(hWndStatusBar, STATUS_BLANK, lpOutlineDoc);
                    498:             }
                    499:             break;
                    500:         }
                    501: #endif  
                    502: 
                    503: 
                    504: #if defined( USE_FRAMETOOLS )
                    505:         case WM_U_INITFRAMETOOLS:
                    506:             OutlineDoc_UpdateFrameToolButtons(lpOutlineDoc);
                    507:             break;
                    508: #endif
                    509: 
                    510:         default:
                    511:             /* For any message for which you don't specifically provide a  */
                    512:             /* service routine, you should return the message to Windows   */
                    513:             /* for default message processing.                             */
                    514: 
                    515:             return DefWindowProc(hWnd, Message, wParam, lParam);
                    516:     }
                    517: 
                    518:     return (LRESULT)0;
                    519: }     /* End of AppWndProc                                         */
                    520: 
                    521: 
                    522: /************************************************************************/
                    523: /*                                                                      */
                    524: /* Document Window Procedure                                            */
                    525: /*                                                                      */
                    526: /*   The Document Window is the parent of the OwnerDraw Listbox which   */
                    527: /* maintains the list of lines in the current document. This window     */
                    528: /* receives the ownerdraw callback messages from the list box.          */
                    529: /************************************************************************/
                    530: 
                    531: LRESULT FAR PASCAL DocWndProc(HWND hWnd, UINT Message, WPARAM wParam, LPARAM lParam)
                    532: {
                    533:     LPOUTLINEAPP       lpOutlineApp = (LPOUTLINEAPP)g_lpApp;
                    534:     LPOUTLINEDOC       lpOutlineDoc = (LPOUTLINEDOC)GetWindowLong(hWnd, 0);
                    535:     LPLINELIST         lpLL = OutlineDoc_GetLineList(lpOutlineDoc);
                    536:        LPSCALEFACTOR   lpscale = OutlineDoc_GetScaleFactor(lpOutlineDoc);
                    537: 
                    538: #if defined( OLE_VERSION )
                    539:     LPOLEAPP lpOleApp = (LPOLEAPP)lpOutlineApp;
                    540:     LPOLEDOC lpOleDoc = (LPOLEDOC)lpOutlineDoc;
                    541: #endif // OLE_VERSION
                    542: 
                    543:        switch(Message) {
                    544:                        
                    545:         case WM_MEASUREITEM:
                    546:                {
                    547:             LPMEASUREITEMSTRUCT lpmis = ((LPMEASUREITEMSTRUCT)lParam);
                    548:             
                    549:             switch (wParam) {
                    550:                 case IDC_LINELIST:
                    551:                 {
                    552:                     HDC hDC = LineList_GetDC(lpLL);
                    553:                     UINT uHeight;
                    554:                     
                    555:                     uHeight=Line_GetHeightInHimetric((LPLINE)lpmis->itemData);
                    556:                                        uHeight = XformHeightInHimetricToPixels(hDC, uHeight);
                    557:                                        uHeight = (UINT) (uHeight * lpscale->dwSyN / 
                    558:                                                        lpscale->dwSyD);
                    559:                                        
                    560:                                        if (uHeight >LISTBOX_HEIGHT_LIMIT)
                    561:                                                uHeight = LISTBOX_HEIGHT_LIMIT;
                    562:                                        
                    563:                                        lpmis->itemHeight = uHeight;
                    564:                     LineList_ReleaseDC(lpLL, hDC);
                    565:                     break;
                    566:                 }
                    567:                 
                    568:                 case IDC_NAMETABLE:
                    569:                 {
                    570:                     // NOTE: NameTable is never made visible. do nothing.
                    571:                     break;
                    572:                 }
                    573:                 
                    574: #if defined( USE_HEADING )
                    575:                                case IDC_ROWHEADING:
                    576:                                {
                    577:                                        UINT uHeight;
                    578: 
                    579:                                        uHeight = LOWORD(lpmis->itemData);
                    580:                                        uHeight = (UINT) (uHeight * lpscale->dwSyN /
                    581:                                                        lpscale->dwSyD);
                    582:                                        if (uHeight >LISTBOX_HEIGHT_LIMIT)
                    583:                                                uHeight = LISTBOX_HEIGHT_LIMIT;
                    584:                                        lpmis->itemHeight = uHeight;
                    585:                                        break;
                    586:                                }
                    587:                                        
                    588:                                case IDC_COLHEADING:    
                    589:                                {
                    590:                                        UINT uHeight;
                    591:                                        
                    592:                                        uHeight = LOWORD(lpmis->itemData);
                    593:                                        uHeight = (UINT) (uHeight * lpscale->dwSyN / 
                    594:                                                        lpscale->dwSyD);
                    595:                                        if (uHeight > LISTBOX_HEIGHT_LIMIT)
                    596:                                                uHeight = LISTBOX_HEIGHT_LIMIT;
                    597:                                        lpmis->itemHeight = uHeight;
                    598:                                        break;
                    599:                                }
                    600: #endif
                    601: 
                    602:                        }
                    603:             return (LRESULT)TRUE;
                    604:         }
                    605: 
                    606:                case WM_DRAWITEM: 
                    607:                {
                    608:                        LPDRAWITEMSTRUCT lpdis = ((LPDRAWITEMSTRUCT)lParam);
                    609: 
                    610:                        switch (lpdis->CtlID) {
                    611: 
                    612:                 case IDC_LINELIST:
                    613:                 {
                    614:                     RECT   rcClient;
                    615:                                        RECT   rcDevice;
                    616:                     HWND   hWndLL = LineList_GetWindow(lpLL);
                    617:                     LPLINE lpLine = (LPLINE)lpdis->itemData;
                    618:                     
                    619:                                        // NOTE: When itemID == -1, the listbox is empty. 
                    620:                                        //       We are supposed to draw focus rect only 
                    621:                                        //               But it is not done in this app. If this line is
                    622:                                        //       removed, the app will crash in Line_DrawToScreen
                    623:                                        //       because of invalid lpLine.
                    624:                                        if (lpdis->itemID == -1) 
                    625:                                                break;
                    626:                                        
                    627:                     GetClientRect(hWndLL, &rcClient);
                    628: 
                    629:                                        rcDevice = lpdis->rcItem;
                    630:                                        
                    631:                     // shift the item rect to account for horizontal scrolling
                    632:                                        rcDevice.left += rcClient.right - lpdis->rcItem.right;
                    633: 
                    634:                                        // shift rect for left margin
                    635:                                        rcDevice.left += (int)(XformWidthInHimetricToPixels(NULL,
                    636:                                                        LOWORD(OutlineDoc_GetMargin(lpOutlineDoc))) *
                    637:                                                        lpscale->dwSxN / lpscale->dwSxD);
                    638:                                                
                    639:                                        rcDevice.right = rcDevice.left +
                    640:                                                        (int)(XformWidthInHimetricToPixels(lpdis->hDC,
                    641:                                                                        Line_GetWidthInHimetric(lpLine)) *
                    642:                                                        lpscale->dwSxN / lpscale->dwSxD);
                    643:                                        
                    644:                     Line_DrawToScreen(
                    645:                             lpLine, 
                    646:                             lpdis->hDC, 
                    647:                             &lpdis->rcItem, 
                    648:                             lpdis->itemAction, 
                    649:                             lpdis->itemState,
                    650:                                                        &rcDevice
                    651:                     );
                    652: 
                    653: #if defined( USE_FRAMETOOLS )
                    654:                     if (lpdis->itemState & ODS_FOCUS) 
                    655:                         OutlineDoc_SetFormulaBarEditText(lpOutlineDoc,lpLine);
                    656: #endif              
                    657:                     break;
                    658:                 }
                    659:                 case IDC_NAMETABLE:
                    660:                 {
                    661:                     // NOTE: NameTable is never made visible. do nothing
                    662:                     break;
                    663:                 }
                    664: 
                    665: #if defined( USE_HEADING )
                    666:                 case IDC_ROWHEADING:
                    667:                 {
                    668:                     LPHEADING lphead;
                    669: 
                    670:                                        // Last dummy item shouldn't be drawn
                    671:                                        if (lpdis->itemID == (UINT)LineList_GetCount(lpLL))
                    672:                                                break;
                    673: 
                    674:                                        // only DrawEntire need be trapped as window is disabled
                    675:                                        if (lpdis->itemAction == ODA_DRAWENTIRE) {
                    676:                                                lphead = OutlineDoc_GetHeading(lpOutlineDoc);
                    677:                                                Heading_RH_Draw(lphead, lpdis);
                    678:                                        }
                    679:                     break;
                    680:                 }
                    681:                     
                    682:                 case IDC_COLHEADING:
                    683:                 {
                    684:                     RECT   rect;
                    685:                                        RECT   rcDevice;
                    686:                                        RECT   rcLogical;
                    687:                                        LPHEADING lphead;
                    688:                                        
                    689:                                        // only DrawEntire need be trapped as window is disabled
                    690:                                        if (lpdis->itemAction == ODA_DRAWENTIRE) {
                    691:                                                lphead = OutlineDoc_GetHeading(lpOutlineDoc);
                    692:                                                GetClientRect(lpdis->hwndItem, &rect);
                    693: 
                    694:                                                rcDevice = lpdis->rcItem;
                    695: 
                    696:                                                // shift the item rect to account for 
                    697:                                                // horizontal scrolling
                    698:                                                rcDevice.left = -(rcDevice.right - rect.right);
                    699: 
                    700:                                                // shift rect for left margin
                    701:                                                rcDevice.left += (int)(XformWidthInHimetricToPixels(
                    702:                                                                NULL,
                    703:                                                                LOWORD(OutlineDoc_GetMargin(lpOutlineDoc))) *
                    704:                                                        lpscale->dwSxN / lpscale->dwSxD);
                    705:                                                
                    706:                                                rcDevice.right = rcDevice.left + (int)lpscale->dwSxN;
                    707:                                                rcLogical.left = 0;
                    708:                                                rcLogical.bottom = 0;
                    709:                                                rcLogical.right = (int)lpscale->dwSxD;
                    710:                                                rcLogical.top = LOWORD(lpdis->itemData);
                    711: 
                    712:                                                Heading_CH_Draw(lphead, lpdis, &rcDevice, &rcLogical);
                    713:                                        }
                    714:                                        break;
                    715:                                }
                    716: #endif
                    717: 
                    718:             }
                    719:             return (LRESULT)TRUE;
                    720:         } 
                    721:         
                    722:         case WM_SETFOCUS:
                    723:             if (lpLL) 
                    724:                 SetFocus(LineList_GetWindow(lpLL));
                    725:             break;
                    726: 
                    727: #if !defined( OLE_VERSION )
                    728: 
                    729:         case WM_RENDERFORMAT:
                    730:         {
                    731:             LPOUTLINEDOC lpClipboardDoc = lpOutlineApp->m_lpClipboardDoc;
                    732:             if (lpClipboardDoc) 
                    733:                 OutlineDoc_RenderFormat(lpClipboardDoc, wParam);
                    734: 
                    735:             break;
                    736:         }           
                    737:         case WM_RENDERALLFORMATS:
                    738:         {
                    739:             LPOUTLINEDOC lpClipboardDoc = lpOutlineApp->m_lpClipboardDoc;
                    740:             if (lpClipboardDoc) 
                    741:                 OutlineDoc_RenderAllFormats(lpClipboardDoc);
                    742: 
                    743:             break;
                    744:         }           
                    745:         case WM_DESTROYCLIPBOARD:
                    746:             if (g_lpApp->m_lpClipboardDoc) {
                    747:                 OutlineDoc_Destroy(g_lpApp->m_lpClipboardDoc);
                    748:                 g_lpApp->m_lpClipboardDoc = NULL;
                    749:             }
                    750:             break;
                    751:             
                    752: #endif   // OLE_VERSION
                    753: 
                    754: #if defined( OLE_CNTR )
                    755:                case WM_U_UPDATEOBJECTEXTENT: 
                    756:         {
                    757:                        LPCONTAINERDOC lpContainerDoc = (LPCONTAINERDOC)lpOutlineDoc;
                    758: 
                    759:             /* Update the extents of any OLE object that is marked that
                    760:             **    its size may  have changed. when an
                    761:             **    IAdviseSink::OnViewChange notification is received,
                    762:             **    the corresponding ContainerLine is marked
                    763:             **    (m_fDoGetExtent==TRUE) and a message
                    764:             **    (WM_U_UPDATEOBJECTEXTENT) is posted to the document
                    765:             **    indicating that there are dirty objects.  
                    766:             */
                    767:             ContainerDoc_UpdateExtentOfAllOleObjects(lpContainerDoc);
                    768:                        break;
                    769:         }
                    770: #endif  // OLE_CNTR
                    771: 
                    772: #if defined( INPLACE_SVR )
                    773:         /* OLE2NOTE: when the in-place active, our in-place server
                    774:         **    document window (passed to IOleInPlaceFrame::SetMenu)
                    775:         **    will receive the WM_INITMENU and WM_INITMENUPOPUP messages.
                    776:         */
                    777: 
                    778:         case WM_INITMENU:
                    779:             OutlineApp_InitMenu(lpOutlineApp, lpOutlineDoc, (HMENU)wParam);
                    780:             break;
                    781: 
                    782:                /* OLE2NOTE: WM_INITMENUPOPUP is trapped primarily for the Edit
                    783:                **    menu. We didn't update the Edit menu until it is popped
                    784:                **    up to avoid the overheads of the OLE calls which are
                    785:                **    required to initialize some Edit menu items. 
                    786:                */
                    787:                case WM_INITMENUPOPUP:
                    788:                {
                    789:             HMENU hMenuEdit = GetSubMenu(lpOutlineApp->m_hMenuApp, 1);
                    790:                        if ((HMENU)wParam == hMenuEdit &&
                    791:                 (LOWORD(lParam) == POS_EDITMENU) && 
                    792:                                OleDoc_GetUpdateEditMenuFlag((LPOLEDOC)lpOutlineDoc)) {
                    793:                                OleApp_UpdateEditMenu(
                    794:                         (LPOLEAPP)lpOutlineApp, lpOutlineDoc, hMenuEdit);
                    795:                        }
                    796:                        break;
                    797:                }
                    798: 
                    799: #if defined( USE_FRAMETOOLS )
                    800:         case WM_U_INITFRAMETOOLS:
                    801:             OutlineDoc_UpdateFrameToolButtons(lpOutlineDoc);
                    802:             break;
                    803: #endif      // USE_FRAMETOOLS
                    804: 
                    805: #endif      // INPLACE_SVR
                    806: 
                    807:         case WM_COMMAND:
                    808:         {
                    809: #ifdef WIN32
                    810:                                WORD wNotifyCode = HIWORD(wParam);
                    811:                                WORD wID                  = LOWORD(wParam);
                    812:                                HWND hwndCtl     = (HWND) lParam;
                    813: #else
                    814:                                WORD wNotifyCode = HIWORD(lParam);
                    815:                                WORD wID                     = wParam;
                    816:                                HWND hwndCtl     = (HWND) LOWORD(lParam);
                    817: #endif
                    818: 
                    819: 
                    820:             switch (wID) {
                    821:                                
                    822:                                /*********************************************************
                    823:                                ** File new, open, save and print as well as Help about
                    824:                                **    are duplicated in this switch statement and they are
                    825:                                **    used to trap the message from the toolbar
                    826:                                **    
                    827:                                *********************************************************/
                    828: 
                    829:                                case IDM_F_NEW:
                    830: 
                    831:                     OleDbgIndent(-2);   // Reset debug output indent level
                    832: 
                    833:                     OleDbgOutNoPrefix2("\r\n");
                    834:                     OLEDBG_BEGIN2("OutlineApp_NewCommand\r\n")
                    835: 
                    836:                     OutlineApp_NewCommand(lpOutlineApp);
                    837:                 
                    838:                     OLEDBG_END2
                    839: 
                    840: #if defined( USE_FRAMETOOLS )
                    841:                     OutlineDoc_UpdateFrameToolButtons(
                    842:                             OutlineApp_GetActiveDoc(lpOutlineApp));
                    843: #endif                      
                    844:                     break;
                    845: 
                    846:                 case IDM_F_OPEN:
                    847: 
                    848:                     OleDbgOutNoPrefix2("\r\n");
                    849:                     OLEDBG_BEGIN2("OutlineApp_OpenCommand\r\n")
                    850:                         
                    851:                     OutlineApp_OpenCommand(lpOutlineApp);
                    852:                 
                    853:                     OLEDBG_END2
                    854:                         
                    855: #if defined( USE_FRAMETOOLS )
                    856:                     OutlineDoc_UpdateFrameToolButtons(
                    857:                             OutlineApp_GetActiveDoc(lpOutlineApp));
                    858: #endif                      
                    859:                     break;
                    860: 
                    861:                 case IDM_F_SAVE:
                    862: 
                    863:                     OleDbgOutNoPrefix2("\r\n");
                    864:                     OLEDBG_BEGIN2("OutlineApp_SaveCommand\r\n")
                    865:                         
                    866:                     OutlineApp_SaveCommand(lpOutlineApp);
                    867:                 
                    868:                     OLEDBG_END2
                    869:                     break;
                    870: 
                    871:                 case IDM_F_PRINT:
                    872: 
                    873:                     OleDbgOutNoPrefix2("\r\n");
                    874:                     OLEDBG_BEGIN2("OutlineApp_PrintCommand\r\n")
                    875:                         
                    876:                     OutlineApp_PrintCommand(lpOutlineApp);
                    877:                 
                    878:                     OLEDBG_END2
                    879:                     break;
                    880: 
                    881: 
                    882:                 case IDM_E_UNDO:
                    883:                     break;
                    884: 
                    885:                 case IDM_E_CUT:
                    886: 
                    887:                     OleDbgOutNoPrefix2("\r\n");
                    888:                     OLEDBG_BEGIN2("OutlineDoc_CutCommand\r\n")
                    889:                         
                    890:                     OutlineDoc_CutCommand(lpOutlineDoc);
                    891:                 
                    892:                     OLEDBG_END2
                    893:                         
                    894: #if defined( USE_FRAMETOOLS )
                    895:                     OutlineDoc_UpdateFrameToolButtons(lpOutlineDoc);
                    896: #endif                      
                    897:                     break;
                    898: 
                    899:                 case IDM_E_COPY:
                    900: 
                    901:                     OleDbgOutNoPrefix2("\r\n");
                    902:                     OLEDBG_BEGIN2("OutlineDoc_CopyCommand\r\n")
                    903:                         
                    904:                     OutlineDoc_CopyCommand(lpOutlineDoc);
                    905:                 
                    906:                     OLEDBG_END2
                    907:                         
                    908: #if defined( USE_FRAMETOOLS )
                    909:                     OutlineDoc_UpdateFrameToolButtons(lpOutlineDoc);
                    910: #endif                      
                    911:                     break;
                    912: 
                    913:                 case IDM_E_PASTE:
                    914: 
                    915:                     OleDbgOutNoPrefix2("\r\n");
                    916:                     OLEDBG_BEGIN2("OutlineDoc_PasteCommand\r\n")
                    917:                         
                    918:                     OutlineDoc_PasteCommand(lpOutlineDoc);
                    919:                 
                    920:                     OLEDBG_END2
                    921:                         
                    922: #if defined( USE_FRAMETOOLS )
                    923:                     OutlineDoc_UpdateFrameToolButtons(lpOutlineDoc);
                    924: #endif                      
                    925:                     break;
                    926: 
                    927: #if defined( OLE_VERSION )
                    928:                 case IDM_E_PASTESPECIAL:
                    929: 
                    930:                     OleDbgOutNoPrefix2("\r\n");
                    931:                     OLEDBG_BEGIN2("OleDoc_PasteSpecialCommand\r\n")
                    932:                         
                    933:                     OleDoc_PasteSpecialCommand((LPOLEDOC)lpOutlineDoc);
                    934:                 
                    935:                     OLEDBG_END2
                    936:                         
                    937: #if defined( USE_FRAMETOOLS )
                    938:                     OutlineDoc_UpdateFrameToolButtons(lpOutlineDoc);
                    939: #endif                      
                    940:                     break;
                    941:                 
                    942: #endif  // OLE_VERSION
                    943: 
                    944:                 case IDM_E_CLEAR:
                    945: 
                    946:                     OleDbgOutNoPrefix2("\r\n");
                    947:                     OLEDBG_BEGIN2("OutlineDoc_ClearCommand\r\n")
                    948:                         
                    949:                     OutlineDoc_ClearCommand(lpOutlineDoc);
                    950:                 
                    951:                     OLEDBG_END2
                    952:                         
                    953: #if defined( USE_FRAMETOOLS )
                    954:                     OutlineDoc_UpdateFrameToolButtons(lpOutlineDoc);
                    955: #endif                      
                    956:                     break;
                    957: 
                    958:                                case IDM_L_ADDLINE:
                    959: 
                    960:                     OleDbgOutNoPrefix2("\r\n");
                    961:                     OLEDBG_BEGIN2("OutlineDoc_AddTextLineCommand\r\n")
                    962:                         
                    963:                     OutlineDoc_AddTextLineCommand(lpOutlineDoc);
                    964: 
                    965:                     OLEDBG_END2
                    966:                         
                    967: #if defined( USE_FRAMETOOLS )
                    968:                     OutlineDoc_UpdateFrameToolButtons(lpOutlineDoc);
                    969:                     SetFocus(LineList_GetWindow(lpLL));
                    970: #endif                      
                    971:                     break;
                    972: 
                    973:                 case IDM_L_EDITLINE:
                    974: 
                    975:                     OleDbgOutNoPrefix2("\r\n");
                    976:                     OLEDBG_BEGIN2("OutlineDoc_EditLineCommand\r\n")
                    977:                         
                    978:                     OutlineDoc_EditLineCommand(lpOutlineDoc);
                    979:                 
                    980:                     OLEDBG_END2
                    981:                     SetFocus(LineList_GetWindow(lpLL));                
                    982:                     break;
                    983: 
                    984:                 case IDM_L_INDENTLINE:
                    985: 
                    986:                     OleDbgOutNoPrefix2("\r\n");
                    987:                     OLEDBG_BEGIN2("OutlineDoc_IndentCommand\r\n")
                    988:                         
                    989:                     OutlineDoc_IndentCommand(lpOutlineDoc);
                    990:                 
                    991:                     OLEDBG_END2
                    992:                     break;
                    993: 
                    994:                 case IDM_L_UNINDENTLINE:
                    995: 
                    996:                     OleDbgOutNoPrefix2("\r\n");
                    997:                     OLEDBG_BEGIN2("OutlineDoc_UnindentCommand\r\n")
                    998:                         
                    999:                     OutlineDoc_UnindentCommand(lpOutlineDoc);
                   1000:                 
                   1001:                     OLEDBG_END2
                   1002:                     break;
                   1003:                                
                   1004:                                case IDM_L_SETLINEHEIGHT:
                   1005:                                        
                   1006:                     OleDbgOutNoPrefix2("\r\n");
                   1007:                     OLEDBG_BEGIN2("OutlineDoc_SetLineHeight\r\n")
                   1008:                         
                   1009:                     OutlineDoc_SetLineHeightCommand(lpOutlineDoc);
                   1010:                 
                   1011:                     OLEDBG_END2
                   1012:                     break;
                   1013: 
                   1014:                 case IDM_E_SELECTALL:
                   1015: 
                   1016:                     OleDbgOutNoPrefix2("\r\n");
                   1017:                     OLEDBG_BEGIN2("OutlineDoc_SelectAllCommand\r\n")
                   1018:                         
                   1019:                     OutlineDoc_SelectAllCommand(lpOutlineDoc);
                   1020:                 
                   1021:                     OLEDBG_END2
                   1022:                     break;
                   1023: 
                   1024: #if defined( OLE_CNTR )
                   1025:                                
                   1026:                 case IDM_E_INSERTOBJECT:
                   1027: 
                   1028:                     OleDbgOutNoPrefix2("\r\n");
                   1029:                     OLEDBG_BEGIN2("ContainerDoc_InsertOleObjectCommand\r\n")
                   1030:                         
                   1031:                     ContainerDoc_InsertOleObjectCommand((LPCONTAINERDOC)lpOutlineDoc);
                   1032:                 
                   1033:                     OLEDBG_END2
                   1034:                         
                   1035: #if defined( USE_FRAMETOOLS )
                   1036:                     OutlineDoc_UpdateFrameToolButtons(lpOutlineDoc);
                   1037: #endif                      
                   1038:                     break;
                   1039: 
                   1040:                 case IDM_E_EDITLINKS:
                   1041: 
                   1042:                     OleDbgOutNoPrefix2("\r\n");
                   1043:                     OLEDBG_BEGIN2("ContainerDoc_EditLinksCommand\r\n")
                   1044:                         
                   1045:                     ContainerDoc_EditLinksCommand((LPCONTAINERDOC)lpOutlineDoc);
                   1046:                 
                   1047:                     OLEDBG_END2
                   1048:                     break;
                   1049: 
                   1050:                 case IDM_E_CONVERTVERB:
                   1051: 
                   1052:                     OleDbgOutNoPrefix2("\r\n");
                   1053:                     OLEDBG_BEGIN2("ContainerDoc_ConvertCommand\r\n")
                   1054:                         
                   1055:                     ContainerDoc_ConvertCommand(
                   1056:                                                        (LPCONTAINERDOC)lpOutlineDoc,
                   1057:                                                        FALSE           // fMustActivate
                   1058:                                        );
                   1059:                 
                   1060:                     OLEDBG_END2
                   1061:                     break;
                   1062: 
                   1063: 
                   1064:                 case IDM_E_PASTELINK:
                   1065: 
                   1066:                     OleDbgOutNoPrefix2("\r\n");
                   1067:                     OLEDBG_BEGIN2("ContainerDoc_PasteLinkCommand\r\n")
                   1068:                         
                   1069:                     ContainerDoc_PasteLinkCommand((LPCONTAINERDOC)lpOutlineDoc);
                   1070:                 
                   1071:                     OLEDBG_END2
                   1072:                         
                   1073: #if defined( USE_FRAMETOOLS )
                   1074:                     OutlineDoc_UpdateFrameToolButtons(lpOutlineDoc);
                   1075: #endif                      
                   1076:                     break;
                   1077:                 
                   1078: #endif  // OLE_CNTR
                   1079: 
                   1080:                 case IDM_N_DEFINENAME:
                   1081: 
                   1082:                     OleDbgOutNoPrefix2("\r\n");
                   1083:                     OLEDBG_BEGIN2("OutlineDoc_DefineNameCommand\r\n")
                   1084:                         
                   1085:                     OutlineDoc_DefineNameCommand(lpOutlineDoc);
                   1086:                 
                   1087:                     OLEDBG_END2
                   1088:                     break;
                   1089: 
                   1090:                 case IDM_N_GOTONAME:
                   1091: 
                   1092:                     OleDbgOutNoPrefix2("\r\n");
                   1093:                     OLEDBG_BEGIN2("OutlineDoc_GotoNameCommand\r\n")
                   1094:                         
                   1095:                     OutlineDoc_GotoNameCommand(lpOutlineDoc);
                   1096:                 
                   1097:                     OLEDBG_END2
                   1098:                     break;
                   1099: 
                   1100: #if defined( USE_FRAMETOOLS )
                   1101:                 case IDM_O_BB_TOP:
                   1102:                     FrameTools_BB_SetState(
                   1103:                                                        lpOutlineDoc->m_lpFrameTools, BARSTATE_TOP);
                   1104:                     OutlineDoc_AddFrameLevelTools(lpOutlineDoc);
                   1105:                     break;
                   1106: 
                   1107:                 case IDM_O_BB_BOTTOM:
                   1108:                     FrameTools_BB_SetState(
                   1109:                                                        lpOutlineDoc->m_lpFrameTools, BARSTATE_BOTTOM);
                   1110:                     OutlineDoc_AddFrameLevelTools(lpOutlineDoc);
                   1111:                     break;
                   1112: 
                   1113:                 case IDM_O_BB_POPUP:
                   1114:                     FrameTools_BB_SetState(
                   1115:                                                        lpOutlineDoc->m_lpFrameTools, BARSTATE_POPUP);
                   1116:                     OutlineDoc_AddFrameLevelTools(lpOutlineDoc);
                   1117:                     break;
                   1118: 
                   1119:                 case IDM_O_BB_HIDE:
                   1120:                     FrameTools_BB_SetState(
                   1121:                                                        lpOutlineDoc->m_lpFrameTools, BARSTATE_HIDE);
                   1122:                     OutlineDoc_AddFrameLevelTools(lpOutlineDoc);
                   1123:                     break;
                   1124:                     
                   1125:                 case IDM_O_FB_TOP:
                   1126:                     FrameTools_FB_SetState(
                   1127:                                                        lpOutlineDoc->m_lpFrameTools, BARSTATE_TOP);
                   1128:                     OutlineDoc_AddFrameLevelTools(lpOutlineDoc);
                   1129:                     break;
                   1130: 
                   1131:                 case IDM_O_FB_BOTTOM:
                   1132:                     FrameTools_FB_SetState(
                   1133:                                                        lpOutlineDoc->m_lpFrameTools, BARSTATE_BOTTOM);
                   1134:                     OutlineDoc_AddFrameLevelTools(lpOutlineDoc);
                   1135:                     break;
                   1136: 
                   1137:                 case IDM_O_FB_POPUP:
                   1138:                     FrameTools_FB_SetState(
                   1139:                                                        lpOutlineDoc->m_lpFrameTools, BARSTATE_POPUP);
                   1140:                     OutlineDoc_AddFrameLevelTools(lpOutlineDoc);
                   1141:                     break;
                   1142:                     
                   1143:                 case IDM_FB_EDIT:
                   1144:                     
                   1145:                     switch (wNotifyCode) {
                   1146:                         case EN_SETFOCUS:
                   1147:                             OutlineDoc_SetFormulaBarEditFocus(
                   1148:                                     lpOutlineDoc, TRUE);
                   1149:                             OutlineDoc_UpdateFrameToolButtons(lpOutlineDoc);
                   1150:                             break;
                   1151:                             
                   1152:                         case EN_KILLFOCUS:
                   1153:                             OutlineDoc_SetFormulaBarEditFocus(
                   1154:                                     lpOutlineDoc, FALSE);
                   1155:                             OutlineDoc_UpdateFrameToolButtons(lpOutlineDoc);
                   1156:                             break;
                   1157:                     }
                   1158:                     break;
                   1159:                     
                   1160:                 case IDM_FB_CANCEL:
                   1161:                     SetFocus(hWnd);
                   1162:                     break;
                   1163:                 
                   1164:                     
                   1165:                 case IDM_F2:
                   1166:                     SendMessage(hWnd, WM_COMMAND, (WPARAM)IDM_FB_EDIT,
                   1167:                             MAKELONG(0, EN_SETFOCUS));
                   1168:                     break;
                   1169: #endif  // USE_FRAMETOOLS
                   1170: 
                   1171: 
                   1172: #if defined( USE_HEADING )
                   1173:                 case IDC_BUTTON:
                   1174:                     if (wNotifyCode == BN_CLICKED) {
                   1175:                         SendMessage(hWnd, WM_COMMAND, IDM_E_SELECTALL, 0L);
                   1176:                         SetFocus(hWnd);
                   1177:                     }
                   1178:                     break;
                   1179: 
                   1180:                 case IDM_O_HEAD_SHOW: 
                   1181:                                        OutlineDoc_ShowHeading(lpOutlineDoc, TRUE);
                   1182:                     break;
                   1183:                     
                   1184:                 case IDM_O_HEAD_HIDE:
                   1185:                                        OutlineDoc_ShowHeading(lpOutlineDoc, FALSE);
                   1186:                     break;
                   1187: #endif  // USE_HEADING
                   1188: 
                   1189: 
                   1190: #if defined( OLE_CNTR )
                   1191:                                case IDM_O_SHOWOBJECT:
                   1192:                                {
                   1193:                                        LPCONTAINERDOC lpContainerDoc = 
                   1194:                                                                (LPCONTAINERDOC)lpOutlineDoc;
                   1195:                     BOOL               fShowObject;
                   1196:                                        
                   1197:                                        fShowObject = !ContainerDoc_GetShowObjectFlag(
                   1198:                                                        lpContainerDoc);
                   1199:                                        ContainerDoc_SetShowObjectFlag(
                   1200:                             lpContainerDoc, fShowObject);
                   1201:                                        LineList_ForceRedraw(lpLL, TRUE);
                   1202:                                        
                   1203:                                        break;
                   1204:                                }
                   1205: #endif  // OLE_CNTR
                   1206: 
                   1207: #if !defined( OLE_CNTR )
                   1208:                 // Container does not allow zoom factors > 100%
                   1209:                                case IDM_V_ZOOM_400:
                   1210:                                case IDM_V_ZOOM_300:
                   1211:                                case IDM_V_ZOOM_200:
                   1212: #endif         // !OLE_CNTR
                   1213: 
                   1214:                                case IDM_V_ZOOM_100:
                   1215:                                case IDM_V_ZOOM_75:
                   1216:                                case IDM_V_ZOOM_50:
                   1217:                                case IDM_V_ZOOM_25:
                   1218:                     OutlineDoc_SetCurrentZoomCommand(lpOutlineDoc, wID);
                   1219:                     break;
                   1220:                                
                   1221:                                case IDM_V_SETMARGIN_0:
                   1222:                                case IDM_V_SETMARGIN_1:
                   1223:                                case IDM_V_SETMARGIN_2:
                   1224:                                case IDM_V_SETMARGIN_3:
                   1225:                                case IDM_V_SETMARGIN_4:
                   1226:                     OutlineDoc_SetCurrentMarginCommand(lpOutlineDoc, wID);
                   1227:                                        break;
                   1228:                                
                   1229:                                case IDM_V_ADDTOP_1:
                   1230:                                case IDM_V_ADDTOP_2:
                   1231:                                case IDM_V_ADDTOP_3:
                   1232:                                case IDM_V_ADDTOP_4:
                   1233:                                {
                   1234:                     UINT nHeightInHimetric;
                   1235:                                        
                   1236:                                        switch (wID) {
                   1237:                                                case IDM_V_ADDTOP_1:
                   1238:                                                        nHeightInHimetric = 1000;
                   1239:                                                        break;
                   1240:                                                        
                   1241:                                                case IDM_V_ADDTOP_2:
                   1242:                                                        nHeightInHimetric = 2000;
                   1243:                                                        break;
                   1244:                                                        
                   1245:                                                case IDM_V_ADDTOP_3:
                   1246:                                                        nHeightInHimetric = 3000;
                   1247:                                                        break;
                   1248:                                                        
                   1249:                                                case IDM_V_ADDTOP_4:
                   1250:                                                        nHeightInHimetric = 4000;
                   1251:                                                        break;
                   1252:                                        }
                   1253:                                        
                   1254:                                        OutlineDoc_AddTopLineCommand(
                   1255:                             lpOutlineDoc, nHeightInHimetric);
                   1256:                                        break;
                   1257:                                }
                   1258: 
                   1259:                                
                   1260:                 case IDM_H_ABOUT:
                   1261:                     OutlineApp_AboutCommand(lpOutlineApp);
                   1262:                     break;
                   1263: 
                   1264:                 case IDM_D_DEBUGLEVEL:
                   1265:                     SetDebugLevelCommand();
                   1266:                     break;
                   1267: 
                   1268: #if defined( OLE_VERSION )
                   1269:                 case IDM_D_INSTALLMSGFILTER:
                   1270:                     InstallMessageFilterCommand();
                   1271:                     break;
                   1272:                     
                   1273:                 case IDM_D_REJECTINCOMING:
                   1274:                     RejectIncomingCommand();
                   1275:                     break;
                   1276: #endif // OLE_VERSION
                   1277: 
                   1278: #if defined( INPLACE_CNTR )
                   1279:                 case IDM_D_INSIDEOUT:
                   1280:                     g_fInsideOutContainer = !g_fInsideOutContainer;
                   1281:                     
                   1282:                     // force all object to unload so they can start new 
                   1283:                     // activation behavior.
                   1284:                     ContainerDoc_UnloadAllOleObjectsOfClass(
                   1285:                             (LPCONTAINERDOC)lpOutlineDoc, &CLSID_NULL);
                   1286:                     OutlineDoc_ForceRedraw(lpOutlineDoc, TRUE);
                   1287:                     break;
                   1288: #endif  // INPLACE_CNTR
                   1289: 
                   1290: 
                   1291:                 case IDC_LINELIST: {
                   1292: 
                   1293:                     if (wNotifyCode == LBN_DBLCLK) {
                   1294:                         int nIndex = LineList_GetFocusLineIndex(lpLL);
                   1295:                         LPLINE lpLine = LineList_GetLine(lpLL, nIndex);
                   1296:                         
                   1297:                         if (Line_GetLineType(lpLine) == CONTAINERLINETYPE) {
                   1298:                             OutlineDoc_EditLineCommand( lpOutlineDoc );
                   1299:                         }
                   1300: 
                   1301: #if defined( INPLACE_CNTR )
                   1302:                         { // BEGIN BLOCK
                   1303:                             LPCONTAINERDOC lpContainerDoc = 
                   1304:                                     (LPCONTAINERDOC) lpOutlineDoc;
                   1305:                             if (lpContainerDoc->m_fAddMyUI) {
                   1306:                                 /* OLE2NOTE: fAddMyUI is TRUE when
                   1307:                                 **    there was previously an in-place
                   1308:                                 **    active object which got
                   1309:                                 **    UIDeactivated as a result of this
                   1310:                                 **    DBLCLK AND the DBLCLK did NOT
                   1311:                                 **    result in in-place activating
                   1312:                                 **    another object. 
                   1313:                                 **    (see IOleInPlaceSite::OnUIActivate and
                   1314:                                 **    IOleInPlaceSite::OnUIDeactivate
                   1315:                                 **    methods).
                   1316:                                 */
                   1317: #if defined( USE_DOCTOOLS )
                   1318:                                 ContainerDoc_AddDocLevelTools(lpContainerDoc);
                   1319: #endif
                   1320: 
                   1321: #if defined( USE_FRAMETOOLS )
                   1322:                                 ContainerDoc_AddFrameLevelUI(lpContainerDoc);
                   1323: #endif
                   1324:                                 lpContainerDoc->m_fAddMyUI = FALSE; 
                   1325:                             }
                   1326:                         } // END BLOCK
                   1327: #endif // INPLACE_CNTR
                   1328:                     }
                   1329:                     break;
                   1330:                 }
                   1331:                 
                   1332:                 
                   1333:                 default:
                   1334: 
                   1335: #if defined( OLE_CNTR )
                   1336:                     if (wID >= IDM_E_OBJECTVERBMIN) {
                   1337: 
                   1338:                         OleDbgOutNoPrefix2("\r\n");
                   1339:                         OLEDBG_BEGIN2("ContainerDoc_ContainerLineDoVerbCommand\r\n")
                   1340:                         ContainerDoc_ContainerLineDoVerbCommand(
                   1341:                                 (LPCONTAINERDOC)lpOutlineDoc, 
                   1342:                                 (LONG)(wID-IDM_E_OBJECTVERBMIN)
                   1343:                         );
                   1344: 
                   1345:                         OLEDBG_END2
                   1346:                         break;
                   1347:                     }
                   1348: #endif // OLE_CNTR
                   1349:                     return DefWindowProc(hWnd, Message, wParam, lParam);
                   1350:             }
                   1351:             
                   1352:             break;  /* End of WM_COMMAND */
                   1353:         }
                   1354:         default:
                   1355: 
                   1356:             if (Message == g_uMsgHelp) {
                   1357:                 /* Handle OLE2UI dialog's help messages. 
                   1358:                 ** We get the hDlg of the dialog that called us in the wParam
                   1359:                 ** and the dialog type in the LOWORD of the lParam, 
                   1360:                 ** so we pass this along to our help function.
                   1361:                 */
                   1362:                 OutlineDoc_DialogHelp((HWND)wParam, LOWORD(lParam));
                   1363:                 break;
                   1364:             }  
                   1365: 
                   1366:             /* For any message for which you don't specifically provide a  */
                   1367:             /* service routine, you should return the message to Windows   */
                   1368:             /* for default message processing.                             */
                   1369:             return DefWindowProc(hWnd, Message, wParam, lParam);
                   1370:     }
                   1371:     
                   1372:     return (LRESULT)0;
                   1373: 
                   1374: } /* End of DocWndProc */
                   1375: 
                   1376: 
                   1377: 
                   1378: //***********************************************************************
                   1379: //*                                                                      
                   1380: //* LineListWndProc()  Drag and Drop Listbox Window Proc Sub-Class   
                   1381: //*                                                                     
                   1382: //* Sub Class the Ownerdraw list box in order to activate the drag drop.
                   1383: //***********************************************************************
                   1384: 
                   1385: LRESULT FAR PASCAL LineListWndProc(
                   1386:     HWND   hWnd,
                   1387:     UINT   Message,
                   1388:     WPARAM wParam,
                   1389:     LPARAM lParam
                   1390: )
                   1391: {
                   1392:        HWND         hwndParent = GetParent ( hWnd );
                   1393:     LPOUTLINEAPP lpOutlineApp = (LPOUTLINEAPP)g_lpApp;
                   1394:     LPOUTLINEDOC lpOutlineDoc = (LPOUTLINEDOC) GetWindowLong( hwndParent, 0 );
                   1395:     LPLINELIST   lpLL = OutlineDoc_GetLineList(lpOutlineDoc);
                   1396: 
                   1397: #if defined( OLE_VERSION )
                   1398:     LPOLEAPP     lpOleApp = (LPOLEAPP)lpOutlineApp;
                   1399:     LPOLEDOC     lpOleDoc = (LPOLEDOC)lpOutlineDoc;
                   1400: #endif // OLE_VERSION
                   1401: 
                   1402: #if defined( INPLACE_SVR )
                   1403:     LPSERVERDOC  lpServerDoc = (LPSERVERDOC)lpOutlineDoc;
                   1404:     static BOOL  fUIActivateClick = FALSE;
                   1405:     static BOOL  fInWinPosChged = FALSE; 
                   1406: #endif  // INPLACE_SVR
                   1407:  
                   1408: #if defined( INPLACE_CNTR )
                   1409:     LPCONTAINERAPP lpContainerApp=(LPCONTAINERAPP)lpOutlineApp;
                   1410:     LPCONTAINERDOC lpContainerDoc=(LPCONTAINERDOC)lpOutlineDoc;
                   1411: #endif  // INPLACE_CNTR
                   1412: 
                   1413:     switch (Message) {
                   1414: 
                   1415:         case WM_KILLFOCUS:
                   1416:             /* OLE2NOTE: when our window looses focus we 
                   1417:             **    should not display any active selection
                   1418:             */
                   1419: #if defined( INPLACE_CNTR )
                   1420:             if (! lpContainerApp->m_fPendingUIDeactivate) 
                   1421: #endif  // INPLACE_CNTR
                   1422:                 LineList_RemoveSel(lpLL);
                   1423:             break;
                   1424: 
                   1425:         case WM_SETFOCUS:
                   1426: 
                   1427: #if defined( INPLACE_CNTR )
                   1428:             {
                   1429:                 HWND hWndObj=ContainerDoc_GetUIActiveWindow(lpContainerDoc);
                   1430:             
                   1431:                 /* OLE2NOTE: if there is a UIActive in-place object, we must
                   1432:                 **    forward focus to its window as long as there is
                   1433:                 **    not a pending UIDeactivate. if the mouse is
                   1434:                 **    clicked outside of the object and the object is
                   1435:                 **    about to be deactivated then we do NOT want to
                   1436:                 **    forward focus to the object. we do NOT want it to
                   1437:                 **    restore its selection feedback.
                   1438:                 */
                   1439:                 if (lpContainerApp->m_fPendingUIDeactivate) 
                   1440:                     break;  
                   1441:                 else if (hWndObj) {
                   1442:                     SetFocus(hWndObj);
                   1443:                     break;      // do not restore containers selection state
                   1444:                 }
                   1445:             }
                   1446: #endif  // INPLACE_CNTR
                   1447: 
                   1448:             /* OLE2NOTE: when our window gains focus we 
                   1449:             **    should restore the previous selection
                   1450:             */
                   1451:             LineList_RestoreSel(lpLL);
                   1452: 
                   1453:             break;
                   1454: 
                   1455: #if defined( INPLACE_SVR )
                   1456:                case WM_MOUSEACTIVATE: 
                   1457:         {
                   1458:             if (lpServerDoc->m_fInPlaceActive && !lpServerDoc->m_fUIActive) {
                   1459:                 fUIActivateClick = TRUE;
                   1460:             };
                   1461:                        break;
                   1462:         }
                   1463: 
                   1464: #endif  // INPLACE_SVR
                   1465: 
                   1466: 
                   1467: #if defined( USE_FRAMETOOLS )
                   1468:         case WM_CHAR: 
                   1469:         {
                   1470:             OutlineDoc_SetFormulaBarEditFocus(lpOutlineDoc, TRUE);
                   1471:             FrameTools_FB_SetEditText(lpOutlineDoc->m_lpFrameTools, NULL);
                   1472:             FrameTools_FB_SendMessage(
                   1473:                     lpOutlineDoc->m_lpFrameTools,
                   1474:                     IDM_FB_EDIT,
                   1475:                     Message,
                   1476:                     wParam,
                   1477:                     lParam
                   1478:             );
                   1479:             
                   1480:             return (LRESULT)0;   // don't do default listbox processing
                   1481:         }
                   1482: #endif // USE_FRAMETOOLS
                   1483: 
                   1484: #if defined( USE_HEADING )
                   1485:         case WM_HSCROLL:
                   1486:         {
                   1487:             LPHEADING lphead = OutlineDoc_GetHeading(lpOutlineDoc);
                   1488:             
                   1489:             Heading_CH_SendMessage(lphead, Message, wParam, lParam);
                   1490:                 
                   1491:             break;
                   1492:         }
                   1493:         
                   1494:         // NOTE: WM_PAINT trapped for vertical scroll only. Should have 
                   1495:         //       WM_VSCROLL instead but it is not generated from scrolling
                   1496:         //       without using scroll bar (e.g. use keyboard). 
                   1497:         case WM_PAINT:
                   1498:         {
                   1499:             Heading_RH_Scroll(OutlineDoc_GetHeading(lpOutlineDoc), hWnd);
                   1500:             break;
                   1501:         }
                   1502:         
                   1503: #endif // USE_HEADING
                   1504: 
                   1505:         case WM_LBUTTONUP: 
                   1506:         {   
                   1507:             
                   1508: #if defined( USE_DRAGDROP )
                   1509:             if (lpOleDoc->m_fPendingDrag) {
                   1510:                 /* ButtonUP came BEFORE mouse moved beyond threshhold
                   1511:                 **    to start drag. clear fPendingDrag state.
                   1512:                 */
                   1513:                 ReleaseCapture();
                   1514:                 lpOleDoc->m_fPendingDrag = FALSE;
                   1515:             }
                   1516: #endif  // USE_DRAGDROP
                   1517: 
                   1518: #if defined( INPLACE_SVR )
                   1519:             if (fUIActivateClick) {
                   1520:                 fUIActivateClick = FALSE;
                   1521:                 ServerDoc_UIActivate((LPSERVERDOC) lpOleDoc);
                   1522:             }
                   1523: #endif  // INPLACE_SVR
                   1524: 
                   1525: #if defined( INPLACE_CNTR )
                   1526:             {
                   1527:                 /* check if a UIDeactivate is pending.   
                   1528:                 **      (see comment in WM_LBUTTONDOWN)
                   1529:                 */
                   1530:                 if ( lpContainerApp->m_fPendingUIDeactivate ) {
                   1531:                     ContainerLine_UIDeactivate(
                   1532:                             lpContainerDoc->m_lpLastUIActiveLine);
                   1533: 
                   1534:                     lpContainerApp->m_fPendingUIDeactivate = FALSE;
                   1535:                 }
                   1536:             }
                   1537: #endif  // INPLACE_CNTR
                   1538: 
                   1539:             break;
                   1540:         }
                   1541: 
                   1542:         case WM_LBUTTONDOWN: 
                   1543:         {
                   1544:             POINT pt;
                   1545: 
                   1546:             pt.x = (int)(short)LOWORD (lParam );
                   1547:             pt.y = (int)(short)HIWORD (lParam );
                   1548: 
                   1549: #if defined( INPLACE_CNTR )
                   1550:             {
                   1551:                 /* OLE2NOTE: both inside-out and outside-in style
                   1552:                 **    containers must check if the mouse click is
                   1553:                 **    outside of the current UIActive object (if
                   1554:                 **    any). If so, then set the flag indicating that
                   1555:                 **    there is a pending UIDeactivate needed. We do NOT
                   1556:                 **    want to do it now, 
                   1557:                 **    because that would result in un-wanted movement of
                   1558:                 **    the data on the screen as frame adornments (eg.
                   1559:                 **    toolbar) and/or object adornments (eg. ruler) would
                   1560:                 **    be removed from the screen. we want to defer the
                   1561:                 **    UIDeactivate till the mouse up event. The listbox's
                   1562:                 **    default processing captures the mouse on button down
                   1563:                 **    so that it is sure to get the button up message.
                   1564:                 **    
                   1565:                 **    SPECIAL NOTE: there is potential interaction here
                   1566:                 **    with Drag/Drop. if this button down event actually
                   1567:                 **    starts a Drag/Drop operation, then OLE does the mouse
                   1568:                 **    capture. in this situation we will NOT get our button
                   1569:                 **    up event. we must instead perform the UIDeactivate
                   1570:                 **    when the drop operation finishes
                   1571:                 */
                   1572:                 lpContainerApp->m_fPendingUIDeactivate =
                   1573:                         ContainerDoc_IsUIDeactivateNeeded(lpContainerDoc, pt);
                   1574:             }
                   1575: #endif  // INPLACE_CNTR
                   1576: 
                   1577: #if defined( USE_DRAGDROP )         
                   1578: 
                   1579:             /* OLE2NOTE: check if this is a button down on the region
                   1580:             **    that is a handle to start a drag operation. for us,
                   1581:             **    this this the top/bottom border of the selection.
                   1582:             **    do NOT want to start a drag immediately; we want to
                   1583:             **    wait until the mouse moves a certain threshold. if
                   1584:             **    LButtonUp comes before mouse move to start drag, then
                   1585:             **    the fPendingDrag state is cleared. we must capture
                   1586:             **    the mouse to ensure the modal state is handled
                   1587:             **    properly. 
                   1588:             */
                   1589:             if ( OleDoc_QueryDrag(lpOleDoc, pt.y) ) {
                   1590:                 lpOleDoc->m_fPendingDrag = TRUE;
                   1591:                 lpOleDoc->m_ptButDown = pt;
                   1592:                 SetCursor(lpOleApp->m_hcursorDragMove);
                   1593:                 SetCapture(hWnd);
                   1594: 
                   1595:                 /* We do NOT want to do the listbox's default
                   1596:                 **    processing which would be to capture the mouse
                   1597:                 **    and enter a modal multiple selection state until
                   1598:                 **    a mouse up occurs. we have just finished a modal
                   1599:                 **    drag/drop operation where OLE has captured the
                   1600:                 **    mouse. thus by now the mouse up has already occured.
                   1601:                 */
                   1602: 
                   1603:                 return (LRESULT)0;   // don't do default listbox processing
                   1604:             }
                   1605: #endif  // USE_DRAGDROP
                   1606: 
                   1607:             break;
                   1608:         }
                   1609: 
                   1610: 
                   1611:         case WM_MOUSEMOVE: {
                   1612: 
                   1613: #if defined( USE_DRAGDROP )         
                   1614: 
                   1615:             int  x = (int)(short)LOWORD (lParam );
                   1616:             int  y = (int)(short)HIWORD (lParam );
                   1617:             POINT pt = lpOleDoc->m_ptButDown;
                   1618:             
                   1619:             if (lpOleDoc->m_fPendingDrag) {
                   1620:                 
                   1621:                 if (! ( ((pt.x-(DD_SEL_THRESH/2)) <= x)
                   1622:                         && (x <= (pt.x+(DD_SEL_THRESH/2)))
                   1623:                         && ((pt.y-(DD_SEL_THRESH/2)) <= y)
                   1624:                         && (y <= (pt.y+(DD_SEL_THRESH/2))) ) ) {
                   1625: 
                   1626:                     DWORD dwEffect;
                   1627: 
                   1628:                     // mouse moved beyond threshhold to start drag
                   1629:                     ReleaseCapture();
                   1630:                     lpOleDoc->m_fPendingDrag = FALSE;
                   1631: 
                   1632:                     // perform the modal drag/drop operation.
                   1633:                     dwEffect = OleDoc_DoDragDrop( lpOleDoc );
                   1634:                 
                   1635: #if defined( INPLACE_CNTR )
                   1636:                     {
                   1637:                         /* if necessary UIDeactive the in-place object.
                   1638:                         **    this applies to outside-in style
                   1639:                         **    container only. 
                   1640:                         **    (see comment above)
                   1641:                         */
                   1642:                         if (lpContainerApp->m_fPendingUIDeactivate) {
                   1643:                             lpContainerApp->m_fPendingUIDeactivate = FALSE;
                   1644: 
                   1645:                             // do not UIDeactivate if drag/drop was canceled
                   1646:                             if (dwEffect != DROPEFFECT_NONE) 
                   1647:                                 ContainerLine_UIDeactivate(
                   1648:                                         lpContainerDoc->m_lpLastUIActiveLine
                   1649:                                 );
                   1650:                         }
                   1651:                     }
                   1652: #endif  // INPLACE_CNTR
                   1653: 
                   1654:                     return (LRESULT)0; // don't do default listbox process
                   1655:                 }
                   1656:                 else {
                   1657:                     /* cursor did not move from initial mouse down
                   1658:                     **    (pending drag) point.
                   1659:                     */
                   1660:                     SetCursor(lpOleApp->m_hcursorDragMove);
                   1661:                     return (LRESULT)0; // don't do default listbox process
                   1662:                 }
                   1663:             }
                   1664: 
                   1665: #endif  // USE_DRAGDROP
                   1666: 
                   1667: #if defined( INPLACE_CNTR )
                   1668:             { // BEGIN BLOCK
                   1669:                 if (lpContainerDoc->m_fAddMyUI) {
                   1670:                     /* OLE2NOTE: fAddMyUI is TRUE when
                   1671:                     **    there was previously an in-place
                   1672:                     **    active object which got
                   1673:                     **    UIDeactivated as a result of a
                   1674:                     **    DBLCLK AND the DBLCLK did NOT
                   1675:                     **    result in in-place activating
                   1676:                     **    another object. 
                   1677:                     **    (see IOleInPlaceSite::OnUIActivate and
                   1678:                     **    IOleInPlaceSite::OnUIDeactivate
                   1679:                     **    methods).
                   1680:                     */
                   1681: #if defined( USE_DOCTOOLS )
                   1682:                     ContainerDoc_AddDocLevelTools(lpContainerDoc);
                   1683: #endif
                   1684: 
                   1685: #if defined( USE_FRAMETOOLS )
                   1686:                     ContainerDoc_AddFrameLevelUI(lpContainerDoc);
                   1687: #endif
                   1688:                     lpContainerDoc->m_fAddMyUI = FALSE; 
                   1689:                 }
                   1690:             } // END BLOCK
                   1691: #endif // INPLACE_CNTR
                   1692:             
                   1693:             break;
                   1694:         }
                   1695: 
                   1696: 
                   1697:         case WM_SETCURSOR: 
                   1698:         {
                   1699:             RECT rc;
                   1700:             POINT ptCursor;
                   1701:                 
                   1702:             GetCursorPos((POINT FAR*)&ptCursor);
                   1703:             ScreenToClient(hWnd, (POINT FAR*)&ptCursor);
                   1704:             GetClientRect(hWnd, (LPRECT)&rc);
                   1705:                 
                   1706:             // use arrow cursor if in scroll bar
                   1707:             if (! PtInRect((LPRECT)&rc, ptCursor) )
                   1708:                 SetCursor(LoadCursor( NULL, MAKEINTRESOURCE(IDC_ARROW) ) );
                   1709: 
                   1710: #if defined( USE_DRAGDROP )         
                   1711:             // use arrow cursor if on drag handle (top/bottom of selection)
                   1712:             else if ( OleDoc_QueryDrag ( lpOleDoc, ptCursor.y) )
                   1713:                 SetCursor(LoadCursor( NULL, MAKEINTRESOURCE(IDC_ARROW) ) );
                   1714: #endif  // USE_DRAGDROP
                   1715: 
                   1716:             else 
                   1717:                 SetCursor(lpOutlineApp->m_hcursorSelCur);
                   1718: 
                   1719:             return (LRESULT)TRUE;
                   1720:         }
                   1721: 
                   1722: #if defined( INPLACE_SVR )
                   1723: 
                   1724:         /* The handling of WM_WINDOWPOSCHANGED message is ISVROTL
                   1725:         **    application specific. The nature of the owner-draw list
                   1726:         **    box used by the ISVROTL application causes a recursive
                   1727:         **    call to this message in some situations when in-place
                   1728:         **    active. in order not to crash this recursive call must be
                   1729:         **    guarded.
                   1730:         */
                   1731:         case WM_WINDOWPOSCHANGED:
                   1732:         {
                   1733:             WINDOWPOS FAR* lpWinPos = (WINDOWPOS FAR*) lParam;
                   1734:             LRESULT lResult;
                   1735: 
                   1736:             // guard against recursive call
                   1737:             if (fInWinPosChged) 
                   1738:                 return (LRESULT)0;
                   1739: 
                   1740:             fInWinPosChged = TRUE;
                   1741:             lResult = CallWindowProc(
                   1742:                     (WNDPROC)lpOutlineApp->m_ListBoxWndProc,
                   1743:                     hWnd,
                   1744:                     Message,
                   1745:                     wParam,
                   1746:                     lParam
                   1747:             );
                   1748:             fInWinPosChged = FALSE;
                   1749: 
                   1750:             return lResult;
                   1751:         }    
                   1752: #endif  // INPLACE_SVR
                   1753: 
                   1754:     }       
                   1755: 
                   1756:     return CallWindowProc(
                   1757:             (WNDPROC)lpOutlineApp->m_ListBoxWndProc,
                   1758:             hWnd,
                   1759:             Message,
                   1760:             wParam,
                   1761:             lParam
                   1762:     );
                   1763: 
                   1764: }

unix.superglobalmegacorp.com

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