|
|
1.1 ! root 1: /************************************************************************* ! 2: ** ! 3: ** OLE 2 Sample Code ! 4: ** ! 5: ** dialogs.c ! 6: ** ! 7: ** This file contains dialog functions and support function ! 8: ** ! 9: ** (c) Copyright Microsoft Corp. 1992 - 1993 All Rights Reserved ! 10: ** ! 11: *************************************************************************/ ! 12: ! 13: #include "outline.h" ! 14: ! 15: OLEDBGDATA ! 16: ! 17: extern LPOUTLINEAPP g_lpApp; ! 18: ! 19: static char g_szBuf[MAXSTRLEN+1]; ! 20: static LPSTR g_lpszDlgTitle; ! 21: ! 22: // REVIEW: should use string resource for messages ! 23: static char ErrMsgInvalidRange[] = "Invalid Range entered!"; ! 24: static char ErrMsgInvalidValue[] = "Invalid Value entered!"; ! 25: static char ErrMsgInvalidName[] = "Invalid Name entered!"; ! 26: static char ErrMsgNullName[] = "NULL string disallowed!"; ! 27: static char ErrMsgNameNotFound[] = "Name doesn't exist!"; ! 28: ! 29: /* InputTextDlg ! 30: * ------------ ! 31: * ! 32: * Put up a dialog box to allow the user to edit text ! 33: */ ! 34: BOOL InputTextDlg(HWND hWnd, LPSTR lpszText, LPSTR lpszDlgTitle) ! 35: { ! 36: int nResult; ! 37: ! 38: g_lpszDlgTitle = lpszDlgTitle; ! 39: lstrcpy((LPSTR)g_szBuf, lpszText); // preload dialog with input text ! 40: ! 41: nResult = DialogBox(g_lpApp->m_hInst, (LPSTR)"AddEditLine", hWnd, ! 42: (DLGPROC)AddEditDlgProc); ! 43: if (nResult) { ! 44: lstrcpy(lpszText, (LPSTR)g_szBuf); ! 45: return TRUE; ! 46: } else { ! 47: return FALSE; ! 48: } ! 49: } ! 50: ! 51: ! 52: ! 53: /* AddEditDlgProc ! 54: * -------------- ! 55: * ! 56: * This procedure is associated with the dialog box that is included in ! 57: * the function name of the procedure. It provides the service routines ! 58: * for the events (messages) that occur because the end user operates ! 59: * one of the dialog box's buttons, entry fields, or controls. ! 60: */ ! 61: BOOL CALLBACK EXPORT AddEditDlgProc(HWND hDlg, UINT Message, WPARAM wParam, LPARAM lParam) ! 62: { ! 63: HWND hEdit; ! 64: ! 65: switch(Message) { ! 66: case WM_INITDIALOG: ! 67: /* initialize working variables */ ! 68: hEdit=GetDlgItem(hDlg,IDD_EDIT); ! 69: SendMessage(hEdit,EM_LIMITTEXT,(WPARAM)MAXSTRLEN,0L); ! 70: SetWindowText(hDlg, g_lpszDlgTitle); ! 71: SetDlgItemText(hDlg,IDD_EDIT, g_szBuf); ! 72: break; /* End of WM_INITDIALOG */ ! 73: ! 74: case WM_CLOSE: ! 75: /* Closing the Dialog behaves the same as Cancel */ ! 76: PostMessage(hDlg, WM_COMMAND, IDCANCEL, 0L); ! 77: break; /* End of WM_CLOSE */ ! 78: ! 79: case WM_COMMAND: ! 80: switch (wParam) { ! 81: case IDOK: ! 82: /* save data values entered into the controls ! 83: ** and dismiss the dialog box returning TRUE ! 84: */ ! 85: GetDlgItemText(hDlg,IDD_EDIT,(LPSTR)g_szBuf,MAXSTRLEN+1); ! 86: EndDialog(hDlg, TRUE); ! 87: break; ! 88: ! 89: case IDCANCEL: ! 90: /* ignore data values entered into the controls ! 91: ** and dismiss the dialog box returning FALSE ! 92: */ ! 93: EndDialog(hDlg, FALSE); ! 94: break; ! 95: } ! 96: break; /* End of WM_COMMAND */ ! 97: ! 98: default: ! 99: return FALSE; ! 100: } ! 101: ! 102: return TRUE; ! 103: } /* End of AddEditDlgProc */ ! 104: ! 105: ! 106: /* SetLineHeightDlgProc ! 107: * -------------------- ! 108: * ! 109: * Dialog procedure for set line height ! 110: */ ! 111: BOOL CALLBACK EXPORT SetLineHeightDlgProc(HWND hDlg, UINT Message, WPARAM wParam, LPARAM lParam) ! 112: { ! 113: BOOL fTranslated; ! 114: BOOL fEnable; ! 115: static LPINT lpint; ! 116: int nHeight; ! 117: static int nMaxHeight; ! 118: ! 119: switch (Message) { ! 120: case WM_INITDIALOG: ! 121: { ! 122: char cBuf[80]; ! 123: ! 124: nMaxHeight = XformHeightInPixelsToHimetric(NULL, ! 125: LISTBOX_HEIGHT_LIMIT); ! 126: lpint = (LPINT)lParam; ! 127: SetDlgItemInt(hDlg, IDD_EDIT, *lpint, FALSE); ! 128: wsprintf(cBuf, "Maximum value is %d units", nMaxHeight); ! 129: SetDlgItemText(hDlg, IDD_LIMIT, (LPSTR)cBuf); ! 130: break; ! 131: } ! 132: ! 133: case WM_COMMAND: ! 134: switch (wParam) { ! 135: case IDOK: ! 136: if (IsDlgButtonChecked(hDlg, IDD_CHECK)) { ! 137: *lpint = -1; ! 138: } ! 139: else { ! 140: /* save the value in the edit control */ ! 141: nHeight = GetDlgItemInt(hDlg, IDD_EDIT, ! 142: (BOOL FAR*)&fTranslated, FALSE); ! 143: if (!fTranslated || !nHeight || (nHeight>nMaxHeight)){ ! 144: OutlineApp_ErrorMessage(g_lpApp, ! 145: ErrMsgInvalidValue); ! 146: break; ! 147: } ! 148: *lpint = nHeight; ! 149: } ! 150: EndDialog(hDlg, TRUE); ! 151: break; ! 152: ! 153: case IDCANCEL: ! 154: *lpint = 0; ! 155: EndDialog(hDlg, FALSE); ! 156: break; ! 157: ! 158: ! 159: case IDD_CHECK: ! 160: fEnable = !IsDlgButtonChecked(hDlg, IDD_CHECK); ! 161: EnableWindow(GetDlgItem(hDlg, IDD_EDIT), fEnable); ! 162: EnableWindow(GetDlgItem(hDlg, IDD_TEXT), fEnable); ! 163: break; ! 164: } ! 165: break; /* WM_COMMAND */ ! 166: ! 167: case WM_CLOSE: /* Closing the Dialog behaves the same as Cancel */ ! 168: PostMessage(hDlg, WM_COMMAND, IDCANCEL, 0L); ! 169: break; /* End of WM_CLOSE */ ! 170: ! 171: default: ! 172: return FALSE; ! 173: } ! 174: ! 175: return TRUE; ! 176: ! 177: } /* end of SetLineHeightProc */ ! 178: ! 179: ! 180: ! 181: ! 182: ! 183: /* DefineNameDlgProc ! 184: * ----------------- ! 185: * ! 186: * Dialog procedure for define name ! 187: */ ! 188: BOOL CALLBACK EXPORT DefineNameDlgProc(HWND hDlg, UINT Message, WPARAM wParam, LPARAM lParam) ! 189: { ! 190: static HWND hCombo; ! 191: static LPOUTLINEDOC lpOutlineDoc = NULL; ! 192: static LPOUTLINENAMETABLE lpOutlineNameTable = NULL; ! 193: LPOUTLINENAME lpOutlineName = NULL; ! 194: UINT nIndex; ! 195: LINERANGE lrSel; ! 196: BOOL fTranslated; ! 197: ! 198: switch(Message) { ! 199: case WM_INITDIALOG: ! 200: /* initialize working variables */ ! 201: hCombo=GetDlgItem(hDlg,IDD_COMBO); ! 202: lpOutlineDoc = (LPOUTLINEDOC) lParam; ! 203: lpOutlineNameTable = OutlineDoc_GetNameTable(lpOutlineDoc); ! 204: ! 205: SendMessage(hCombo,CB_LIMITTEXT,(WPARAM)MAXNAMESIZE,0L); ! 206: NameDlg_LoadComboBox(lpOutlineNameTable, hCombo); ! 207: ! 208: OutlineDoc_GetSel(lpOutlineDoc, (LPLINERANGE)&lrSel); ! 209: lpOutlineName = OutlineNameTable_FindNamedRange( ! 210: lpOutlineNameTable, ! 211: &lrSel ! 212: ); ! 213: ! 214: /* if current selection already has a name, hilight it */ ! 215: if (lpOutlineName) { ! 216: nIndex = (int) SendMessage( ! 217: hCombo, ! 218: CB_FINDSTRINGEXACT, ! 219: (WPARAM)0xffff, ! 220: (LPARAM)(LPCSTR)lpOutlineName->m_szName ! 221: ); ! 222: if (nIndex != CB_ERR) { ! 223: SendMessage(hCombo, CB_SETCURSEL, (WPARAM)nIndex, 0L); ! 224: } ! 225: } ! 226: ! 227: SetDlgItemInt(hDlg, IDD_FROM, (UINT)lrSel.m_nStartLine+1,FALSE); ! 228: SetDlgItemInt(hDlg, IDD_TO, (UINT)lrSel.m_nEndLine+1, FALSE); ! 229: ! 230: break; /* End of WM_INITDIALOG */ ! 231: ! 232: case WM_CLOSE: ! 233: /* Closing the Dialog behaves the same as Cancel */ ! 234: PostMessage(hDlg, WM_COMMAND, IDD_CLOSE, 0L); ! 235: break; /* End of WM_CLOSE */ ! 236: ! 237: case WM_COMMAND: ! 238: switch(wParam) { ! 239: case IDOK: ! 240: GetDlgItemText(hDlg,IDD_COMBO,(LPSTR)g_szBuf,MAXNAMESIZE); ! 241: if(! SendMessage(hCombo,WM_GETTEXTLENGTH,0,0L)) { ! 242: MessageBox( ! 243: hDlg, ! 244: ErrMsgNullName, ! 245: NULL, ! 246: MB_ICONEXCLAMATION ! 247: ); ! 248: break; ! 249: } else if(SendMessage(hCombo,CB_GETCURSEL,0,0L)==CB_ERR && ! 250: _fstrchr(g_szBuf, ' ')) { ! 251: MessageBox( ! 252: hDlg, ! 253: ErrMsgInvalidName, ! 254: NULL, ! 255: MB_ICONEXCLAMATION ! 256: ); ! 257: break; ! 258: } else { ! 259: nIndex = (int) SendMessage(hCombo,CB_FINDSTRINGEXACT, ! 260: (WPARAM)0xffff,(LPARAM)(LPCSTR)g_szBuf); ! 261: ! 262: /* Line indices are 1 less than the number in ! 263: ** the row heading ! 264: */ ! 265: lrSel.m_nStartLine = GetDlgItemInt(hDlg, IDD_FROM, ! 266: (BOOL FAR*)&fTranslated, FALSE) - 1; ! 267: if(! fTranslated) { ! 268: OutlineApp_ErrorMessage(g_lpApp, ! 269: ErrMsgInvalidRange); ! 270: break; ! 271: } ! 272: lrSel.m_nEndLine = GetDlgItemInt(hDlg, IDD_TO, ! 273: (BOOL FAR*)&fTranslated, FALSE) - 1; ! 274: if (!fTranslated || ! 275: (lrSel.m_nStartLine < 0) || ! 276: (lrSel.m_nEndLine < lrSel.m_nStartLine) || ! 277: (lrSel.m_nEndLine >= OutlineDoc_GetLineCount( ! 278: lpOutlineDoc))) { ! 279: OutlineApp_ErrorMessage(g_lpApp, ! 280: ErrMsgInvalidRange); ! 281: break; ! 282: } ! 283: ! 284: if(nIndex != CB_ERR) { ! 285: NameDlg_UpdateName( ! 286: hCombo, ! 287: lpOutlineDoc, ! 288: nIndex, ! 289: g_szBuf, ! 290: &lrSel ! 291: ); ! 292: } else { ! 293: NameDlg_AddName( ! 294: hCombo, ! 295: lpOutlineDoc, ! 296: g_szBuf, ! 297: &lrSel ! 298: ); ! 299: } ! 300: } ! 301: // fall through ! 302: ! 303: case IDD_CLOSE: ! 304: /* Ignore data values entered into the controls */ ! 305: /* and dismiss the dialog window returning FALSE */ ! 306: EndDialog(hDlg,0); ! 307: break; ! 308: ! 309: case IDD_DELETE: ! 310: GetDlgItemText(hDlg,IDD_COMBO,(LPSTR)g_szBuf,MAXNAMESIZE); ! 311: if((nIndex=(int)SendMessage(hCombo,CB_FINDSTRINGEXACT, ! 312: (WPARAM)0xffff,(LPARAM)(LPCSTR)g_szBuf))==CB_ERR) ! 313: MessageBox(hDlg, ErrMsgNameNotFound, NULL, MB_ICONEXCLAMATION); ! 314: else { ! 315: NameDlg_DeleteName(hCombo, lpOutlineDoc, nIndex); ! 316: } ! 317: break; ! 318: ! 319: case IDD_COMBO: ! 320: if(HIWORD(lParam) == CBN_SELCHANGE) { ! 321: nIndex=(int)SendMessage(hCombo, CB_GETCURSEL, 0, 0L); ! 322: lpOutlineName = (LPOUTLINENAME)SendMessage( ! 323: hCombo, ! 324: CB_GETITEMDATA, ! 325: (WPARAM)nIndex, ! 326: 0L ! 327: ); ! 328: SetDlgItemInt( ! 329: hDlg, ! 330: IDD_FROM, ! 331: (UINT) lpOutlineName->m_nStartLine + 1, ! 332: FALSE ! 333: ); ! 334: SetDlgItemInt( ! 335: hDlg, ! 336: IDD_TO, ! 337: (UINT) lpOutlineName->m_nEndLine + 1, ! 338: FALSE ! 339: ); ! 340: } ! 341: } ! 342: break; /* End of WM_COMMAND */ ! 343: ! 344: default: ! 345: return FALSE; ! 346: } ! 347: ! 348: return TRUE; ! 349: } /* End of DefineNameDlgProc */ ! 350: ! 351: ! 352: /* GotoNameDlgProc ! 353: * --------------- ! 354: * ! 355: * Dialog procedure for goto name ! 356: */ ! 357: BOOL CALLBACK EXPORT GotoNameDlgProc(HWND hDlg, UINT Message, WPARAM wParam, LPARAM lParam) ! 358: { ! 359: static HWND hLBName; ! 360: static LPOUTLINEDOC lpOutlineDoc = NULL; ! 361: static LPOUTLINENAMETABLE lpOutlineNameTable = NULL; ! 362: UINT nIndex; ! 363: LINERANGE lrLineRange; ! 364: LPOUTLINENAME lpOutlineName; ! 365: ! 366: switch(Message) { ! 367: case WM_INITDIALOG: ! 368: /* initialize working variables */ ! 369: lpOutlineDoc = (LPOUTLINEDOC) lParam; ! 370: lpOutlineNameTable = OutlineDoc_GetNameTable(lpOutlineDoc); ! 371: ! 372: hLBName=GetDlgItem(hDlg,IDD_LINELISTBOX); ! 373: NameDlg_LoadListBox(lpOutlineNameTable, hLBName); ! 374: ! 375: // highlight 1st item ! 376: SendMessage(hLBName, LB_SETCURSEL, 0, 0L); ! 377: // trigger to initialize edit control ! 378: SendMessage(hDlg, WM_COMMAND, (WPARAM)IDD_LINELISTBOX, ! 379: MAKELONG(hLBName, LBN_SELCHANGE)); ! 380: ! 381: break; /* End of WM_INITDIALOG */ ! 382: ! 383: case WM_CLOSE: ! 384: /* Closing the Dialog behaves the same as Cancel */ ! 385: PostMessage(hDlg, WM_COMMAND, IDCANCEL, 0L); ! 386: break; /* End of WM_CLOSE */ ! 387: ! 388: case WM_COMMAND: ! 389: switch(wParam) { ! 390: case IDD_LINELISTBOX: ! 391: if(HIWORD(lParam) == LBN_SELCHANGE) { ! 392: // update the line range display ! 393: nIndex=(int)SendMessage(hLBName, LB_GETCURSEL, 0, 0L); ! 394: lpOutlineName = (LPOUTLINENAME)SendMessage(hLBName, LB_GETITEMDATA, ! 395: (WPARAM)nIndex,0L); ! 396: if (lpOutlineName) { ! 397: SetDlgItemInt( ! 398: hDlg, ! 399: IDD_FROM, ! 400: (UINT) lpOutlineName->m_nStartLine + 1, ! 401: FALSE ! 402: ); ! 403: SetDlgItemInt( ! 404: hDlg, ! 405: IDD_TO, ! 406: (UINT) lpOutlineName->m_nEndLine + 1, ! 407: FALSE ! 408: ); ! 409: } ! 410: break; ! 411: } ! 412: // double click will fall through ! 413: else if(HIWORD(lParam) != LBN_DBLCLK) ! 414: break; ! 415: ! 416: case IDOK: ! 417: nIndex=(int)SendMessage(hLBName,LB_GETCURSEL,0,0L); ! 418: if(nIndex!=LB_ERR) { ! 419: lpOutlineName = (LPOUTLINENAME)SendMessage(hLBName, ! 420: LB_GETITEMDATA, (WPARAM)nIndex, 0L); ! 421: lrLineRange.m_nStartLine=lpOutlineName->m_nStartLine; ! 422: lrLineRange.m_nEndLine = lpOutlineName->m_nEndLine; ! 423: OutlineDoc_SetSel(lpOutlineDoc, &lrLineRange); ! 424: } // fall through ! 425: ! 426: case IDCANCEL: ! 427: /* Ignore data values entered into the controls */ ! 428: /* and dismiss the dialog window returning FALSE */ ! 429: EndDialog(hDlg,0); ! 430: break; ! 431: ! 432: } ! 433: break; /* End of WM_COMMAND */ ! 434: ! 435: default: ! 436: return FALSE; ! 437: } ! 438: ! 439: return TRUE; ! 440: } /* End of GotoNameDlgProc */ ! 441: ! 442: ! 443: ! 444: /* NameDlg_LoadComboBox ! 445: * -------------------- ! 446: * ! 447: * Load defined names into combo box ! 448: */ ! 449: void NameDlg_LoadComboBox(LPOUTLINENAMETABLE lpOutlineNameTable,HWND hCombo) ! 450: { ! 451: LPOUTLINENAME lpOutlineName; ! 452: int i, nIndex; ! 453: int nCount; ! 454: ! 455: nCount=OutlineNameTable_GetCount((LPOUTLINENAMETABLE)lpOutlineNameTable); ! 456: if(!nCount) return; ! 457: ! 458: SendMessage(hCombo,WM_SETREDRAW,(WPARAM)FALSE,0L); ! 459: for(i=0; i<nCount; i++) { ! 460: lpOutlineName=OutlineNameTable_GetName((LPOUTLINENAMETABLE)lpOutlineNameTable,i); ! 461: nIndex = (int)SendMessage( ! 462: hCombo, ! 463: CB_ADDSTRING, ! 464: 0, ! 465: (LPARAM)(LPCSTR)lpOutlineName->m_szName ! 466: ); ! 467: SendMessage(hCombo,CB_SETITEMDATA,(WPARAM)nIndex,(LPARAM)lpOutlineName); ! 468: } ! 469: SendMessage(hCombo,WM_SETREDRAW,(WPARAM)TRUE,0L); ! 470: } ! 471: ! 472: ! 473: /* NameDlg_LoadListBox ! 474: * ------------------- ! 475: * ! 476: * Load defined names into list box ! 477: */ ! 478: void NameDlg_LoadListBox(LPOUTLINENAMETABLE lpOutlineNameTable,HWND hListBox) ! 479: { ! 480: int i; ! 481: int nCount; ! 482: int nIndex; ! 483: LPOUTLINENAME lpOutlineName; ! 484: ! 485: nCount=OutlineNameTable_GetCount((LPOUTLINENAMETABLE)lpOutlineNameTable); ! 486: ! 487: SendMessage(hListBox,WM_SETREDRAW,(WPARAM)FALSE,0L); ! 488: for(i=0; i<nCount; i++) { ! 489: lpOutlineName=OutlineNameTable_GetName((LPOUTLINENAMETABLE)lpOutlineNameTable,i); ! 490: nIndex = (int)SendMessage( ! 491: hListBox, ! 492: LB_ADDSTRING, ! 493: 0, ! 494: (LPARAM)(LPCSTR)lpOutlineName->m_szName ! 495: ); ! 496: SendMessage(hListBox,LB_SETITEMDATA,(WPARAM)nIndex,(LPARAM)lpOutlineName); ! 497: } ! 498: SendMessage(hListBox,WM_SETREDRAW,(WPARAM)TRUE,0L); ! 499: } ! 500: ! 501: ! 502: /* NameDlg_AddName ! 503: * --------------- ! 504: * ! 505: * Add a name to the name table corresponding to the name dialog ! 506: * combo box. ! 507: */ ! 508: void NameDlg_AddName(HWND hCombo, LPOUTLINEDOC lpOutlineDoc, LPSTR lpszName, LPLINERANGE lplrSel) ! 509: { ! 510: LPOUTLINEAPP lpOutlineApp = (LPOUTLINEAPP)g_lpApp; ! 511: LPOUTLINENAME lpOutlineName; ! 512: ! 513: lpOutlineName = OutlineApp_CreateName(lpOutlineApp); ! 514: ! 515: if (lpOutlineName) { ! 516: lstrcpy(lpOutlineName->m_szName, lpszName); ! 517: lpOutlineName->m_nStartLine = lplrSel->m_nStartLine; ! 518: lpOutlineName->m_nEndLine = lplrSel->m_nEndLine; ! 519: OutlineDoc_AddName(lpOutlineDoc, lpOutlineName); ! 520: } else { ! 521: // REVIEW: do we need error message here? ! 522: } ! 523: } ! 524: ! 525: ! 526: /* NameDlg_UpdateName ! 527: * ------------------ ! 528: * ! 529: * Update a name in the name table corresponding to a name in ! 530: * the name dialog combo box. ! 531: */ ! 532: void NameDlg_UpdateName(HWND hCombo, LPOUTLINEDOC lpOutlineDoc, int nIndex, LPSTR lpszName, LPLINERANGE lplrSel) ! 533: { ! 534: LPOUTLINENAME lpOutlineName; ! 535: ! 536: lpOutlineName = (LPOUTLINENAME)SendMessage( ! 537: hCombo, ! 538: CB_GETITEMDATA, ! 539: (WPARAM)nIndex, ! 540: 0L ! 541: ); ! 542: ! 543: OutlineName_SetName(lpOutlineName, lpszName); ! 544: OutlineName_SetSel(lpOutlineName, lplrSel, TRUE /* name modified */); ! 545: OutlineDoc_SetModified(lpOutlineDoc, TRUE, FALSE, FALSE); ! 546: } ! 547: ! 548: ! 549: /* NameDlg_DeleteName ! 550: * ------------------ ! 551: * ! 552: * Delete a name from the name dialog combo box and corresponding ! 553: * name table. ! 554: */ ! 555: void NameDlg_DeleteName(HWND hCombo, LPOUTLINEDOC lpOutlineDoc, UINT nIndex) ! 556: { ! 557: SendMessage(hCombo,CB_DELETESTRING,(WPARAM)nIndex,0L); ! 558: OutlineDoc_DeleteName(lpOutlineDoc, nIndex); ! 559: } ! 560: ! 561: /* PlaceBitmap ! 562: * ----------- ! 563: * ! 564: * Places a bitmap centered in the specified control in the dialog on the ! 565: * specified DC. ! 566: * ! 567: */ ! 568: ! 569: PlaceBitmap(HWND hDlg, int control, HDC hDC, HBITMAP hBitmap) ! 570: { ! 571: BITMAP bm; ! 572: HDC hdcmem; ! 573: HBITMAP hbmOld; ! 574: RECT rcControl; // Rect of dialog control ! 575: int width, height; ! 576: ! 577: GetObject(hBitmap, sizeof(BITMAP), &bm); ! 578: ! 579: hdcmem= CreateCompatibleDC(hDC); ! 580: hbmOld = SelectObject(hdcmem, hBitmap); ! 581: ! 582: // Get rect of control in screen coords, and translate to our dialog ! 583: // box's coordinates ! 584: GetWindowRect(GetDlgItem(hDlg, control), &rcControl); ! 585: MapWindowPoints(NULL, hDlg, (LPPOINT)&rcControl, 2); ! 586: ! 587: width = rcControl.right - rcControl.left; ! 588: height = rcControl.bottom - rcControl.top; ! 589: ! 590: BitBlt(hDC, rcControl.left + (width - bm.bmWidth) / 2, ! 591: rcControl.top + (height - bm.bmHeight) /2, ! 592: bm.bmWidth, bm.bmHeight, ! 593: hdcmem, 0, 0, SRCCOPY); ! 594: ! 595: SelectObject(hdcmem, hbmOld); ! 596: DeleteDC(hdcmem); ! 597: return 1; ! 598: } ! 599: ! 600: ! 601: ! 602: /* AboutDlgProc ! 603: * ------------ ! 604: * ! 605: * Dialog procedure for the About function ! 606: */ ! 607: BOOL CALLBACK EXPORT AboutDlgProc(HWND hDlg, UINT Message, WPARAM wParam, LPARAM lParam) ! 608: { ! 609: int narrVersion[2]; ! 610: static HBITMAP hbmLogo; ! 611: ! 612: switch(Message) { ! 613: ! 614: case WM_INITDIALOG: ! 615: // get version number of app ! 616: wsprintf(g_szBuf, "About %s", (LPCSTR)APPNAME); ! 617: SetWindowText(hDlg, (LPCSTR)g_szBuf); ! 618: OutlineApp_GetAppVersionNo(g_lpApp, narrVersion); ! 619: wsprintf(g_szBuf, "%s version %d.%d", (LPSTR) APPDESC, ! 620: narrVersion[0], narrVersion[1]); ! 621: SetDlgItemText(hDlg, IDD_APPTEXT, (LPCSTR)g_szBuf); ! 622: ! 623: // Load bitmap for displaying later ! 624: hbmLogo = LoadBitmap(g_lpApp->m_hInst, "LogoBitmap"); ! 625: TraceDebug(hDlg, IDD_BITMAPLOCATION); ! 626: ShowWindow(GetDlgItem(hDlg, IDD_BITMAPLOCATION), SW_HIDE); ! 627: break; ! 628: ! 629: case WM_PAINT: ! 630: { ! 631: PAINTSTRUCT ps; ! 632: BeginPaint(hDlg, &ps); ! 633: ! 634: // Display bitmap in IDD_BITMAPLOCATION control area ! 635: PlaceBitmap(hDlg, IDD_BITMAPLOCATION, ps.hdc, hbmLogo); ! 636: EndPaint(hDlg, &ps); ! 637: } ! 638: break; ! 639: ! 640: case WM_CLOSE : ! 641: PostMessage(hDlg, WM_COMMAND, IDOK, 0L); ! 642: break; ! 643: ! 644: case WM_COMMAND : ! 645: switch(wParam) { ! 646: case IDOK: ! 647: if (hbmLogo) DeleteObject(hbmLogo); ! 648: EndDialog(hDlg,0); ! 649: break; ! 650: } ! 651: break; ! 652: ! 653: default : ! 654: return FALSE; ! 655: ! 656: } ! 657: return TRUE; ! 658: } ! 659: ! 660: ! 661: #if defined( OLE_CNTR ) ! 662: ! 663: /* ProcessError ! 664: * ------------ ! 665: * ! 666: * Popup up appropriate message according to the error and/or take action ! 667: * specified button pressed by the user. ! 668: */ ! 669: void ProcessError(HRESULT hrErr, LPCONTAINERLINE lpContainerLine, BOOL fAction) ! 670: { ! 671: LPOUTLINEDOC lpOutlineDoc = (LPOUTLINEDOC)lpContainerLine->m_lpDoc; ! 672: HWND hwndParent = OutlineDoc_GetWindow(lpOutlineDoc); ! 673: SCODE sc = GetScode(hrErr); ! 674: ! 675: OleDbgOutHResult("ProcessError", hrErr); ! 676: ! 677: if ((sc >= MK_E_FIRST) && (sc <= MK_E_LAST)) ! 678: goto LinkSourceUnavailable; ! 679: if (sc == OLE_E_CANT_BINDTOSOURCE) ! 680: goto LinkSourceUnavailable; ! 681: if (sc == STG_E_PATHNOTFOUND) ! 682: goto LinkSourceUnavailable; ! 683: if (sc == REGDB_E_CLASSNOTREG) ! 684: goto ServerNotReg; ! 685: if (sc == OLE_E_STATIC) ! 686: goto ServerNotReg; // user dblclk'ed a static object w/ no svr reg'd ! 687: if (sc == OLE_E_CLASSDIFF) ! 688: goto LinkTypeChanged; ! 689: if (sc == CO_E_APPDIDNTREG) ! 690: goto ServerNotFound; ! 691: if (sc == CO_E_APPNOTFOUND) ! 692: goto ServerNotFound; ! 693: ! 694: if (ContainerLine_IsOleLink(lpContainerLine)) ! 695: goto LinkSourceUnavailable; ! 696: else ! 697: goto ServerNotFound; ! 698: ! 699: ! 700: /************************************************************************* ! 701: ** Error handling routines ** ! 702: *************************************************************************/ ! 703: LinkSourceUnavailable: ! 704: if (ID_PU_LINKS == OleUIPromptUser( ! 705: IDD_LINKSOURCEUNAVAILABLE, ! 706: hwndParent, ! 707: (LPSTR)APPNAME)) { ! 708: if (fAction) { ! 709: ContainerDoc_EditLinksCommand(lpContainerLine->m_lpDoc); ! 710: } ! 711: } ! 712: return; ! 713: ! 714: ServerNotReg: ! 715: { ! 716: LPSTR lpszUserType = NULL; ! 717: CLIPFORMAT cfFormat; // not used ! 718: ! 719: hrErr = ReadFmtUserTypeStg( ! 720: lpContainerLine->m_lpStg, &cfFormat, &lpszUserType); ! 721: ! 722: if (ID_PU_CONVERT == OleUIPromptUser( ! 723: IDD_SERVERNOTREG, ! 724: hwndParent, ! 725: (LPSTR)APPNAME, ! 726: (hrErr == NOERROR) ? lpszUserType : (LPSTR)"Object")) { ! 727: if (fAction) { ! 728: ContainerDoc_ConvertCommand( ! 729: lpContainerLine->m_lpDoc, ! 730: TRUE // fMustActivate ! 731: ); ! 732: } ! 733: } ! 734: ! 735: if (lpszUserType) ! 736: OleStdFreeString(lpszUserType, NULL); ! 737: ! 738: return; ! 739: } ! 740: ! 741: ! 742: LinkTypeChanged: ! 743: OleUIPromptUser( ! 744: IDD_LINKTYPECHANGED, ! 745: hwndParent, ! 746: (LPSTR)APPNAME); ! 747: return; ! 748: ! 749: ! 750: ServerNotFound: ! 751: OleUIPromptUser( ! 752: IDD_SERVERNOTFOUND, ! 753: hwndParent, ! 754: (LPSTR)APPNAME); ! 755: return; ! 756: ! 757: // OutOfMemory: ! 758: OleUIPromptUser( ! 759: IDD_OUTOFMEMORY, ! 760: hwndParent, ! 761: (LPSTR)APPNAME); ! 762: return; ! 763: ! 764: } ! 765: ! 766: ! 767: #endif
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.