|
|
1.1 ! root 1: /*==============================================================*\ ! 2: * User.c - routines for handling messages not processed ! 3: * by the standard message processing routine ! 4: * Created 1990, Microsoft, IBM Corp. ! 5: *-------------------------------------------------------------- ! 6: * ! 7: * This module contains the code for processing messages sent ! 8: * to the standard window that the standard window does not ! 9: * process. The application developer need only modify this ! 10: * file in order to implement new menu items or process ! 11: * messages not handled by the standard message routine. ! 12: * ! 13: * This module also contains some routines that demonstate the ! 14: * various dialog box controls and message box types that can ! 15: * be used. The sample code should be deleted when this ! 16: * module is modified for an application. The demonstration ! 17: * code is identified by comments. ! 18: * ! 19: *-------------------------------------------------------------- ! 20: * ! 21: * This source file contains the following functions: ! 22: * ! 23: * UserWndProc(hwnd, msg, mp1, mp2) - user window procedure ! 24: * UserCommand(mp1, mp2) - user WM_COMMAND processor ! 25: * SetForegroundColor(hwnd) ! 26: * SetBackgroundColor(MenuId) ! 27: * SetWindowText(hwnd) ! 28: * ! 29: \*==============================================================*/ ! 30: ! 31: /*--------------------------------------------------------------*\ ! 32: * Include files, macros, defined constants, and externs ! 33: \*--------------------------------------------------------------*/ ! 34: ! 35: #define INCL_WINMENUS ! 36: #define INCL_WINWINDOWMGR ! 37: #define INCL_WINCLIPBOARD ! 38: #define INCL_WINMLE ! 39: #define INCL_WINSTDFONT ! 40: #define INCL_GPILCIDS ! 41: #define INCL_GPIPRIMITIVES ! 42: ! 43: #include <os2.h> ! 44: #include "sty_main.h" ! 45: #include "sty_xtrn.h" ! 46: #include "sty_dlg.h" ! 47: #include <string.h> ! 48: ! 49: // #define FONT_DLG_ENABLED ! 50: ! 51: /*--------------------------------------------------------------*\ ! 52: * Global variables ! 53: \*--------------------------------------------------------------*/ ! 54: ULONG clrForeground = CLR_NEUTRAL; /* color for window text */ ! 55: ULONG clrBackground = CLR_BACKGROUND; /* color for window background */ ! 56: ! 57: /*--------------------------------------------------------------*\ ! 58: * Entry point declarations ! 59: \*--------------------------------------------------------------*/ ! 60: ! 61: VOID SetForegroundColor(VOID); ! 62: VOID SetBackgroundColor(SHORT idMenu); ! 63: VOID SetFont(VOID); ! 64: MRESULT EXPENTRY DemoDlgProc(HWND hwnd, USHORT msg, ! 65: MPARAM mp1, MPARAM mp2); ! 66: MRESULT EXPENTRY PresParamDemoDlgProc(HWND hwnd, USHORT msg, ! 67: MPARAM mp1, MPARAM mp2); ! 68: VOID ShowDemoDlg(SHORT idMenuItem); ! 69: VOID ShowDemoMsgBox(SHORT idMenuItem); ! 70: ! 71: ! 72: /****************************************************************\ ! 73: * Non-standard window message processing routine ! 74: *-------------------------------------------------------------- ! 75: * ! 76: * Name: UserWndProc(hwnd, msg, mp1, mp2) ! 77: * ! 78: * Purpose: Process any messages sent to hwndMain that ! 79: * are not processed by the standard window ! 80: * procedure ! 81: * ! 82: * Usage: Routine is called for each message MainWndProc ! 83: * does not process ! 84: * ! 85: * Method: A switch statement branches control based upon ! 86: * the message passed. Any messages not processed ! 87: * here must be passed onto WinDefWindowProc() ! 88: * ! 89: * Returns: Return value depended upon the message processed ! 90: \****************************************************************/ ! 91: MRESULT UserWndProc(hwnd, msg, mp1, mp2) ! 92: HWND hwnd; /* handle of window */ ! 93: USHORT msg; /* id of message */ ! 94: MPARAM mp1; /* first message parameter */ ! 95: MPARAM mp2; /* second message parameter */ ! 96: { ! 97: ! 98: switch(msg) { ! 99: ! 100: /*--------------------------------------------------------------*\ ! 101: * Add case statements for message ids you wish to process ! 102: \*--------------------------------------------------------------*/ ! 103: ! 104: case WM_SIZE: ! 105: /* re-size the MLE to be the same width and height as the ! 106: client window */ ! 107: WinSetWindowPos(hwndMLE, ! 108: HWND_TOP, ! 109: 0, ! 110: 0, ! 111: SHORT1FROMMP(mp2), ! 112: SHORT2FROMMP(mp2), ! 113: SWP_SIZE); ! 114: break; ! 115: ! 116: case WM_SETFOCUS: ! 117: if(SHORT1FROMMP(mp1)) ! 118: WinPostMsg(hwnd, SM_SETFOCUS, NULL, NULL); ! 119: break; ! 120: ! 121: case SM_SETFOCUS: ! 122: WinSetFocus(HWND_DESKTOP, hwndMLE); ! 123: break; ! 124: ! 125: default: /* default must call WinDefWindowProc() */ ! 126: return(WinDefWindowProc(hwnd, msg, mp1, mp2)); ! 127: break; ! 128: } ! 129: ! 130: return 0L; ! 131: ! 132: } /* UserWndProc() */ ! 133: ! 134: ! 135: /****************************************************************\ ! 136: * Non-standard menu item command processing procedure ! 137: *-------------------------------------------------------------- ! 138: * ! 139: * Name: UserCommand(mp1, mp2) ! 140: * ! 141: * Purpose: Process any WM_COMMAND messages send to hwndMain ! 142: * that are not processed by MainCommand ! 143: * ! 144: * Usage: Routine is called for each WM_COMMAND that is ! 145: * not posted by a standard menu item ! 146: * ! 147: * Method: A switch statement branches control based upon ! 148: * the id of the control which posted the message ! 149: * ! 150: * Returns: ! 151: \****************************************************************/ ! 152: VOID UserCommand(mp1, mp2) ! 153: MPARAM mp1; /* first message parameter */ ! 154: MPARAM mp2; /* second message parameter */ ! 155: { ! 156: ! 157: switch(SHORT1FROMMP(mp1)) { ! 158: ! 159: /*--------------------------------------------------------------*\ ! 160: * Add case statements for menuitem ids you wish to process ! 161: \*--------------------------------------------------------------*/ ! 162: ! 163: ! 164: /*--------------------------------------------------------------*\ ! 165: * The following code is for the demonstration code only. It ! 166: * should be removed when modifying this file for your ! 167: * application. ! 168: \*--------------------------------------------------------------*/ ! 169: ! 170: #ifdef PALETTE_DLG_ENABLED ! 171: case IDM_OPTIONSFORECOLOR: ! 172: SetForegroundColor(hwndMLE); ! 173: break; ! 174: #endif ! 175: ! 176: case IDM_OPTIONSBACKCOLORPINK: ! 177: case IDM_OPTIONSBACKCOLORCYAN: ! 178: case IDM_OPTIONSBACKCOLORYELLOW: ! 179: case IDM_OPTIONSBACKCOLORDEFAULT: ! 180: SetBackgroundColor(SHORT1FROMMP(mp1)); ! 181: break; ! 182: ! 183: #ifdef FONT_DLG_ENABLED ! 184: case IDM_OPTIONSFONT: ! 185: SetFont(); ! 186: break; ! 187: #endif ! 188: ! 189: case IDM_DEMODLGBUTTONS: ! 190: case IDM_DEMODLGLISTBOXES: ! 191: case IDM_DEMODLGCOMBOBOXES: ! 192: case IDM_DEMODLGENTRYFIELDS: ! 193: case IDM_DEMODLGSTATIC: ! 194: ShowDemoDlg(SHORT1FROMMP(mp1)); ! 195: break; ! 196: ! 197: case IDM_DEMOMSGBOXOK: ! 198: case IDM_DEMOMSGBOXOKCANCEL: ! 199: case IDM_DEMOMSGBOXYESNO: ! 200: case IDM_DEMOMSGBOXYESNOCANCEL: ! 201: case IDM_DEMOMSGBOXRETRYCANCEL: ! 202: case IDM_DEMOMSGBOXABORT: ! 203: case IDM_DEMOMSGBOXENTER: ! 204: case IDM_DEMOMSGBOXENTERCANCEL: ! 205: case IDM_DEMOMSGBOXQUERY: ! 206: case IDM_DEMOMSGBOXWARNING: ! 207: case IDM_DEMOMSGBOXINFO: ! 208: case IDM_DEMOMSGBOXCRITICAL: ! 209: case IDM_DEMOMSGBOXAPP: ! 210: case IDM_DEMOMSGBOXSYS: ! 211: case IDM_DEMOMSGBOXMOVEABLE: ! 212: case IDM_DEMOMSGBOXHELP: ! 213: ShowDemoMsgBox(SHORT1FROMMP(mp1)); ! 214: break; ! 215: ! 216: case IDM_DEMODLGPP: ! 217: WinDlgBox(hwndMain, ! 218: hwndMain, ! 219: (PFNWP)PresParamDemoDlgProc, ! 220: NULL, ! 221: IDD_PPDEMODLG, ! 222: (PVOID)NULL); ! 223: break; ! 224: ! 225: ! 226: /*--------------------------------------------------------------*\ ! 227: * End of demonstration code ! 228: \*--------------------------------------------------------------*/ ! 229: ! 230: ! 231: default: ! 232: break; ! 233: } ! 234: ! 235: /* This routine currently doesn't use the mp2 parameter but *\ ! 236: * it is referenced here to prevent an 'Unreferenced Parameter' ! 237: \* warning at compile time. */ ! 238: mp2; ! 239: ! 240: } /* UserCommand() */ ! 241: ! 242: ! 243: ! 244: /****************************************************************\ ! 245: * Menu item intialization routine ! 246: *-------------------------------------------------------------- ! 247: * ! 248: * Name: InitMenu(mp1, mp2) ! 249: * ! 250: * Purpose: Processes the WM_INITMENU message for the main window, ! 251: * disabling any menus that are not active ! 252: * ! 253: * Usage: Routine is called each time a menu is dropped ! 254: * ! 255: * Method: A switch statement branches control based upon ! 256: * the id of the menu which is being displayed ! 257: * ! 258: * Returns: ! 259: \****************************************************************/ ! 260: VOID InitMenu(mp1, mp2) ! 261: MPARAM mp1; /* first message parameter */ ! 262: MPARAM mp2; /* second message parameter */ ! 263: { ! 264: SHORT fsFmtInfo; ! 265: BOOL fEnable; ! 266: ! 267: switch(SHORT1FROMMP(mp1)) { ! 268: case IDM_FILE: ! 269: /* ! 270: * The Print, Print Setup, and Page Setup menu items of the ! 271: * File menu will be enabled if printing is enabled, otherwise ! 272: * they will be disabled ! 273: */ ! 274: ! 275: EnableMenuItem(HWNDFROMMP(mp2), IDM_FILEPRINT, fPrintEnabled); ! 276: EnableMenuItem(HWNDFROMMP(mp2), IDM_FILEPRINTSETUP, fPrintEnabled); ! 277: EnableMenuItem(HWNDFROMMP(mp2), IDM_FILEPAGESETUP, fPrintEnabled); ! 278: ! 279: break; ! 280: ! 281: case IDM_HELP: ! 282: /* ! 283: * Enable or disable the Help menu depending upon whether the ! 284: * help manager has been enabled ! 285: */ ! 286: EnableMenuItem(HWNDFROMMP(mp2), ! 287: IDM_HELPHELPFORHELP, fHelpEnabled); ! 288: ! 289: EnableMenuItem(HWNDFROMMP(mp2), ! 290: IDM_HELPEXTENDED, fHelpEnabled); ! 291: ! 292: EnableMenuItem(HWNDFROMMP(mp2), ! 293: IDM_HELPKEYS, fHelpEnabled); ! 294: ! 295: EnableMenuItem(HWNDFROMMP(mp2), ! 296: IDM_HELPINDEX, fHelpEnabled); ! 297: ! 298: /** REMEMBER: add a case for IDM_HELPTUTORIAL if you include ! 299: the menu item **/ ! 300: ! 301: break; ! 302: ! 303: case IDM_EDIT: ! 304: /* if text is selected in the MLE, the enable the Cut, Copy, ! 305: and Clear menus. Otherwise, do not */ ! 306: fEnable = WinSendMsg(hwndMLE, ! 307: MLM_QUERYSEL, ! 308: MPFROMSHORT(MLFQS_MINSEL), ! 309: NULL) != WinSendMsg(hwndMLE, ! 310: MLM_QUERYSEL, ! 311: MPFROMSHORT(MLFQS_MAXSEL), ! 312: NULL); ! 313: ! 314: EnableMenuItem(HWNDFROMMP(mp2), IDM_EDITCUT, fEnable); ! 315: EnableMenuItem(HWNDFROMMP(mp2), IDM_EDITCOPY, fEnable); ! 316: EnableMenuItem(HWNDFROMMP(mp2), IDM_EDITCLEAR, fEnable); ! 317: ! 318: ! 319: /* determine if the MLE can Undo the last action. If it can't, ! 320: then disable he Undo menu */ ! 321: fEnable = ! 322: HIUSHORT(WinSendMsg(hwndMLE, MLM_QUERYUNDO, NULL, NULL)) != 0; ! 323: ! 324: EnableMenuItem(HWNDFROMMP(mp2), IDM_EDITUNDO, fEnable); ! 325: ! 326: /* determine if the clipboard has some text on it. If it ! 327: doesn't, then disable the Paste menu */ ! 328: if(WinOpenClipbrd(hab)) { ! 329: if(WinQueryClipbrdFmtInfo(hab, CF_TEXT, &fsFmtInfo)) ! 330: fEnable = TRUE; ! 331: else ! 332: fEnable = FALSE; ! 333: ! 334: WinCloseClipbrd(hab); ! 335: } else ! 336: fEnable = TRUE; ! 337: ! 338: EnableMenuItem(HWNDFROMMP(mp2), IDM_EDITPASTE, fEnable); ! 339: ! 340: break; ! 341: ! 342: default: ! 343: break; ! 344: } ! 345: ! 346: } /* InitMenu() */ ! 347: ! 348: /****************************************************************\ ! 349: * Enables/Disables the menu item of the given menu ! 350: *-------------------------------------------------------------- ! 351: * ! 352: * Name: EnableMenuItem(hwndMenu, idItem, fEnable) ! 353: * ! 354: * Purpose: Enables or disables the menu item ! 355: * ! 356: * Usage: Called whenever a menu item is to enabled or ! 357: * disabled ! 358: * ! 359: * Method: Sends a MM_SETITEMATTR to the menu with the ! 360: * given item id. Sets the MIA_DISABLED attribute ! 361: * flag if the item is to be disabled, clears the flag ! 362: * if enabling ! 363: * ! 364: * Returns: ! 365: * ! 366: \****************************************************************/ ! 367: VOID EnableMenuItem(hwndMenu, idItem, fEnable) ! 368: HWND hwndMenu; /* Handle to the menu */ ! 369: SHORT idItem; /* Id of the menu item to be enabled/disabled */ ! 370: BOOL fEnable; /* flag to set enable or disable bit */ ! 371: { ! 372: SHORT fsFlag; ! 373: ! 374: if(fEnable) ! 375: fsFlag = 0; ! 376: else ! 377: fsFlag = MIA_DISABLED; ! 378: ! 379: WinSendMsg(hwndMenu, ! 380: MM_SETITEMATTR, ! 381: MPFROM2SHORT(idItem, TRUE), ! 382: MPFROM2SHORT(MIA_DISABLED, fsFlag)); ! 383: ! 384: } /* EnableMenuItem() */ ! 385: ! 386: /****************************************************************\ ! 387: * Displays the Demonstration dialog selected ! 388: *-------------------------------------------------------------- ! 389: * ! 390: * Name: ShowDemoDlg(idMenuItem) ! 391: * ! 392: * Purpose: Displays the demonstration dialog for the menu ! 393: * id chosen. ! 394: * ! 395: * Usage: Called whenever a menu item from the Dialog Box ! 396: * menu of the Demo menu is selected. ! 397: * ! 398: * Method: Determines the id of the dialog template and ! 399: * creates a dialog of that template. ! 400: * ! 401: * Returns: ! 402: * ! 403: \****************************************************************/ ! 404: VOID ShowDemoDlg(idMenuItem) ! 405: SHORT idMenuItem; /* Id of the menu item chosen for the dialog */ ! 406: { ! 407: SHORT idDlg; ! 408: ! 409: switch(idMenuItem) { ! 410: case IDM_DEMODLGBUTTONS: ! 411: idDlg = IDD_BUTTONSDLG; ! 412: break; ! 413: ! 414: case IDM_DEMODLGLISTBOXES: ! 415: idDlg = IDD_LISTBOXDLG; ! 416: break; ! 417: ! 418: case IDM_DEMODLGCOMBOBOXES: ! 419: idDlg = IDD_COMBOBOXDLG; ! 420: break; ! 421: ! 422: case IDM_DEMODLGENTRYFIELDS: ! 423: idDlg = IDD_ENTRYFIELDDLG; ! 424: break; ! 425: ! 426: case IDM_DEMODLGSTATIC: ! 427: idDlg = IDD_STATICDLG; ! 428: break; ! 429: ! 430: default: /* unknown menu id */ ! 431: return; ! 432: break; ! 433: } ! 434: ! 435: WinDlgBox(hwndMain, ! 436: hwndMain, ! 437: (PFNWP)DemoDlgProc, /* all demos use DemoDlgProc*/ ! 438: NULL, ! 439: idDlg, /* id of template */ ! 440: (PVOID)idDlg); /* pass id as mp2 of WM_INITDLG */ ! 441: ! 442: } /* ShowDemoDlg() */ ! 443: ! 444: ! 445: /****************************************************************\ ! 446: * Displays the Demonstration message box selected ! 447: *-------------------------------------------------------------- ! 448: * ! 449: * Name: ShowDemoMsgBox(idMenuItem) ! 450: * ! 451: * Purpose: Displays the demonstration message box for the menu ! 452: * id chosen. ! 453: * ! 454: * Usage: Called whenever a menu item from the Message Box ! 455: * menu of the Demo menu is selected. ! 456: * ! 457: * Method: Determines the options for the message box and then ! 458: * creates the box. ! 459: * ! 460: * Returns: ! 461: * ! 462: \****************************************************************/ ! 463: VOID ShowDemoMsgBox(idMenuItem) ! 464: SHORT idMenuItem; /* Id of the menu item chosen for the dialog */ ! 465: { ! 466: SHORT fsOptions, idText; ! 467: CHAR szText[MESSAGELEN]; ! 468: ! 469: switch(idMenuItem) { ! 470: case IDM_DEMOMSGBOXOK: ! 471: fsOptions = MB_OK; ! 472: idText = IDS_DEMOMSGBOXOK; ! 473: break; ! 474: ! 475: case IDM_DEMOMSGBOXOKCANCEL: ! 476: fsOptions = MB_OKCANCEL; ! 477: idText = IDS_DEMOMSGBOXOKCANCEL; ! 478: break; ! 479: ! 480: case IDM_DEMOMSGBOXYESNO: ! 481: fsOptions = MB_YESNO; ! 482: idText = IDS_DEMOMSGBOXYESNO; ! 483: break; ! 484: ! 485: case IDM_DEMOMSGBOXYESNOCANCEL: ! 486: fsOptions = MB_YESNOCANCEL; ! 487: idText = IDS_DEMOMSGBOXYESNOCANCEL; ! 488: break; ! 489: ! 490: case IDM_DEMOMSGBOXRETRYCANCEL: ! 491: fsOptions = MB_RETRYCANCEL; ! 492: idText = IDS_DEMOMSGBOXRETRYCANCEL; ! 493: break; ! 494: ! 495: case IDM_DEMOMSGBOXABORT: ! 496: fsOptions = MB_ABORTRETRYIGNORE; ! 497: idText = IDS_DEMOMSGBOXABORT; ! 498: break; ! 499: ! 500: case IDM_DEMOMSGBOXENTER: ! 501: fsOptions = MB_ENTER; ! 502: idText = IDS_DEMOMSGBOXENTER; ! 503: break; ! 504: ! 505: case IDM_DEMOMSGBOXENTERCANCEL: ! 506: fsOptions = MB_ENTERCANCEL; ! 507: idText = IDS_DEMOMSGBOXENTERCANCEL; ! 508: break; ! 509: ! 510: case IDM_DEMOMSGBOXQUERY: ! 511: fsOptions = MB_OK | MB_QUERY; ! 512: idText = IDS_DEMOMSGBOXQUERY; ! 513: break; ! 514: ! 515: case IDM_DEMOMSGBOXWARNING: ! 516: fsOptions = MB_OK | MB_WARNING; ! 517: idText = IDS_DEMOMSGBOXWARNING; ! 518: break; ! 519: ! 520: case IDM_DEMOMSGBOXINFO: ! 521: fsOptions = MB_OK | MB_INFORMATION; ! 522: idText = IDS_DEMOMSGBOXINFO; ! 523: break; ! 524: ! 525: case IDM_DEMOMSGBOXCRITICAL: ! 526: fsOptions = MB_OK | MB_CRITICAL; ! 527: idText = IDS_DEMOMSGBOXCRITICAL; ! 528: break; ! 529: ! 530: case IDM_DEMOMSGBOXAPP: ! 531: fsOptions = MB_OK | MB_APPLMODAL; ! 532: idText = IDS_DEMOMSGBOXAPP; ! 533: break; ! 534: ! 535: case IDM_DEMOMSGBOXSYS: ! 536: fsOptions = MB_OK | MB_SYSTEMMODAL; ! 537: idText = IDS_DEMOMSGBOXSYS; ! 538: break; ! 539: ! 540: case IDM_DEMOMSGBOXMOVEABLE: ! 541: fsOptions = MB_OK | MB_MOVEABLE; ! 542: idText = IDS_DEMOMSGBOXMOVEABLE; ! 543: break; ! 544: ! 545: case IDM_DEMOMSGBOXHELP: ! 546: fsOptions = MB_OK | MB_HELP; ! 547: idText = IDS_DEMOMSGBOXHELP; ! 548: break; ! 549: ! 550: default: /* unknown menu id */ ! 551: return; ! 552: break; ! 553: } ! 554: ! 555: /* get the text for the message box */ ! 556: if(!WinLoadString(hab, ! 557: NULL, ! 558: idText, ! 559: MESSAGELEN, ! 560: (PSZ)szText)) { ! 561: ! 562: MessageBox(hwndMain, ! 563: IDMSG_CANNOTLOADSTRING, ! 564: MB_OK | MB_ERROR, ! 565: FALSE); ! 566: return; ! 567: } ! 568: ! 569: /* bring up the message box */ ! 570: WinMessageBox(HWND_DESKTOP, ! 571: hwndMain, ! 572: szText, ! 573: szAppName, ! 574: IDD_DEMOMSGBOX, ! 575: fsOptions); ! 576: ! 577: ! 578: } /* ShowDemoMsgBox() */ ! 579: ! 580: ! 581: ! 582: /*--------------------------------------------------------------*\ ! 583: * The following code is for the demonstration code only. It ! 584: * should be removed when modifying this file for your ! 585: * application. ! 586: \*--------------------------------------------------------------*/ ! 587: ! 588: #ifdef PALETTE_DLG_ENABLED ! 589: ! 590: /****************************************************************\ ! 591: * Sets the foreground color of the application window ! 592: *-------------------------------------------------------------- ! 593: * ! 594: * Name: SetForegroundColor() ! 595: * ! 596: * Purpose: Allows the user to select a color for the text ! 597: * displayed in the MLE ! 598: * ! 599: * Usage: Routine is called each time the user selects the ! 600: * Foreground Color menu item from the Options menu ! 601: * ! 602: * Method: The standard color dialog is called with the ! 603: * default color table colors. If the user selects ! 604: * one, then the MLM_SETTEXTCOLOR message is sent ! 605: * to the MLE to changed its text to the color chosen ! 606: * ! 607: * Returns: ! 608: * ! 609: \****************************************************************/ ! 610: VOID SetForegroundColor(VOID) ! 611: { ! 612: COLORDLG cd; ! 613: HPS hps; ! 614: ! 615: /* Get the PS for the window */ ! 616: hps = WinGetPS(hwndMLE); ! 617: if(!hps) { ! 618: MessageBox(hwnd, IDMSG_CANNOTGETHPS, TRUE); ! 619: return; ! 620: } ! 621: ! 622: /* Initialize the COLORDLG structure */ ! 623: cd.kgd.cbSize = sizeof(COLORDLG); ! 624: cd.kgd.flStyle = PGSS_CENTER; ! 625: cd.kgd.pszDlgTitle = "Foreground Color"; ! 626: cd.kgd.pfnDlgProc = NULL; ! 627: cd.kgd.hmod = NULL; ! 628: cd.kgd.idDlg = 0; ! 629: cd.kgd.lReturn = 0L; ! 630: cd.kgd.x = 0; ! 631: cd.kgd.y = 0; ! 632: ! 633: cd.pszButton = "Ok"; ! 634: cd.fl = CDS_STATICPALETTE | CDS_CENTER | CDS_HELPBUTTON; ! 635: cd.pflFlags = NULL; ! 636: cd.iclrSel = clrForeground; ! 637: cd.cclrMax = 0; ! 638: cd.hps = hps; ! 639: ! 640: if(KitColorDlg(hwndMain, (PCOLORDLG)&cd) == (HWND)NULL) { ! 641: MessageBox(hwndMain, IDMSG_CANNOTRUNCOLORDLG, TRUE); ! 642: WinReleasePS(hps); ! 643: ! 644: return (HWND)NULL; ! 645: } ! 646: ! 647: /* set the foreground color to the returned value */ ! 648: WinSendMsg(hwndMLE, MLM_SETTEXTCOLOR, MPFROMLONG(cd.iclrSel), NULL); ! 649: clrForeground = cd.iclrSel; ! 650: ! 651: WinReleasePS(hps); ! 652: ! 653: } /* SetForegroundColor() */ ! 654: ! 655: #endif /* PALETTE_DLG_ENABLED */ ! 656: ! 657: /****************************************************************\ ! 658: * Sets the background color of the given window ! 659: *-------------------------------------------------------------- ! 660: * ! 661: * Name: SetBackgroundColor(nMenuId) ! 662: * ! 663: * Purpose: Allows the user to select a color for the window ! 664: * background ! 665: * ! 666: * Usage: Routine is called each time the user selects one ! 667: * of the Background colors listed in the Background ! 668: * Color submenu of the Options menu ! 669: * ! 670: * Method: A switch statement determines which menu item was ! 671: * chosen and then the appropriate color is placed ! 672: * into clrBackground. ! 673: * ! 674: * Returns: ! 675: * ! 676: \****************************************************************/ ! 677: VOID SetBackgroundColor(idMenu) ! 678: SHORT idMenu; /* id of menu item selected */ ! 679: { ! 680: ! 681: switch(idMenu) { ! 682: case IDM_OPTIONSBACKCOLORPINK: ! 683: clrBackground = CLR_PINK; ! 684: break; ! 685: ! 686: case IDM_OPTIONSBACKCOLORCYAN: ! 687: clrBackground = CLR_CYAN; ! 688: break; ! 689: ! 690: case IDM_OPTIONSBACKCOLORYELLOW: ! 691: clrBackground = CLR_YELLOW; ! 692: break; ! 693: ! 694: /*--------------------------------------------------------------*\ ! 695: * For any others, including IDM_OPTIONSBACKCOLORDEFAULT, set ! 696: * the background color to the default back color ! 697: \*--------------------------------------------------------------*/ ! 698: default: ! 699: clrBackground = CLR_BACKGROUND; ! 700: break; ! 701: ! 702: } ! 703: ! 704: WinSendMsg(hwndMLE, MLM_SETBACKCOLOR, MPFROMLONG(clrBackground), NULL); ! 705: ! 706: } /* SetBackgroundColor() */ ! 707: ! 708: #ifdef FONT_DLG_ENABLED ! 709: ! 710: /****************************************************************\ ! 711: * Sets the font of the MLE ! 712: *-------------------------------------------------------------- ! 713: * ! 714: * Name: SetFont() ! 715: * ! 716: * Purpose: Allows the user to select a font for the text ! 717: * displayed in the MLE ! 718: * ! 719: * Usage: Routine is called each time the user selects the ! 720: * Font menu item from the Options menu ! 721: * ! 722: * Method: The standard font dialog is called with the ! 723: * current available fonts. If the user selects ! 724: * one, then the MLM_SETFONT message is sent to the ! 725: * MLE to display its text to the font chosen ! 726: * ! 727: * Returns: ! 728: * ! 729: \****************************************************************/ ! 730: VOID SetFont(VOID) ! 731: { ! 732: FONTDLG fntd; ! 733: HPS hps; ! 734: FONTMETRICS fm; ! 735: CHAR szTitle[MESSAGELEN]; ! 736: ! 737: /* get the current font attributes */ ! 738: hps = WinGetPS(hwndMLE); ! 739: WinSendMsg(hwndMLE, MLM_QUERYFONT, MPFROMP((PFATTRS)&(fntd.fAttrs)), NULL); ! 740: ! 741: GpiCreateLogFont(hps, (PSTR8)NULL, 1L, &(fntd.fAttrs)); ! 742: GpiSetCharSet(hps, 1L); ! 743: ! 744: GpiQueryFontMetrics(hps, sizeof(FONTMETRICS), &fm); ! 745: ! 746: GpiSetCharSet(hps, LCID_DEFAULT); ! 747: GpiDeleteSetId(hps, 1L); ! 748: WinReleasePS(hps); ! 749: ! 750: /* Initialize the FONTDLG structure with the current font */ ! 751: fntd.cbSize = sizeof(FONTDLG); ! 752: fntd.hpsScreen = WinGetScreenPS(HWND_DESKTOP); ! 753: fntd.hpsPrinter = NULL; ! 754: ! 755: if(!WinLoadString(hab, NULL, IDS_FONTDLGTITLE, MESSAGELEN, szTitle)) { ! 756: MessageBox(hwndMain, IDMSG_CANNOTLOADSTRING, MB_OK | MB_ERROR, TRUE); ! 757: return; ! 758: } ! 759: fntd.pszTitle = szTitle; ! 760: ! 761: fntd.pszPreview = NULL; ! 762: fntd.pszPtSizeList = NULL; ! 763: fntd.pfnDlgProc = NULL; ! 764: strcpy(fntd.szFamilyname, fm.szFamilyname); ! 765: fntd.fxPointSize = MAKEFIXED(fm.sNominalPointSize, 0); ! 766: fntd.fl = FNTS_CENTER; ! 767: fntd.flFlags = NULL; ! 768: fntd.flType = NULL; ! 769: fntd.flTypeMask = NULL; ! 770: fntd.flStyle = NULL; ! 771: fntd.flStyleMask = NULL; ! 772: fntd.flCHSOptions = 0L; ! 773: fntd.flCHSMask = 0L; ! 774: fntd.clrFore = clrForeground; ! 775: fntd.clrBack = clrBackground; ! 776: fntd.lUser = 0L; ! 777: fntd.lReturn = 0L; ! 778: fntd.lEmHeight = 0L; ! 779: fntd.lXHeight = 0L; ! 780: fntd.lExternalLeading = 0L; ! 781: fntd.sNominalPointSize = 0L; ! 782: fntd.usWeight = fm.usWeightClass; ! 783: fntd.usWidth = fm.usWidthClass; ! 784: fntd.x = 0; ! 785: fntd.y = 0; ! 786: fntd.idDlg = IDD_FONT; ! 787: ! 788: ! 789: /* Bring up the standard Font Dialog */ ! 790: if(!KitFontDialog(hwndMLE, &fntd)) { ! 791: WinReleasePS(fntd.hpsScreen); ! 792: return; ! 793: } ! 794: ! 795: WinReleasePS(fntd.hpsScreen); ! 796: ! 797: WinSendMsg(hwndMLE, MLM_SETFONT, MPFROMP(&(fntd.fAttrs)), NULL); ! 798: ! 799: /* Set the new colors */ ! 800: clrForeground = fntd.clrFore; ! 801: clrBackground = fntd.clrBack; ! 802: ! 803: WinSendMsg(hwndMLE, MLM_SETTEXTCOLOR, MPFROMLONG(clrForeground), NULL); ! 804: WinSendMsg(hwndMLE, MLM_SETBACKCOLOR, MPFROMLONG(clrBackground), NULL); ! 805: ! 806: } /* SetFont() */ ! 807: ! 808: #endif /* FONT_DLG_ENABLED */ ! 809: ! 810: ! 811: /*--------------------------------------------------------------*\ ! 812: * End of demonstration code ! 813: \*--------------------------------------------------------------*/
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.