|
|
1.1 root 1: /*-------------------------------------------
2: STARFILL.C -- Alternate and Winding Modes
3: --------------------------------------------*/
4:
5: #define INCL_GPI
6: #include <os2.h>
7:
8: MRESULT EXPENTRY ClientWndProc (HWND, USHORT, MPARAM, MPARAM) ;
9:
10: int main (void)
11: {
12: static CHAR szClientClass [] = "StarFill" ;
13: static ULONG flFrameFlags = FCF_TITLEBAR | FCF_SYSMENU |
14: FCF_SIZEBORDER | FCF_MINMAX |
15: FCF_SHELLPOSITION | FCF_TASKLIST ;
16: HAB hab ;
17: HMQ hmq ;
18: HWND hwndFrame, hwndClient ;
19: QMSG qmsg ;
20:
21: hab = WinInitialize (0) ;
22: hmq = WinCreateMsgQueue (hab, 0) ;
23:
24: WinRegisterClass (hab, szClientClass, ClientWndProc, CS_SIZEREDRAW, 0) ;
25:
26: hwndFrame = WinCreateStdWindow (HWND_DESKTOP, WS_VISIBLE,
27: &flFrameFlags, szClientClass,
28: " - Alternate and Winding",
29: 0L, NULL, 0, &hwndClient) ;
30:
31: while (WinGetMsg (hab, &qmsg, NULL, 0, 0))
32: WinDispatchMsg (hab, &qmsg) ;
33:
34: WinDestroyWindow (hwndFrame) ;
35: WinDestroyMsgQueue (hmq) ;
36: WinTerminate (hab) ;
37: return 0 ;
38: }
39:
40: MRESULT EXPENTRY ClientWndProc (HWND hwnd, USHORT msg, MPARAM mp1, MPARAM mp2)
41: {
42: static POINTL aptlStar[5] = {-59,-81, 0,100, 59,-81, -95,31, 95,31 } ;
43: static SHORT cxClient, cyClient ;
44: HPS hps ;
45: POINTL aptl[5] ;
46: SHORT sIndex ;
47:
48: switch (msg)
49: {
50: case WM_SIZE:
51: cxClient = SHORT1FROMMP (mp2) ;
52: cyClient = SHORT2FROMMP (mp2) ;
53: return 0 ;
54:
55: case WM_PAINT:
56: hps = WinBeginPaint (hwnd, NULL, NULL) ;
57: GpiErase (hps) ;
58: GpiSetPattern (hps, PATSYM_HALFTONE) ;
59:
60: /*---------------------
61: Alternate Fill Mode
62: ---------------------*/
63:
64: for (sIndex = 0 ; sIndex < 5 ; sIndex++)
65: {
66: aptl[sIndex].x = cxClient / 4 + cxClient *
67: aptlStar[sIndex].x / 400 ;
68: aptl[sIndex].y = cyClient / 2 + cyClient *
69: aptlStar[sIndex].y / 200 ;
70: }
71:
72: GpiBeginArea (hps, BA_NOBOUNDARY | BA_ALTERNATE) ;
73: GpiMove (hps, aptl) ;
74: GpiPolyLine (hps, 4L, aptl + 1) ;
75: GpiEndArea (hps) ;
76:
77: /*-------------------
78: Winding Fill Mode
79: -------------------*/
80:
81: for (sIndex = 0 ; sIndex < 5 ; sIndex++)
82: aptl[sIndex].x += cxClient / 2 ;
83:
84: GpiBeginArea (hps, BA_NOBOUNDARY | BA_WINDING) ;
85: GpiMove (hps, aptl) ;
86: GpiPolyLine (hps, 4L, aptl + 1) ;
87: GpiEndArea (hps) ;
88:
89: WinEndPaint (hps) ;
90: return 0 ;
91: }
92: return WinDefWindowProc (hwnd, msg, mp1, mp2) ;
93: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.