|
|
1.1 ! root 1: /****************************** Module Header ******************************\ ! 2: * Module Name: FONTTEST.C ! 3: * ! 4: * Example of a simple OS/2 Presentation Manager application ! 5: * ! 6: * Created by Microsoft Corp., 1988 ! 7: * ! 8: \***************************************************************************/ ! 9: ! 10: #define INCL_GPI ! 11: #define INCL_WIN ! 12: #define INCL_WINCOMMON ! 13: #define INCL_WINMESSAGEMGR ! 14: ! 15: #include <os2.h> ! 16: #include <pmfont.h> ! 17: #include "fonttest.h" ! 18: #define LINT_ARGS ! 19: #include "string.h" ! 20: ! 21: typedef BOOL FAR * LPBOOL; ! 22: ! 23: HAB vhab; ! 24: HWND vhwndFTClient; ! 25: HWND vhwndFTFrame; ! 26: SHORT vcch; ! 27: ! 28: FATTRS vfat; ! 29: FONTMETRICS vfm; ! 30: ! 31: CHAR szAlphabet[CCHMAX]; ! 32: CHAR szAppName[8]; ! 33: ! 34: typedef struct _FONTDATA { ! 35: LONG xShear; ! 36: LONG yShear; ! 37: LONG xAngle; ! 38: LONG yAngle; ! 39: } FONTDATA; ! 40: ! 41: FATTRS DisplayList[MAXLINES]; ! 42: FONTDATA DisplayData[MAXLINES]; ! 43: SHORT BottomLine = 0; ! 44: SHORT TopLine = 0; ! 45: SHORT FontDesired = 0; ! 46: SHORT FontInUse = 0; ! 47: LONG FontsAvail = FONTSAVAIL; ! 48: FONTMETRICS fm[FONTSAVAIL]; ! 49: ! 50: /***************************** Public Function ****************************\ ! 51: * ! 52: * Font Test Main procedure ! 53: * ! 54: * Effects: Set globals - vhab Handle to Application Anchor Block ! 55: * ! 56: * Warnings: None ! 57: * ! 58: \***************************************************************************/ ! 59: int cdecl main( ) ! 60: { ! 61: QMSG qmsg; ! 62: HMQ hmq; ! 63: CHAR szTitle[21]; ! 64: HPS hps; ! 65: ULONG ctldata; ! 66: ! 67: vhab = WinInitialize(NULL); ! 68: hmq = WinCreateMsgQueue( vhab, 0 ); ! 69: ! 70: WinLoadString( vhab, NULL, IDS_NAME, sizeof(szAppName), szAppName ); ! 71: ! 72: /* Register Application Window Class. Extra longword is used to ! 73: specify whether any string should be displayed and whether the ! 74: window should be redrawn. */ ! 75: ! 76: if ( !WinRegisterClass( vhab, szAppName, FonttestWndProc, ! 77: 0L, sizeof(ULONG)) ) ! 78: return( FALSE ); ! 79: ! 80: /* Create a window instance of class "FontTest" */ ! 81: ! 82: WinLoadString( vhab, NULL, IDS_TITLE, sizeof(szTitle), szTitle ); ! 83: ! 84: hps = WinGetPS(HWND_DESKTOP); ! 85: GpiQueryFontMetrics( hps, (LONG)sizeof(FONTMETRICS), &vfm ); ! 86: WinReleasePS(hps); ! 87: ! 88: vfat.usRecordLength = sizeof(FATTRS); ! 89: vfat.fsSelection = vfm.fsSelection; ! 90: vfat.lMatch = 0L; ! 91: vfat.fsType = vfm.fsType; ! 92: strcpy(vfat.szFaceName, vfm.szFacename); ! 93: vfat.idRegistry = 0; ! 94: vfat.usCodePage = vfm.usCodePage; ! 95: vfat.lMaxBaselineExt = vfm.lMaxBaselineExt; ! 96: vfat.lAveCharWidth = vfm.lAveCharWidth; ! 97: vfat.sQuality = FATTR_QUALITY_DEFAULT; ! 98: ! 99: ctldata = FCF_STANDARD; ! 100: ! 101: vhwndFTFrame = WinCreateStdWindow( ! 102: HWND_DESKTOP, /* specify desktop as parent window */ ! 103: /* window styles */ ! 104: WS_VISIBLE | FS_ICON | FS_ACCELTABLE, ! 105: &ctldata, /* frame creation flags */ ! 106: szAppName, /* window class name */ ! 107: szTitle, /* name appearing in window caption */ ! 108: 0L, /* client styles */ ! 109: NULL, /* use current executable module id */ ! 110: ID_FONTTEST, /* resource id */ ! 111: &vhwndFTClient /* window handle */ ! 112: ); ! 113: ! 114: vcch = WinLoadString( vhab, NULL, IDS_ALPHABET, CCHMAX, szAlphabet); ! 115: ! 116: while( WinGetMsg( vhab, &qmsg, NULL, 0, 0 ) ) ! 117: WinDispatchMsg( vhab, &qmsg ); ! 118: ! 119: WinDestroyWindow( vhwndFTFrame ); ! 120: WinDestroyMsgQueue( hmq ); ! 121: WinTerminate( vhab ); ! 122: } ! 123: ! 124: ! 125: ! 126: /***************************** Public Function ****************************\ ! 127: * ! 128: * MRESULT EXPENTRY fnAboutDlg( hwndDlg, message, mp1, mp2 ) ! 129: * HWND hwndDlg; ! 130: * USHORT message; ! 131: * ULONG mp1; ! 132: * ULONG mp2; ! 133: * ! 134: * Effects: None ! 135: * ! 136: * Warnings: None ! 137: * ! 138: \***************************************************************************/ ! 139: ! 140: MRESULT EXPENTRY fnAboutDlg( hwndDlg, message, mp1, mp2 ) ! 141: HWND hwndDlg; ! 142: USHORT message; ! 143: MPARAM mp1; ! 144: MPARAM mp2; ! 145: { ! 146: switch( message ) ! 147: { ! 148: case WM_COMMAND: ! 149: switch( SHORT1FROMMP( mp1 ) ) ! 150: { ! 151: case DID_OK: ! 152: case DID_CANCEL: ! 153: WinDismissDlg( hwndDlg, TRUE ); ! 154: break; ! 155: ! 156: default: ! 157: return( (MRESULT)FALSE ); ! 158: } ! 159: default: ! 160: return( WinDefDlgProc( hwndDlg, message, mp1, mp2 ) ); ! 161: } ! 162: return( 0L ); ! 163: } ! 164: ! 165: ! 166: /***************************** Private Function ****************************\ ! 167: * ! 168: * VOID PASCAL RedrawScreen( hwnd, hps ) ! 169: * HWND hwnd; ! 170: * HPS hps; ! 171: * ! 172: * Effects: None ! 173: * ! 174: * Warnings: None ! 175: * ! 176: \***************************************************************************/ ! 177: ! 178: ! 179: VOID PASCAL RedrawScreen ( hwnd, hps ) ! 180: HWND hwnd; ! 181: HPS hps; ! 182: { ! 183: POINTL ptl; ! 184: SHORT x; ! 185: CHARBUNDLE cb; ! 186: RECTL rcl; ! 187: SIZEF sizef; ! 188: POINTL pointl; ! 189: GRADIENTL gradientl; ! 190: ! 191: cb.lColor = SYSCLR_WINDOWTEXT; ! 192: GpiSetAttrs(hps, PRIM_CHAR, CBB_COLOR, 0L, (PBUNDLE)&cb ); ! 193: ! 194: WinSetWindowULong ( hwnd, QWL_USER, ! 195: WinQueryWindowULong ( hwnd, QWL_USER ) & ! 196: (ULONG) ~ID_REDRAW ); ! 197: ! 198: /* Special case for initial state. */ ! 199: if ( (TopLine == BottomLine) && ! 200: (WinQueryWindowULong (hwnd, QWL_USER) & ID_SHOW) ) ! 201: { ! 202: ShowSampleString ( hwnd, hps ); ! 203: return; ! 204: } ! 205: ! 206: ptl.x = 0L; ! 207: ! 208: x = TopLine; ! 209: while ( x != BottomLine ) ! 210: { ! 211: x = (x + MAXLINES - 1) % MAXLINES; ! 212: sizef.cx = DisplayList[x].lAveCharWidth * 65536; ! 213: sizef.cy = DisplayList[x].lMaxBaselineExt * 65536; ! 214: GpiSetCharBox ( hps, &sizef ); ! 215: gradientl.x = DisplayData[x].xAngle; ! 216: gradientl.y = DisplayData[x].yAngle; ! 217: GpiSetCharAngle ( hps, &gradientl ); ! 218: pointl.x = DisplayData[x].xShear; ! 219: pointl.y = DisplayData[x].yShear; ! 220: GpiSetCharShear ( hps, &pointl ); ! 221: GpiCreateLogFont( hps, (PSTR8)szAppName, (LONG)ID_LCID, &DisplayList[x]); ! 222: GpiSetCharSet( hps, (LONG) ID_LCID ); ! 223: GpiQueryFontMetrics( hps, (LONG)sizeof(FONTMETRICS), &vfm ); ! 224: WinScrollWindow (hwnd, 0, (SHORT) vfm.lMaxBaselineExt, NULL, NULL, NULL, ! 225: &rcl, 0); ! 226: WinFillRect (hps, &rcl, SYSCLR_WINDOW); ! 227: ptl.y = vfm.lMaxDescender + 1; ! 228: GpiCharStringAt( hps, &ptl, (long)vcch, szAlphabet ); ! 229: GpiSetCharSet ( hps, 0L ); ! 230: GpiDeleteSetId ( hps, (LONG) ID_LCID ); ! 231: } ! 232: ! 233: } ! 234: ! 235: ! 236: /***************************** Private Function ****************************\ ! 237: * ! 238: * VOID PASCAL ShowSampleString( hwnd, hps ) ! 239: * HWND hwnd; ! 240: * HPS hps; ! 241: * ! 242: * Effects: None ! 243: * ! 244: * Warnings: None ! 245: * ! 246: \***************************************************************************/ ! 247: ! 248: ! 249: VOID PASCAL ShowSampleString( hwnd, hps ) ! 250: HWND hwnd; ! 251: HPS hps; ! 252: { ! 253: POINTL ptl; ! 254: CHARBUNDLE cb; ! 255: RECTL rcl; ! 256: SIZEF sizef; ! 257: GRADIENTL gradientl; ! 258: POINTL pointl; ! 259: ! 260: GpiLoadFonts( vhab, (PSZ) "fonts" ); ! 261: ! 262: GpiQueryFonts ( hps, (ULONG) QUERY_PUBLIC_FONTS | QUERY_PRIVATE_FONTS, ! 263: NULL, &FontsAvail, (LONG) sizeof(FONTMETRICS), fm); ! 264: ! 265: cb.lColor = SYSCLR_WINDOWTEXT; ! 266: GpiSetAttrs(hps, PRIM_CHAR, CBB_COLOR, 0L, (PBUNDLE)&cb ); ! 267: ! 268: if ( (0 <= FontDesired) && (FontDesired < (SHORT) FontsAvail) ) ! 269: { ! 270: vfat.lMatch = fm[FontDesired].lMatch; ! 271: FontInUse = FontDesired; ! 272: } ! 273: else ! 274: vfat.lMatch = fm[FontInUse].lMatch; ! 275: ! 276: sizef.cx = vfat.lAveCharWidth * 65536; ! 277: sizef.cy = vfat.lMaxBaselineExt * 65536; ! 278: GpiSetCharBox ( hps, &sizef ); ! 279: ! 280: gradientl.x = DisplayData[(BottomLine+MAXLINES-1)%MAXLINES].xAngle; ! 281: gradientl.y = DisplayData[(BottomLine+MAXLINES-1)%MAXLINES].yAngle; ! 282: GpiSetCharAngle ( hps, &gradientl ); ! 283: ! 284: pointl.x = DisplayData[(BottomLine+MAXLINES-1)%MAXLINES].xShear; ! 285: pointl.y = DisplayData[(BottomLine+MAXLINES-1)%MAXLINES].yShear; ! 286: GpiSetCharShear ( hps, &pointl ); ! 287: ! 288: GpiCreateLogFont( hps, (PSTR8) szAppName, (LONG) ID_LCID, &vfat ); ! 289: ! 290: BottomLine = (BottomLine + MAXLINES - 1) % MAXLINES; ! 291: ! 292: /* Store the font attributes for the current line in the display list. */ ! 293: DisplayList[BottomLine].usRecordLength = vfat.usRecordLength; ! 294: DisplayList[BottomLine].fsSelection = vfat.fsSelection; ! 295: DisplayList[BottomLine].lMatch = vfat.lMatch; ! 296: DisplayList[BottomLine].fsType = vfat.fsType; ! 297: DisplayList[BottomLine].idRegistry = vfat.idRegistry; ! 298: DisplayList[BottomLine].usCodePage = vfat.usCodePage; ! 299: DisplayList[BottomLine].lMaxBaselineExt = vfat.lMaxBaselineExt; ! 300: DisplayList[BottomLine].lAveCharWidth = vfat.lAveCharWidth; ! 301: DisplayList[BottomLine].sQuality = vfat.sQuality; ! 302: DisplayList[BottomLine].fsFontUse = vfat.fsFontUse; ! 303: strcpy ( DisplayList[BottomLine].szFaceName, vfat.szFaceName ); ! 304: ! 305: if ( TopLine == BottomLine ) ! 306: TopLine = (TopLine + MAXLINES - 1) % MAXLINES; ! 307: ! 308: GpiSetCharSet( hps, (LONG) ID_LCID ); ! 309: GpiQueryFontMetrics( hps, (LONG)sizeof(FONTMETRICS), &vfm ); ! 310: ! 311: WinScrollWindow (hwnd, 0, (SHORT) vfm.lMaxBaselineExt, NULL, NULL, NULL, ! 312: &rcl, 0); ! 313: WinFillRect (hps, &rcl, SYSCLR_WINDOW); ! 314: ! 315: ptl.y = vfm.lMaxDescender + 1; ! 316: ptl.x = 0L; ! 317: GpiCharStringAt( hps, &ptl, (long)vcch, szAlphabet ); ! 318: ! 319: GpiSetCharSet ( hps, 0L ); ! 320: GpiDeleteSetId ( hps, (LONG) ID_LCID ); ! 321: ! 322: } ! 323: ! 324: ! 325: /***************************** Private Function ****************************\ ! 326: * ! 327: * VOID PASCAL InitDlg( hps, hwndDlg ) ! 328: * HPS hps; ! 329: * HWND hwndDlg; ! 330: * ! 331: * Effects: None ! 332: * ! 333: * Warnings: None ! 334: * ! 335: \***************************************************************************/ ! 336: ! 337: VOID PASCAL InitDlg( hdlg ) ! 338: HWND hdlg; ! 339: { ! 340: if (vfat.fsSelection & FATTR_SEL_UNDERSCORE) ! 341: WinSendDlgItemMsg( hdlg, IDUNDERLINE, BM_SETCHECK, ! 342: MPFROM2SHORT(TRUE, 0), 0L ); ! 343: if (vfat.fsSelection & FATTR_SEL_STRIKEOUT) ! 344: WinSendDlgItemMsg( hdlg, IDSTRIKEOUT, BM_SETCHECK, ! 345: MPFROM2SHORT(TRUE, 0), 0L ); ! 346: if (vfat.fsSelection & FATTR_SEL_ITALIC) ! 347: WinSendDlgItemMsg( hdlg, IDITALIC, BM_SETCHECK, ! 348: MPFROM2SHORT(TRUE, 0), 0L ); ! 349: ! 350: if (vfat.fsType & FATTR_TYPE_FIXED) ! 351: WinSendDlgItemMsg( hdlg, IDPITCH, BM_SETCHECK, ! 352: MPFROM2SHORT(TRUE, 0), 0L ); ! 353: ! 354: WinSetDlgItemShort(hdlg, IDXSHEAR, 0, TRUE); ! 355: WinSetDlgItemShort(hdlg, IDYSHEAR, 1, TRUE); ! 356: WinSetDlgItemShort(hdlg, IDXANGLE, 1, TRUE); ! 357: WinSetDlgItemShort(hdlg, IDYANGLE, 0, TRUE); ! 358: WinSetDlgItemShort(hdlg, IDHEIGHT, (int)vfat.lMaxBaselineExt, TRUE); ! 359: WinSetDlgItemShort(hdlg, IDFMHEIGHT, (int)vfm.lEmHeight, TRUE); ! 360: WinSetDlgItemShort(hdlg, IDWIDTH, (int)vfat.lAveCharWidth, TRUE); ! 361: WinSetDlgItemShort(hdlg, IDFMWIDTH, (int)vfm.lAveCharWidth, TRUE); ! 362: WinSetDlgItemShort(hdlg, IDFMWEIGHT, (int)vfm.usWeightClass, TRUE); ! 363: WinSetDlgItemShort(hdlg, IDAVCHARWIDTH, (int)vfm.lAveCharWidth, TRUE); ! 364: WinSetDlgItemShort(hdlg, IDMAXCHARINC, (int)vfm.lMaxCharInc, TRUE); ! 365: WinSetDlgItemShort(hdlg, IDCODEPAGE, (int)vfat.usCodePage, TRUE); ! 366: WinSetDlgItemShort(hdlg, IDFMCODEPAGE, (int)vfm.usCodePage, TRUE); ! 367: WinSetDlgItemShort(hdlg, IDFONTDESIRED, FontDesired, TRUE); ! 368: WinSetDlgItemShort(hdlg, IDFONTINUSE, FontInUse, TRUE); ! 369: } ! 370: ! 371: ! 372: /***************************** Private Function ****************************\ ! 373: * ! 374: * VOID PASCAL DlgCommand( hdlg, mp1 ) ! 375: * HWND hdlg; ! 376: * ULONG mp1; ! 377: * ! 378: * Effects: None ! 379: * ! 380: * Warnings: None ! 381: * ! 382: \***************************************************************************/ ! 383: ! 384: VOID PASCAL DlgCommand( hdlg, mp1 ) ! 385: HWND hdlg; ! 386: MPARAM mp1; ! 387: { ! 388: SHORT sTmp; ! 389: ! 390: switch ( SHORT1FROMMP(mp1) ) ! 391: { ! 392: case DID_OK: ! 393: ! 394: if (WinSendDlgItemMsg( hdlg, IDITALIC, BM_QUERYCHECK, 0L, 0L)) ! 395: vfat.fsSelection |= FATTR_SEL_ITALIC; ! 396: else ! 397: vfat.fsSelection &= ~FATTR_SEL_ITALIC; ! 398: ! 399: if (WinSendDlgItemMsg( hdlg, IDUNDERLINE, BM_QUERYCHECK, 0L, 0L)) ! 400: vfat.fsSelection |= FATTR_SEL_UNDERSCORE; ! 401: else ! 402: vfat.fsSelection &= ~FATTR_SEL_UNDERSCORE; ! 403: ! 404: if (WinSendDlgItemMsg( hdlg, IDSTRIKEOUT, BM_QUERYCHECK, 0L, 0L)) ! 405: vfat.fsSelection |= FATTR_SEL_STRIKEOUT; ! 406: else ! 407: vfat.fsSelection &= ~FATTR_SEL_STRIKEOUT; ! 408: ! 409: WinQueryDlgItemShort(hdlg, IDWIDTH, &sTmp, TRUE); ! 410: vfat.lAveCharWidth = sTmp; ! 411: ! 412: WinQueryDlgItemShort(hdlg, IDHEIGHT, &sTmp, TRUE); ! 413: vfat.lMaxBaselineExt = sTmp; ! 414: ! 415: WinQueryDlgItemShort(hdlg, IDXSHEAR, &sTmp, TRUE); ! 416: DisplayData[(BottomLine+MAXLINES-1)%MAXLINES].xShear = (LONG) sTmp; ! 417: ! 418: WinQueryDlgItemShort(hdlg, IDYSHEAR, &sTmp, TRUE); ! 419: DisplayData[(BottomLine+MAXLINES-1)%MAXLINES].yShear = (LONG) sTmp; ! 420: ! 421: WinQueryDlgItemShort(hdlg, IDXANGLE, &sTmp, TRUE); ! 422: DisplayData[(BottomLine+MAXLINES-1)%MAXLINES].xAngle = (LONG) sTmp; ! 423: ! 424: WinQueryDlgItemShort(hdlg, IDYANGLE, &sTmp, TRUE); ! 425: DisplayData[(BottomLine+MAXLINES-1)%MAXLINES].yAngle = (LONG) sTmp; ! 426: ! 427: if (WinSendDlgItemMsg( hdlg, IDPITCH, BM_QUERYCHECK, 0L, 0L)) ! 428: vfat.fsType = FATTR_TYPE_FIXED; ! 429: else ! 430: vfat.fsType = 0; ! 431: ! 432: WinQueryDlgItemShort(hdlg, IDCODEPAGE, &sTmp, TRUE); ! 433: vfat.usCodePage = sTmp; ! 434: ! 435: WinQueryDlgItemShort(hdlg, IDFONTDESIRED, &sTmp, TRUE); ! 436: FontDesired = sTmp; ! 437: ! 438: WinDismissDlg( hdlg, TRUE ); ! 439: break; ! 440: ! 441: case DID_CANCEL: ! 442: WinDismissDlg( hdlg, TRUE ); ! 443: break; ! 444: ! 445: default: ! 446: break; ! 447: } ! 448: } ! 449: ! 450: ! 451: /***************************** Public Function ****************************\ ! 452: * ! 453: * MRESULT EXPENTRY fnOptionsDlg( hdlg, message, mp1, mp2 ) ! 454: * HWND hdlg; ! 455: * USHORT message; ! 456: * ULONG mp1; ! 457: * ULONG mp2; ! 458: * ! 459: * Effects: None ! 460: * ! 461: * Warnings: None ! 462: * ! 463: \***************************************************************************/ ! 464: ! 465: MRESULT EXPENTRY fnOptionsDlg( hdlg, message, mp1, mp2 ) ! 466: HWND hdlg; ! 467: USHORT message; ! 468: MPARAM mp1; ! 469: MPARAM mp2; ! 470: { ! 471: switch (message) ! 472: { ! 473: case WM_COMMAND: ! 474: DlgCommand( hdlg, mp1 ); ! 475: break; ! 476: ! 477: case WM_INITDLG: ! 478: InitDlg( hdlg ); ! 479: break; ! 480: ! 481: default: ! 482: return( WinDefDlgProc( hdlg, message, mp1, mp2 ) ); ! 483: } ! 484: ! 485: return( 0L ); ! 486: } ! 487: ! 488: ! 489: /***************************** Private Function ****************************\ ! 490: * ! 491: * VOID PASCAL FonttestCommand( hwnd, id ) ! 492: * HWND hwnd; ! 493: * USHORT id; ! 494: * ! 495: * Effects: None ! 496: * ! 497: * Warnings: None ! 498: * ! 499: \***************************************************************************/ ! 500: ! 501: VOID PASCAL FonttestCommand( hwnd, id ) ! 502: HWND hwnd; ! 503: USHORT id; ! 504: { ! 505: switch (id) ! 506: { ! 507: case IDM_SAMPLE: ! 508: /* Specify that the sample string should be displayed. */ ! 509: WinSetWindowULong ( hwnd, QWL_USER, (ULONG) ID_SHOW); ! 510: WinInvalidateRect( hwnd, (PWRECT)NULL, TRUE ); ! 511: WinUpdateWindow( hwnd ); ! 512: break; ! 513: ! 514: case IDM_CLEAR: ! 515: /* Specify that the sample string should not be displayed. */ ! 516: WinSetWindowULong ( hwnd, QWL_USER, (ULONG) ID_NOSHOW); ! 517: WinInvalidateRect( hwnd, (PWRECT)NULL, TRUE ); ! 518: WinUpdateWindow( hwnd ); ! 519: break; ! 520: ! 521: case IDM_OPTIONS: ! 522: WinDlgBox(HWND_DESKTOP, hwnd, fnOptionsDlg, NULL, IDD_OPTIONS, NULL); ! 523: break; ! 524: ! 525: case IDM_ABOUT: ! 526: WinDlgBox( HWND_DESKTOP, hwnd, fnAboutDlg, NULL, IDD_ABOUT, NULL ); ! 527: break; ! 528: ! 529: default: ! 530: break; ! 531: } ! 532: } ! 533: ! 534: ! 535: /***************************** Public Function ****************************\ ! 536: * ! 537: * MRESULT EXPENTRY FonttestWndProc( hwnd, msg, mp1, mp2 ) ! 538: * HWND hwnd; ! 539: * USHORT msg; ! 540: * ULONG mp1; ! 541: * ULONG mp2; ! 542: * ! 543: * Effects: None ! 544: * ! 545: * Warnings: None ! 546: * ! 547: \***************************************************************************/ ! 548: ! 549: MRESULT EXPENTRY FonttestWndProc( hwnd, msg, mp1, mp2 ) ! 550: HWND hwnd; ! 551: USHORT msg; ! 552: MPARAM mp1; ! 553: MPARAM mp2; ! 554: { ! 555: HPS hps; ! 556: RECTL rcl; ! 557: ! 558: switch (msg) ! 559: { ! 560: case WM_CREATE: ! 561: /* Specify that the sample string should be displayed. */ ! 562: WinSetWindowULong ( hwnd, QWL_USER, (ULONG) ID_SHOW); ! 563: break; ! 564: ! 565: case WM_PAINT: ! 566: hps = WinBeginPaint( hwnd, NULL, &rcl ); ! 567: if ( WinQueryWindowULong ( hwnd, QWL_USER ) & (ULONG) ID_REDRAW ) ! 568: RedrawScreen ( hwnd, hps ); ! 569: else ! 570: if ( WinQueryWindowULong (hwnd, QWL_USER) & (ULONG) ID_SHOW ) ! 571: ShowSampleString( hwnd, hps ); ! 572: else ! 573: { ! 574: TopLine = BottomLine; ! 575: WinFillRect (hps, &rcl, SYSCLR_WINDOW); ! 576: } ! 577: WinEndPaint( hps ); ! 578: break; ! 579: ! 580: case WM_CLOSE: ! 581: WinPostMsg( hwnd, WM_QUIT, 0L, 0L );; ! 582: break; ! 583: ! 584: case WM_COMMAND: ! 585: FonttestCommand( hwnd, SHORT1FROMMP(mp1) ); ! 586: break; ! 587: ! 588: case WM_ERASEBACKGROUND: ! 589: WinSetWindowULong ( hwnd, QWL_USER, ! 590: WinQueryWindowULong( hwnd, QWL_USER ) | ID_REDRAW ); ! 591: return (TRUE); /* Let frame control erase background. */ ! 592: break; ! 593: ! 594: default: ! 595: return (WinDefWindowProc( hwnd, msg, mp1, mp2 ) ); ! 596: break; ! 597: } ! 598: return 0L; ! 599: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.