|
|
1.1 ! root 1: /*---------------------------------------- ! 2: VECTFONT.C -- Vector Font Demo Program ! 3: ----------------------------------------*/ ! 4: ! 5: #define INCL_WIN ! 6: #define INCL_GPI ! 7: #include <os2.h> ! 8: #include "vectfont.h" ! 9: ! 10: MRESULT CALLBACK ClientWndProc (HWND, USHORT, MPARAM, MPARAM) ; ! 11: ! 12: HAB hab ; ! 13: ! 14: int main (void) ! 15: { ! 16: static CHAR szClientClass [] = "VectFont" ; ! 17: static ULONG flFrameFlags = FCF_TITLEBAR | FCF_SYSMENU | ! 18: FCF_SIZEBORDER | FCF_MINMAX | ! 19: FCF_SHELLPOSITION | FCF_TASKLIST | ! 20: FCF_MENU ; ! 21: HMQ hmq ; ! 22: HWND hwndFrame, hwndClient ; ! 23: QMSG qmsg ; ! 24: ! 25: hab = WinInitialize (0) ; ! 26: hmq = WinCreateMsgQueue (hab, 0) ; ! 27: ! 28: WinRegisterClass (hab, szClientClass, ClientWndProc, ! 29: CS_SIZEREDRAW, 0) ; ! 30: ! 31: hwndFrame = WinCreateStdWindow (HWND_DESKTOP, WS_VISIBLE, ! 32: &flFrameFlags, szClientClass, ! 33: " - Vector Font Demo", 0L, ! 34: NULL, ID_RESOURCE, &hwndClient) ; ! 35: ! 36: WinSendMsg (hwndFrame, WM_SETICON, ! 37: WinQuerySysPointer (HWND_DESKTOP, SPTR_APPICON, FALSE), ! 38: NULL) ; ! 39: ! 40: while (WinGetMsg (hab, &qmsg, NULL, 0, 0)) ! 41: WinDispatchMsg (hab, &qmsg) ; ! 42: ! 43: WinDestroyWindow (hwndFrame) ; ! 44: WinDestroyMsgQueue (hmq) ; ! 45: WinTerminate (hab) ; ! 46: return 0 ; ! 47: } ! 48: ! 49: MRESULT CALLBACK ClientWndProc (HWND hwnd, USHORT msg, MPARAM mp1, ! 50: MPARAM mp2) ! 51: { ! 52: static struct { ! 53: SHORT idCmd ; ! 54: VOID (*fn) (HPS, LONG, LONG) ; ! 55: } ! 56: vectfont [] = { ! 57: IDM_NOTHING, NULL, ! 58: IDM_24POINT, Display_24Point, ! 59: IDM_MIRROR, Display_Mirror, ! 60: IDM_STRETCH, Display_Stretch, ! 61: IDM_CHARANGLE, Display_CharAngle, ! 62: IDM_ROTATE, Display_Rotate, ! 63: IDM_CHARSHEAR, Display_CharShear, ! 64: IDM_SHADOW, Display_Shadow, ! 65: IDM_HOLLOW, Display_Hollow, ! 66: IDM_DROPSHADOW, Display_DropShadow, ! 67: IDM_BLOCK, Display_Block, ! 68: IDM_NEON, Display_Neon, ! 69: IDM_FADE, Display_Fade, ! 70: IDM_SPOKES, Display_Spokes, ! 71: IDM_WAVY, Display_Wavy, ! 72: IDM_MODSPOKES, Display_ModSpokes ! 73: } ; ! 74: static HDC hdc ; ! 75: static HPS hps ; ! 76: static HWND hwndMenu ; ! 77: static POINTL ptlClient ; ! 78: static SHORT sNumRoutines = sizeof vectfont / sizeof vectfont[0], ! 79: sDisplay = IDM_NOTHING ; ! 80: INT i ; ! 81: RECTL rcl ; ! 82: SIZEL sizl ; ! 83: ! 84: switch (msg) ! 85: { ! 86: case WM_CREATE: ! 87: hdc = WinOpenWindowDC (hwnd) ; ! 88: ! 89: // Create PS use Twips page units ! 90: sizl.cx = 0 ; ! 91: sizl.cy = 0 ; ! 92: hps = GpiCreatePS (hab, hdc, &sizl, ! 93: PU_TWIPS | GPIF_DEFAULT | ! 94: GPIT_MICRO | GPIA_ASSOC) ; ! 95: ! 96: // Adjust Page Viewport for points ! 97: ! 98: GpiQueryPageViewport (hps, &rcl) ; ! 99: rcl.xRight *= 20 ; ! 100: rcl.yTop *= 20 ; ! 101: GpiSetPageViewport (hps, &rcl) ; ! 102: ! 103: hwndMenu = WinWindowFromID ( ! 104: WinQueryWindow (hwnd, QW_PARENT, FALSE), ! 105: FID_MENU) ; ! 106: return 0 ; ! 107: ! 108: case WM_SIZE: ! 109: ptlClient.x = SHORT1FROMMP (mp2) ; // client width ! 110: ptlClient.y = SHORT2FROMMP (mp2) ; // client height ! 111: ! 112: GpiConvert (hps, CVTC_DEVICE, CVTC_PAGE, 1L, &ptlClient); ! 113: return 0 ; ! 114: ! 115: case WM_COMMAND: ! 116: for (i = 0 ; i < sNumRoutines ; i++) ! 117: if (COMMANDMSG(&msg)->cmd == vectfont[i].idCmd) ! 118: { ! 119: if (sDisplay == COMMANDMSG(&msg)->cmd) ! 120: return 0 ; ! 121: ! 122: WinSendMsg (hwndMenu, MM_SETITEMATTR, ! 123: MPFROM2SHORT (sDisplay, TRUE), ! 124: MPFROM2SHORT (MIA_CHECKED, 0)) ; ! 125: ! 126: sDisplay = COMMANDMSG(&msg)->cmd ; ! 127: ! 128: WinSendMsg (hwndMenu, MM_SETITEMATTR, ! 129: MPFROM2SHORT (sDisplay, TRUE), ! 130: MPFROM2SHORT (MIA_CHECKED, ! 131: MIA_CHECKED)) ; ! 132: ! 133: WinInvalidateRect (hwnd, NULL, FALSE) ; ! 134: return 0 ; ! 135: } ! 136: break ; ! 137: ! 138: case WM_PAINT: ! 139: WinBeginPaint (hwnd, hps, NULL) ; ! 140: GpiErase (hps) ; ! 141: // Display hourglass pointer ! 142: ! 143: WinSetPointer (HWND_DESKTOP, ! 144: WinQuerySysPointer (HWND_DESKTOP,SPTR_WAIT,FALSE)); ! 145: ! 146: if (!WinQuerySysValue (HWND_DESKTOP, SV_MOUSEPRESENT)) ! 147: WinShowPointer (HWND_DESKTOP, TRUE) ; ! 148: ! 149: // Execute font routine ! 150: ! 151: for (i = 0 ; i < sNumRoutines ; i++) ! 152: if (sDisplay == vectfont[i].idCmd) ! 153: { ! 154: if (vectfont[i].fn != NULL) ! 155: { ! 156: GpiSavePS (hps) ; ! 157: vectfont[i].fn (hps, ptlClient.x, ! 158: ptlClient.y) ; ! 159: GpiRestorePS (hps, -1L) ; ! 160: } ! 161: break ; ! 162: } ! 163: // Display arrow pointer ! 164: ! 165: if (!WinQuerySysValue (HWND_DESKTOP, SV_MOUSEPRESENT)) ! 166: WinShowPointer (HWND_DESKTOP, FALSE) ; ! 167: ! 168: WinSetPointer (HWND_DESKTOP, ! 169: WinQuerySysPointer (HWND_DESKTOP,SPTR_ARROW,FALSE)); ! 170: ! 171: WinEndPaint (hps) ; ! 172: return 0 ; ! 173: ! 174: case WM_DESTROY: ! 175: GpiDestroyPS (hps) ; ! 176: return 0 ; ! 177: } ! 178: return WinDefWindowProc (hwnd, msg, mp1, mp2) ; ! 179: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.