|
|
1.1.1.2 ! root 1: /* ! 2: DLGSAMP -- Dialog Box Sample Application ! 3: Created by Microsoft Corporation, 1989 ! 4: */ 1.1 root 5: 6: #define INCL_WINBUTTONS 7: #define INCL_WINDIALOGS 8: #define INCL_WINERRORS 9: #define INCL_WINFRAMEMGR 10: #define INCL_WININPUT 11: #define INCL_WINLISTBOXES 12: #define INCL_WINMENUS 13: #define INCL_WINMESSAGEMGR 14: #define INCL_WINRECTANGLES 15: #define INCL_WINSWITCHLIST 16: #define INCL_WINSYS 17: #define INCL_WINWINDOWMGR 18: #define M_I86L 19: #include <os2.h> 20: 21: #include <string.h> 22: #include <stdlib.h> 23: 24: #include "dlgsamp.h" 25: #include "dlgsamp1.h" 26: 1.1.1.2 ! root 27: /* ! 28: Function Prototypes ! 29: */ ! 30: ! 31: VOID NEAR cdecl main(VOID); ! 32: ! 33: /* Local Routines */ ! 34: VOID cdecl CenterDlgBox(HWND); ! 35: VOID cdecl CheckColor(HWND, SHORT, COLOR *); ! 36: VOID cdecl EnableModality(HWND, BOOL); ! 37: BOOL cdecl IsIntInRange(HWND, SHORT, SHORT, SHORT, SHORT, SHORT); ! 38: VOID cdecl LoadDialog(HWND, HWND, SHORT, PFNWP, BOOL); ! 39: VOID cdecl MainWndCommand(HWND, USHORT, BOOL *); ! 40: VOID cdecl MainWndPaint(HWND); ! 41: VOID cdecl SetModality(HWND, BOOL); ! 42: VOID cdecl Trace(PSZ, PSZ); ! 43: ! 44: /* Window Procedures */ ! 45: MRESULT CALLBACK fnwpMainWnd(HWND, USHORT, MPARAM, MPARAM); ! 46: MRESULT CALLBACK fnwpEntryFieldDlg(HWND, USHORT, MPARAM, MPARAM); ! 47: MRESULT CALLBACK fnwpAutoRadioButtonDlg(HWND, USHORT, MPARAM, MPARAM); ! 48: MRESULT CALLBACK fnwpCheckBoxDlg(HWND, USHORT, MPARAM, MPARAM); ! 49: MRESULT CALLBACK fnwpListBoxDlg(HWND, USHORT, MPARAM, MPARAM); ! 50: MRESULT CALLBACK fnwpAboutBoxDlg(HWND, USHORT, MPARAM, MPARAM); ! 51: ! 52: /* ! 53: Global variables ! 54: */ 1.1 root 55: COLOR colorClient = CLR_RED | CLR_BLUE; /* Color of client area */ 56: 57: CHAR szEntryField1[10] = ""; /* Used to pass back info */ 58: CHAR szEntryField2[10] = ""; /* from entry fields */ 59: /* in EntryFieldDlg */ 60: 61: BOOL bModality = TRUE; /* Does the user want modal*/ 62: /* or modeless dialogs? */ 63: COLOR colorSave; 64: CHAR szSelection[LEN_LISTBOXENTRY] = ""; /* Used to pass back */ 65: /* list box item selected */ 66: /* in ListBoxDlg */ 67: 68: HAB hab; /* Anchor block handle */ 69: HWND hwndClient; /* Client Window handle */ 70: HWND hwndFrame; /* Frame Window handle */ 71: HWND hwndModelessDlg; /* Modeless Dialog handle */ 72: 73: /************************************************************************** 74: * 75: * FUNCTION: main 76: * 1.1.1.2 ! root 77: * Typical PM main function which initializes PM, creates a message queue, 1.1 root 78: * registers a window class, creates a window, gets and dispatches 79: * messages to its winproc until its time to quit, and then tidies up 80: * before terminating. 81: * 82: **************************************************************************/ 83: 84: VOID NEAR cdecl main( ) 85: { 86: HMQ hmq; /* Message Queue handle */ 87: QMSG qmsg; /* Message */ 88: ULONG flCreate; 89: 1.1.1.2 ! root 90: hab = WinInitialize( NULL ); /* Initialize PM */ 1.1 root 91: hmq = WinCreateMsgQueue( hab, 0 );/* Create application msg queue */ 92: 93: WinRegisterClass( /* Register Window Class */ 94: hab, /* Anchor block handle */ 95: "DlgSamp Class", /* Window Class name */ 96: fnwpMainWnd, /* Address of Window Procedure */ 1.1.1.2 ! root 97: (ULONG) NULL, /* No special class style */ 1.1 root 98: 0 /* No extra window words */ 99: ); 100: 1.1.1.2 ! root 101: flCreate = FCF_STANDARD & ~FCF_ACCELTABLE; 1.1 root 102: 103: hwndFrame = WinCreateStdWindow( 104: HWND_DESKTOP, /* Desktop Window is parent */ 1.1.1.2 ! root 105: WS_VISIBLE, /* Window styles */ 1.1 root 106: (PVOID)&flCreate, /* Window creation parameters */ 107: "DlgSamp Class", /* Window Class name */ 108: "", /* Window Text */ 109: 0L, /* Client style */ 110: NULL, /* Module handle */ 111: ID_MAINWND, /* Window ID */ 112: (HWND FAR *)&hwndClient /* Client Window handle */ 113: ); 114: 115: 1.1.1.2 ! root 116: /* Message Loop */ 1.1 root 117: while( WinGetMsg( hab, (PQMSG)&qmsg, (HWND)NULL, 0, 0 ) ) 118: WinDispatchMsg( hab, (PQMSG)&qmsg ); 119: 1.1.1.2 ! root 120: /* Cleanup code */ 1.1 root 121: WinDestroyWindow( hwndFrame ); 122: WinDestroyMsgQueue( hmq ); 123: WinTerminate( hab ); 124: } 125: 126: /*********************************************************************** 127: * 128: * WinProc: fnwpMainWnd 129: * 130: * Controls the state of the menu, and loads various dialogs. The 131: * dialogs will be modal or modeless depending on the setting of the 132: * Modality menuitem. 133: * 134: ***********************************************************************/ 135: 1.1.1.2 ! root 136: MRESULT CALLBACK fnwpMainWnd( hwnd, message, mp1, mp2 ) 1.1 root 137: HWND hwnd; 138: USHORT message; 139: MPARAM mp1; 140: MPARAM mp2; 141: { 142: USHORT Command; /* Command passed by WM_COMMAND */ 143: SHORT id; /* ID of item selected from the list box */ 144: 145: switch(message) 146: { 147: case WM_PAINT: 148: MainWndPaint( hwnd ); /* Invoke window painting routine */ 149: break; 150: case WM_HELP: 151: /********************************************************************* 152: * 153: * This will be received when either:- 154: * 1.1.1.2 ! root 155: * 1. The user hits the F1 key 1.1 root 156: * 2. The user clicks on the action bar item F1=Help 157: * 158: *********************************************************************/ 159: WinMessageBox( HWND_DESKTOP, 160: hwndFrame, 161: (PSZ)"Dialog Sample Application: Help", 162: (PSZ)"Try out the pulldown menus, or Alt+selection", 163: ID_MB, 164: MB_OK ); 165: break; 166: case WM_COMMAND: 167: Command = SHORT1FROMMP( mp1 ); 168: MainWndCommand( hwnd, Command, &bModality ); 169: break; 170: case DLGSAMP_EFCOMPLETE: 171: WinQueryWindowText( WinWindowFromID( hwndModelessDlg, EF_1 ), 172: sizeof( szEntryField1 ), szEntryField1 ); 173: WinQueryWindowText( WinWindowFromID( hwndModelessDlg, EF_2 ), 174: sizeof( szEntryField2 ), szEntryField2 ); 175: WinInvalidateRect( hwnd, NULL, FALSE );/* Request whole window repaint */ 176: break; 177: case DLGSAMP_LBCOMPLETE: 178: id = SHORT1FROMMR( WinSendDlgItemMsg( hwndModelessDlg, 179: LB_1, 180: LM_QUERYSELECTION, 181: 0L, 182: 0L ) ); 183: if( id == LIT_NONE ) 184: strcpy( szSelection, "" ); 185: else 186: WinSendDlgItemMsg( hwndModelessDlg, 187: LB_1, 188: LM_QUERYITEMTEXT, 189: MPFROM2SHORT( id, sizeof( szSelection ) ), 190: MPFROMP( szSelection ) ); 191: break; 192: case DLGSAMP_RBCOMPLETE: 193: case DLGSAMP_CBCOMPLETE: 194: break; 195: case DLGSAMP_DESTROYDLG: 196: WinDestroyWindow( hwndModelessDlg ); 197: EnableModality( hwndFrame, TRUE ); 198: WinInvalidateRect( hwnd, NULL, FALSE );/* Request whole window repaint */ 199: break; 200: case WM_CLOSE: 201: WinPostMsg( hwnd, WM_QUIT, 0L, 0L ); /* Cause termination */ 202: break; 203: default: 204: return WinDefWindowProc( hwnd, message, mp1, mp2 ); 205: } 206: return FALSE; 207: } 208: 209: /*********************************************************************** 210: * 211: * DlgProc: fnwpEntryFieldDlg 212: * 213: * A dialog proc which captures and validates the contents of two 214: * entry fields. 215: * 216: ***********************************************************************/ 217: 1.1.1.2 ! root 218: MRESULT CALLBACK fnwpEntryFieldDlg( hwndDlg, message, mp1, mp2 ) 1.1 root 219: HWND hwndDlg; 220: USHORT message; 221: MPARAM mp1; 222: MPARAM mp2; 223: { 224: switch (message) 225: { 226: case WM_INITDLG: 1.1.1.2 ! root 227: CenterDlgBox( hwndDlg ); 1.1 root 228: break; 229: case WM_COMMAND: 230: switch( SHORT1FROMMP( mp1 ) ) 231: { 232: case DID_OK: /* Enter key or pushbutton pressed/ selected */ 233: 234: /*************************************************************************** 235: * 236: * Validate the contents of the two entry fields 237: * 238: ***************************************************************************/ 239: 240: if( !IsIntInRange( hwndDlg, EF_1, 1, 100, ERR_EFINVALID, ID_MB ) ) 241: return FALSE; 242: if( !IsIntInRange( hwndDlg, EF_2, 1, 100, ERR_EFINVALID, ID_MB ) ) 243: return FALSE; 244: 245: /*************************************************************************** 246: * 247: * A modal dialog is destroyed before control is returned to the 248: * invoking winproc, so it must pass the contents of its Entry Fields etc. 249: * back to the invoking window before it returns. 250: * 251: * When a modeless dialog box returns it still continues to exist. It 252: * could pass the contents of its Entry Fields etc. back to the 253: * invoking window in several ways. 254: * 255: * Here a user message is posted to the invoking window to say that the 256: * dialog has completed. The invoking window then has an opportunity 257: * to extract the contents of the Entry Fields etc. 258: * 259: ***************************************************************************/ 260: 261: if( bModality ) 262: { 263: WinQueryWindowText( WinWindowFromID( hwndDlg, EF_1 ), 264: sizeof( szEntryField1), 265: szEntryField1 ); 266: WinQueryWindowText( WinWindowFromID( hwndDlg, EF_2 ), 267: sizeof( szEntryField2), 268: szEntryField2 ); 269: } 270: else 271: WinPostMsg( hwndClient, DLGSAMP_EFCOMPLETE, 0L, 0L ); 272: 273: case DID_CANCEL:/* Escape key or CANCEL pushbutton pressed/selected */ 274: if( bModality ) 275: WinDismissDlg( hwndDlg,TRUE ); 276: else 277: WinPostMsg( hwndClient, DLGSAMP_DESTROYDLG, 0L, 0L ); 278: return FALSE; 279: default: 280: break; 281: } 282: break; 283: 284: default: /* Pass all other messages to the default dialog proc */ 285: return WinDefDlgProc( hwndDlg, message, mp1, mp2 ); 286: } 287: return FALSE; 288: } 289: 290: /*********************************************************************** 291: * 292: * DlgProc: fnwpAutoRadioButtonDlg 293: * 294: * A dialog procedure which uses auto radio buttons to change the 295: * color of the Client Area window. 296: * 297: ***********************************************************************/ 298: 1.1.1.2 ! root 299: MRESULT CALLBACK fnwpAutoRadioButtonDlg( hwndDlg, message, mp1, mp2 ) 1.1 root 300: HWND hwndDlg; 301: USHORT message; 302: MPARAM mp1; 303: MPARAM mp2; 304: { 305: switch (message) 306: { 307: case WM_INITDLG: 308: colorSave = colorClient; 1.1.1.2 ! root 309: CenterDlgBox( hwndDlg ); ! 310: if ( colorClient == CLR_RED ) ! 311: WinPostMsg( WinWindowFromID( hwndDlg, RB_RED ), ! 312: BM_SETCHECK, ! 313: MPFROM2SHORT( TRUE, 0 ), ! 314: 0L ); ! 315: ! 316: if ( colorClient == CLR_GREEN ) ! 317: WinPostMsg( WinWindowFromID( hwndDlg, RB_GREEN ), ! 318: BM_SETCHECK, ! 319: MPFROM2SHORT( TRUE, 0 ), ! 320: 0L ); ! 321: ! 322: if ( colorClient == CLR_BLUE ) ! 323: WinPostMsg( WinWindowFromID( hwndDlg, RB_BLUE ), ! 324: BM_SETCHECK, ! 325: MPFROM2SHORT( TRUE, 0 ), ! 326: 0L ); ! 327: 1.1 root 328: break; 329: case WM_CONTROL: 330: if( SHORT2FROMMP( mp1 ) == BN_CLICKED ) 331: switch( SHORT1FROMMP( mp1 ) ) 332: { 333: case RB_RED: 334: colorClient = CLR_RED; 335: break; 336: case RB_GREEN: 337: colorClient = CLR_GREEN; 338: break; 339: case RB_BLUE: 340: colorClient = CLR_BLUE; 341: break; 342: default: 343: return FALSE; 344: } 345: WinInvalidateRect( hwndClient, NULL, FALSE ); 346: break; 347: case WM_COMMAND: 348: switch( SHORT1FROMMP( mp1 ) ) 349: { 350: case DID_OK: /* Enter key or pushbutton pressed/ selected */ 351: if( !bModality ) 352: WinPostMsg( hwndClient, DLGSAMP_RBCOMPLETE, 0L, 0L ); 353: break; 354: case DID_CANCEL: /* Escape key or CANCEL pushbutton pressed/selected */ 355: colorClient = colorSave; 356: break; 357: default: 358: return WinDefDlgProc( hwndDlg, message, mp1, mp2 ); 359: } 360: if( bModality ) 361: WinDismissDlg( hwndDlg, TRUE ); 362: else 363: WinPostMsg( hwndClient, DLGSAMP_DESTROYDLG, 0L, 0L ); 364: break; 365: 366: default: /* Pass all other messages to the default dialog proc */ 367: return WinDefDlgProc( hwndDlg, message, mp1, mp2 ); 368: } 369: return FALSE; 370: } 371: 372: 373: /*********************************************************************** 374: * 375: * DlgProc: fnwpCheckBoxDlg 376: * 377: * A dialog procedure to which use checkboxes to change the color 378: * of the Client Area Window. 379: * 380: ***********************************************************************/ 381: 1.1.1.2 ! root 382: MRESULT CALLBACK fnwpCheckBoxDlg( hwndDlg, message, mp1, mp2 ) 1.1 root 383: HWND hwndDlg; 384: USHORT message; 385: MPARAM mp1; 386: MPARAM mp2; 387: { 388: switch (message) 389: { 390: case WM_INITDLG: 1.1.1.2 ! root 391: CenterDlgBox( hwndDlg ); 1.1 root 392: colorSave = colorClient; 393: if( (colorClient & CLR_RED) == CLR_RED ) 394: WinPostMsg( WinWindowFromID( hwndDlg, CB_RED ), 395: BM_SETCHECK, 396: MPFROM2SHORT( TRUE,0 ), 397: 0L ); 398: if( (colorClient & CLR_GREEN) == CLR_GREEN ) 399: WinPostMsg( WinWindowFromID( hwndDlg, CB_GREEN ), 400: BM_SETCHECK, 401: MPFROM2SHORT( TRUE,0 ), 402: 0L ); 403: if( (colorClient & CLR_BLUE) == CLR_BLUE ) 404: WinPostMsg( WinWindowFromID( hwndDlg, CB_BLUE ), 405: BM_SETCHECK, 406: MPFROM2SHORT( TRUE,0 ), 407: 0L ); 408: break; 409: case WM_CONTROL: /* User has clicked on a checkbox */ 410: if( SHORT2FROMMP( mp1 ) == BN_CLICKED ) 411: CheckColor( hwndDlg, SHORT1FROMMP( mp1 ), &colorClient ); 412: WinInvalidateRect( hwndClient, NULL, FALSE ); 413: break; 414: case WM_COMMAND: 415: switch( SHORT1FROMMP( mp1 ) ) 416: { 417: case DID_OK: /* Enter key or pushbutton pressed/ selected */ 418: if( !bModality ) 419: WinPostMsg( hwndClient, DLGSAMP_CBCOMPLETE, 0L, 0L ); 420: break; 421: case DID_CANCEL: /* Escape key or CANCEL pushbutton pressed/selected */ 422: colorClient = colorSave; 423: break; 424: default: 425: return WinDefDlgProc( hwndDlg, message, mp1, mp2 ); 426: } 427: if( bModality ) 428: WinDismissDlg( hwndDlg, TRUE ); 429: else 430: WinPostMsg( hwndClient, DLGSAMP_DESTROYDLG, 0L, 0L ); 431: return FALSE; 432: 433: default: /* Pass all other messages to the default dialog proc */ 434: return WinDefDlgProc( hwndDlg, message, mp1, mp2 ); 435: } 436: return FALSE; 437: } 438: 439: /*********************************************************************** 440: * 441: * DlgProc: fnwpListBoxDlg 442: * 443: ***********************************************************************/ 444: 1.1.1.2 ! root 445: MRESULT CALLBACK fnwpListBoxDlg( hwndDlg, message, mp1, mp2 ) 1.1 root 446: HWND hwndDlg; 447: USHORT message; 448: MPARAM mp1; 449: MPARAM mp2; 450: { 451: CHAR szBuffer[LEN_LISTBOXENTRY]; 452: SHORT i; 453: SHORT id; 454: 455: switch (message) 456: { 457: case WM_INITDLG: 1.1.1.2 ! root 458: CenterDlgBox( hwndDlg ); 1.1 root 459: 460: /************************************************************************* 461: * 1.1.1.2 ! root 462: * Initialize the listbox with a set of strings loaded from a 1.1 root 463: * resource file. 464: * 465: *************************************************************************/ 466: 467: for ( i = 0; i < NUM_LISTBOXENTRIES; i++ ) 468: { 469: WinLoadString( hab, 470: NULL, 1.1.1.2 ! root 471: LBI_1 + i, ! 472: LEN_LISTBOXENTRY, ! 473: (PSZ)szBuffer 1.1 root 474: ); 475: WinSendDlgItemMsg( hwndDlg, 476: LB_1, 477: LM_INSERTITEM, 478: MPFROM2SHORT( LIT_END, 0 ), 479: MPFROMP( szBuffer ) 480: ); 481: } 482: break; 483: case WM_COMMAND: 484: switch( SHORT1FROMMP( mp1 ) ) 485: { 486: case DID_OK: /* Enter key or pushbutton pressed/ selected */ 487: if( bModality ) 488: { 489: 490: /*********************************************************************** 491: * 1.1.1.2 ! root 492: * Find out which item (if any) was selected and return the selected 1.1 root 493: * item text. 494: * 495: ***********************************************************************/ 496: 497: id = SHORT1FROMMR( WinSendDlgItemMsg( hwndDlg, 498: LB_1, 499: LM_QUERYSELECTION, 500: 0L, 501: 0L ) ); 502: if( id == LIT_NONE ) 503: strcpy( szSelection, "" ); 504: else 505: WinSendDlgItemMsg( hwndDlg, 506: LB_1, 507: LM_QUERYITEMTEXT, 508: MPFROM2SHORT( id, LEN_LISTBOXENTRY ), 509: MPFROMP( szSelection ) ); 510: } 511: else 512: WinPostMsg( hwndClient, DLGSAMP_LBCOMPLETE, 0L, 0L ); 513: case DID_CANCEL: /* Escape key or CANCEL pushbutton pressed/selected */ 514: if( bModality ) 515: WinDismissDlg( hwndDlg, TRUE ); 516: else 517: WinPostMsg( hwndClient, DLGSAMP_DESTROYDLG, 0L, 0L ); 518: return FALSE; 519: default: 520: break; 521: } 522: break; 523: 524: default: /* Pass all other messages to the default dialog proc */ 525: return WinDefDlgProc( hwndDlg, message, mp1, mp2 ); 526: } 527: return FALSE; 528: } 529: 530: /************************************************************************* 531: * 1.1.1.2 ! root 532: * FUNCTION : CenterDlgBox 1.1 root 533: * 1.1.1.2 ! root 534: * Positions the dialog box in the center of the screen 1.1 root 535: * 536: *************************************************************************/ 537: 1.1.1.2 ! root 538: VOID cdecl CenterDlgBox( hwnd ) 1.1 root 539: HWND hwnd; 540: { 541: SHORT ix, iy; 542: SHORT iwidth, idepth; 543: SWP swp; 544: 545: iwidth = (SHORT)WinQuerySysValue( HWND_DESKTOP, SV_CXSCREEN ); 546: idepth = (SHORT)WinQuerySysValue( HWND_DESKTOP, SV_CYSCREEN ); 547: WinQueryWindowPos( hwnd, (PSWP)&swp ); 548: ix = ( iwidth - swp.cx ) / 2; 549: iy = ( idepth - swp.cy ) / 2; 550: WinSetWindowPos( hwnd, HWND_TOP, ix, iy, 0, 0, SWP_MOVE ); 551: } 552: 553: /*************************************************************************** 554: * 1.1.1.2 ! root 555: * FUNCTION: CheckColor 1.1 root 556: * 557: * Toggle the Checked/UnChecked state of a checkbox and add/remove 558: * the corresponding CLR color component of the Client Area Color. 559: * 560: ***************************************************************************/ 561: 562: VOID cdecl CheckColor( hwndDlg, iDlgItem, colorClient ) 563: HWND hwndDlg; 564: SHORT iDlgItem; 565: COLOR *colorClient; 566: { 567: BOOL bChecked; 568: COLOR color; 569: 570: switch( iDlgItem ) 571: { 572: case CB_RED: 573: color = CLR_RED; 574: break; 575: case CB_GREEN: 576: color = CLR_GREEN; 577: break; 578: case CB_BLUE: 579: color = CLR_BLUE; 580: break; 581: default: 582: return; 583: } 584: 585: bChecked = SHORT1FROMMR( WinSendMsg( WinWindowFromID( hwndDlg , iDlgItem ), 586: BM_QUERYCHECK, 587: 0L, 588: 0L ) ); 589: WinPostMsg( WinWindowFromID( hwndDlg, iDlgItem ), 590: BM_SETCHECK, 591: MPFROM2SHORT( !bChecked, 0 ), 592: 0L ); 593: if( bChecked ) /* If color previously checked */ 594: *colorClient -= color; /* subtract it ... else */ 595: else 596: *colorClient += color; /* ... add it. */ 597: } 598: 599: /************************************************************************** 600: * 1.1.1.2 ! root 601: * FUNCTION: EnableModality 1.1 root 602: * 1.1.1.2 ! root 603: * Enable or disable the Modality menuitems depending on the value 1.1 root 604: * of modal. This is done to prevent the user from altering the 605: * modality setting while a modeless dialog is active. 606: * 607: **************************************************************************/ 608: 609: VOID cdecl EnableModality( hwnd, bModal ) 610: HWND hwnd; 611: BOOL bModal; 612: { 613: if( bModal ) 614: { 615: WinPostMsg( WinWindowFromID( hwnd, FID_MENU ), 616: MM_SETITEMATTR, 617: MPFROM2SHORT( MI_MODAL, TRUE ), 618: MPFROM2SHORT( MIA_DISABLED, ~MIA_DISABLED ) ); 619: WinPostMsg( WinWindowFromID( hwnd, FID_MENU ), 620: MM_SETITEMATTR, 621: MPFROM2SHORT( MI_MODELESS, TRUE ), 622: MPFROM2SHORT( MIA_DISABLED, ~MIA_DISABLED ) ); 623: } 624: else 625: { 626: WinPostMsg( WinWindowFromID( hwnd, FID_MENU ), 627: MM_SETITEMATTR, 628: MPFROM2SHORT( MI_MODAL, TRUE ), 629: MPFROM2SHORT( MIA_DISABLED, MIA_DISABLED ) ); 630: WinPostMsg( WinWindowFromID( hwnd, FID_MENU ), 631: MM_SETITEMATTR, 632: MPFROM2SHORT( MI_MODELESS, TRUE ), 633: MPFROM2SHORT( MIA_DISABLED, MIA_DISABLED ) ); 634: } 635: } 636: 637: /*************************************************************************** 638: * 1.1.1.2 ! root 639: * FUNCTION: IsIntInRange. 1.1 root 640: * 641: * Checks whether the value of a dialog item is in an integer in 642: * a given range. 643: * 644: ***************************************************************************/ 645: 646: BOOL cdecl IsIntInRange( hwndDlg, idEntryField, 647: iLoRange, iHiRange, 648: idErrMsg, idMessageBox ) 649: HWND hwndDlg; 650: SHORT idEntryField; 651: SHORT iLoRange; 652: SHORT iHiRange; 653: SHORT idErrMsg; 654: SHORT idMessageBox; 655: { 656: SHORT ivalue; 657: CHAR szErrMsg[80]; 658: 659: /**************************************************************************** 660: * 661: * Validate an entry field. 662: * 663: * If validation fails leave the dialog visible, issue an error message 664: * using a messagebox, and when the user dismisses the messagebox, 665: * set the input focus to the entry field containing the error. Leave 666: * the contents of the entry field unchanged, and return FALSE. 667: * 668: * If validation is successful return the value in ivalue and return 669: * TRUE. 670: * 671: ****************************************************************************/ 672: 673: if( !WinQueryDlgItemShort( hwndDlg, idEntryField, &ivalue, TRUE ) || 674: ( ivalue < iLoRange ) || 675: ( ivalue > iHiRange ) ) 676: { 677: WinLoadString( hab, NULL, idErrMsg, sizeof( szErrMsg ), szErrMsg ); 678: WinMessageBox( HWND_DESKTOP, 679: hwndFrame, 680: (PSZ)szErrMsg, 681: NULL, 682: idMessageBox, 683: MB_OK ); 684: WinSetFocus( HWND_DESKTOP, WinWindowFromID( hwndDlg, idEntryField ) ); 685: return FALSE; 686: } 687: else 688: return TRUE; 689: } 690: 691: /*********************************************************************** 692: * 1.1.1.2 ! root 693: * FUNCTION: LoadDialog 1.1 root 694: * 695: * Use the appropriate functions to put up a modal or modeless 696: * dialog box depending on the setting of the bModality parameter. 697: * 698: ***********************************************************************/ 699: 700: VOID cdecl LoadDialog( hwndParent, hwndOwner, idDlg, fnwpDlgProc, bModality ) 701: HWND hwndParent; 702: HWND hwndOwner; 703: SHORT idDlg; 704: PFNWP fnwpDlgProc; 705: BOOL bModality; 706: { 707: EnableModality( hwndOwner, FALSE ); /* Disable the Modality menu item */ 708: 709: if( bModality ) 710: { 711: WinDlgBox( hwndParent, /* Parent */ 712: hwndOwner, /* Owner */ 713: fnwpDlgProc, /* Address of dialog proc */ 714: NULL, /* Module handle */ 715: idDlg, /* Id of dialog in resource */ 716: NULL ); /* Initialisation data */ 717: EnableModality( hwndOwner, TRUE ); /* Enable the Modality menu item */ 718: } 719: else 720: { 721: /******************************************************************* 722: * 723: * Check to see if a modeless dialog is already running: if 724: * so destroy it before for loading the requested dialog. Save 725: * the handle of the new dialog in a global variable so that in 726: * can be accessed by the WinProc that issued LoadDialog. 727: * 728: *******************************************************************/ 729: 730: if( WinIsWindow( hab, hwndModelessDlg ) ) 731: WinDestroyWindow( hwndModelessDlg ); 732: hwndModelessDlg = WinLoadDlg( hwndParent, 733: hwndOwner, 734: fnwpDlgProc, 735: NULL, 736: idDlg, 737: NULL ); 738: } 739: } 740: 741: /************************************************************************* 742: * 1.1.1.2 ! root 743: * FUNCTION: MainWndCommand 1.1 root 744: * 745: * Take the appropriate action when a WM_COMMAND message is received by 746: * MainWndProc. Issues calls which load dialogs in the prevailing state 747: * of modality. 748: * 749: *************************************************************************/ 750: 751: VOID cdecl MainWndCommand( hwnd, Command, bModality ) 752: HWND hwnd; 753: USHORT Command; 754: BOOL *bModality; 755: { 756: USHORT idDlg; 757: PFNWP pfnDlgProc; 758: 759: switch( Command ) 760: { 761: case MI_MODAL: 762: case MI_MODELESS: 763: *bModality = ( Command == MI_MODAL ) ? TRUE 764: : FALSE; 765: SetModality( WinQueryWindow( hwnd, QW_PARENT, FALSE ), *bModality ); 766: WinInvalidateRect( hwnd, NULL, FALSE ); 767: return; 768: case MI_ENTRYFIELDEXAMPLE: 769: idDlg = DLG_ENTRYFIELDEXAMPLE; 770: pfnDlgProc = (PFNWP)fnwpEntryFieldDlg; 771: break; 772: case MI_AUTORADIOBUTTONEXAMPLE: 773: idDlg = DLG_AUTORADIOBUTTONEXAMPLE; 774: pfnDlgProc = (PFNWP)fnwpAutoRadioButtonDlg; 775: break; 776: case MI_CHECKBOXEXAMPLE: 777: idDlg = DLG_CHECKBOXEXAMPLE; 778: pfnDlgProc = (PFNWP)fnwpCheckBoxDlg; 779: break; 780: case MI_LISTBOXEXAMPLE: 781: idDlg = DLG_LISTBOXEXAMPLE; 782: pfnDlgProc = (PFNWP)fnwpListBoxDlg; 783: break; 1.1.1.2 ! root 784: case MI_ABOUTBOX: ! 785: WinDlgBox(HWND_DESKTOP, hwnd, fnwpAboutBoxDlg, NULL, DLG_ABOUT, NULL); ! 786: return; 1.1 root 787: default: 788: return; 789: } 790: LoadDialog( HWND_DESKTOP, 791: hwndFrame, 792: idDlg, 793: pfnDlgProc, 794: *bModality ); 795: if( *bModality ) 796: WinInvalidateRect( hwnd, NULL, FALSE ); /* Request whole window repaint */ 797: } 798: 799: /************************************************************************ 800: * 1.1.1.2 ! root 801: * FUNCTION: MainWndPaint 1.1 root 802: * 803: * An unsophisticated window painting routine which simply repaints the 804: * entire window when a WM_PAINT message is received. In a real 805: * application more sophisticated techniques could be used to determine 806: * the minimum region needing repainting, and to paint only that 807: * region 808: * 809: ************************************************************************/ 810: 811: VOID cdecl MainWndPaint( hwnd ) 812: HWND hwnd; 813: { 814: POINTL pointl; 815: HPS hps; /* Presentation space handle */ 816: RECTL rcl; /* Window rectangle */ 817: CHAR string[50]; 818: 819: hps = WinBeginPaint( hwnd, (HPS)NULL, (PRECTL)&rcl ); 1.1.1.2 ! root 820: /* ! 821: Color in the background ! 822: */ ! 823: switch ((int) colorClient) { ! 824: case 0: /* (r,g,b) = (0,0,0) */ ! 825: WinFillRect( hps, (PRECTL)&rcl, CLR_BLACK ); ! 826: break; ! 827: case 7: /* (r,g,b) = (1,1,1) */ ! 828: WinFillRect( hps, (PRECTL)&rcl, CLR_WHITE ); ! 829: break; ! 830: default: ! 831: WinFillRect( hps, (PRECTL)&rcl, colorClient ); ! 832: break; ! 833: } ! 834: /* ! 835: Set the text character colors ! 836: */ 1.1 root 837: GpiSetColor( hps, (colorClient == 0L) ? CLR_WHITE 838: : CLR_BLACK ); 839: pointl.x = 10L; pointl.y = 70L; 840: strcpy( string, "Dialog modality = " ); 841: strcat( string, (bModality) ? "Modal" 842: : "Modeless" ); 843: GpiCharStringAt( hps, &pointl, (LONG)strlen( string ), (PSZ)string ); 844: pointl.y = 50L; 845: strcpy( string, "Entry Field 1 = " ); 846: strcat( string, szEntryField1 ); 847: GpiCharStringAt( hps, &pointl, (LONG)strlen( string ), (PSZ)string ); 848: pointl.y = 30L; 849: strcpy( string, "Entry Field 2 = " ); 850: strcat( string, szEntryField2 ); 851: GpiCharStringAt( hps, &pointl, (LONG)strlen( string ), (PSZ)string ); 852: pointl.y = 10L; 853: strcpy( string, "List Box Selection = " ); 854: strcat( string, szSelection ); 855: GpiCharStringAt( hps, &pointl, (LONG)strlen( string ), (PSZ)string ); 856: WinEndPaint( hps ); 857: } 858: 859: /************************************************************************** 860: * 1.1.1.2 ! root 861: * FUNCTION: SetModality 1.1 root 862: * 863: * Check or uncheck Modal and Modeless menu items as appropriate. 864: * 865: **************************************************************************/ 866: 867: VOID cdecl SetModality( hwnd, bModal ) 868: HWND hwnd; 869: BOOL bModal; 870: { 871: WinPostMsg( WinWindowFromID( hwnd, FID_MENU ), 872: MM_SETITEMATTR, 873: MPFROM2SHORT( MI_MODAL, TRUE ), 874: MPFROM2SHORT( MIA_CHECKED, (bModal) ? ( MIA_CHECKED) 875: : (~MIA_CHECKED) ) ); 876: 877: WinPostMsg( WinWindowFromID( hwnd, FID_MENU ), 878: MM_SETITEMATTR, 879: MPFROM2SHORT( MI_MODELESS, TRUE ), 880: MPFROM2SHORT( MIA_CHECKED, (bModal) ? (~MIA_CHECKED) 881: : ( MIA_CHECKED) ) ); 882: 883: } 1.1.1.2 ! root 884: ! 885: MRESULT CALLBACK fnwpAboutBoxDlg(hDlg, msg, mp1, mp2) ! 886: /* ! 887: About... dialog procedure ! 888: */ ! 889: HWND hDlg; ! 890: USHORT msg; ! 891: MPARAM mp1; ! 892: MPARAM mp2; ! 893: { ! 894: switch(msg) { ! 895: case WM_COMMAND: ! 896: switch(COMMANDMSG(&msg)->cmd) { ! 897: case DID_OK: WinDismissDlg(hDlg, TRUE); break; ! 898: default: break; ! 899: } ! 900: default: return WinDefDlgProc(hDlg, msg, mp1, mp2); ! 901: } ! 902: return FALSE; ! 903: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.