|
|
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: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.