|
|
1.1 root 1: /*--------------------------------------------
2: DRAWLINE.C -- Draw line from radio buttons
3: --------------------------------------------*/
4:
5: #define INCL_WIN
6: #define INCL_GPI
7: #include <os2.h>
8:
9: MRESULT EXPENTRY ClientWndProc (HWND, USHORT, MPARAM, MPARAM) ;
10:
11: int main (void)
12: {
13: static CHAR szClientClass[] = "DrawLine" ;
14: static ULONG flFrameFlags = FCF_TITLEBAR | FCF_SYSMENU |
15: FCF_SIZEBORDER | FCF_MINMAX |
16: FCF_SHELLPOSITION | FCF_TASKLIST ;
17: HAB hab ;
18: HMQ hmq ;
19: HWND hwndFrame, hwndClient ;
20: QMSG qmsg ;
21:
22: hab = WinInitialize (0) ;
23: hmq = WinCreateMsgQueue (hab, 0) ;
24:
25: WinRegisterClass (hab, szClientClass, ClientWndProc, CS_SIZEREDRAW, 0) ;
26:
27: hwndFrame = WinCreateStdWindow (HWND_DESKTOP, WS_VISIBLE,
28: &flFrameFlags, szClientClass, NULL,
29: 0L, NULL, 0, &hwndClient) ;
30:
31: WinSendMsg (hwndFrame, WM_SETICON,
32: WinQuerySysPointer (HWND_DESKTOP, SPTR_APPICON, FALSE),
33: NULL) ;
34:
35: while (WinGetMsg (hab, &qmsg, NULL, 0, 0))
36: WinDispatchMsg (hab, &qmsg) ;
37:
38: WinDestroyWindow (hwndFrame) ;
39: WinDestroyMsgQueue (hmq) ;
40: WinTerminate (hab) ;
41: return 0 ;
42: }
43:
44: MRESULT EXPENTRY ClientWndProc (HWND hwnd, USHORT msg, MPARAM mp1, MPARAM mp2)
45: {
46: static CHAR *szGroupText[] = { "Color", "Type" } ;
47: static CHAR *szColorText[] = { "Background", "Blue", "Red",
48: "Pink", "Green", "Cyan",
49: "Yellow", "Neutral", "Dark Gray",
50: "Dark Blue", "Dark Red", "Dark Pink",
51: "Dark Green", "Dark Cyan", "Brown",
52: "Pale Gray" } ;
53: static CHAR *szTypeText [] = { "Dot", "Short Dash",
54: "Dash Dot", "Double Dot",
55: "Long Dash", "Dash Double Dot",
56: "Solid", "Invisible" } ;
57: static HWND hwndGroup[2], hwndRadioColor[8], hwndRadioType[8] ;
58: static POINTL aptl[5] ;
59: static SHORT sCurrentColor = 7, // Neutral
60: sCurrentType = 6 ; // Solid
61: FONTMETRICS fm ;
62: HPS hps ;
63: SHORT s, id, cxChar, cyChar ;
64:
65: switch (msg)
66: {
67: case WM_CREATE :
68: hps = WinGetPS (hwnd) ;
69: GpiQueryFontMetrics (hps, (LONG) sizeof fm, &fm) ;
70: cxChar = (SHORT) fm.lAveCharWidth ;
71: cyChar = (SHORT) fm.lMaxBaselineExt ;
72: WinReleasePS (hps) ;
73:
74: for (s = 0 ; s < 2 ; s++)
75:
76: hwndGroup[s] = WinCreateWindow (
77: hwnd, // Parent
78: WC_STATIC, // Class
79: szGroupText[s], // Text
80: WS_VISIBLE | // Style
81: SS_GROUPBOX,
82: (8 + 42 * s) * cxChar,
83: 4 * cyChar, // Position
84: (26 + 12 * (1 - s)) *
85: cxChar, // Width
86: 14 * cyChar, // Height
87: hwnd, // Owner
88: HWND_TOP, // Placement
89: s + 24, // ID
90: NULL, // Ctrl Data
91: NULL) ; // Pres Params
92:
93: for (s = 0 ; s < 16 ; s++)
94:
95: hwndRadioColor[s] = WinCreateWindow (
96: hwnd, // Parent
97: WC_BUTTON, // Class
98: szColorText[s], // Text
99: WS_VISIBLE | // Style
100: BS_RADIOBUTTON,
101: (10 + (s > 7 ? 18 : 0))
102: * cxChar, // X Position
103: (31 - 3 * (s % 8))
104: * cyChar / 2, // Y Position
105: 16 * cxChar, // Width
106: 3 * cyChar / 2, // Height
107: hwnd, // Owner
108: HWND_BOTTOM, // Placement
109: s, // ID
110: NULL, // Ctrl Data
111: NULL) ; // Pres Params
112:
113: for (s = 0 ; s < 8 ; s++)
114:
115: hwndRadioType[s] = WinCreateWindow (
116: hwnd, // Parent
117: WC_BUTTON, // Class
118: szTypeText[s], // Text
119: WS_VISIBLE | // Style
120: BS_RADIOBUTTON,
121: 52 * cxChar, // Position
122: (31 - 3 * s) * cyChar / 2,
123: 22 * cxChar, // Width
124: 3 * cyChar / 2, // Height
125: hwnd, // Owner
126: HWND_BOTTOM, // Placement
127: s + 16, // ID
128: NULL, // Ctrl Data
129: NULL) ; // Pres Params
130:
131: WinSendMsg (hwndRadioColor[sCurrentColor],
132: BM_SETCHECK, MPFROMSHORT (1), NULL) ;
133:
134: WinSendMsg (hwndRadioType[sCurrentType],
135: BM_SETCHECK, MPFROMSHORT (1), NULL) ;
136:
137: aptl[0].x = aptl[3].x = aptl[4].x = 4 * cxChar ;
138: aptl[1].x = aptl[2].x = 80 * cxChar ;
139:
140: aptl[0].y = aptl[1].y = aptl[4].y = 2 * cyChar ;
141: aptl[2].y = aptl[3].y = 20 * cyChar ;
142:
143: return 0 ;
144:
145: case WM_CONTROL:
146: id = SHORT1FROMMP (mp1) ;
147:
148: if (id < 16) // Color IDs
149: {
150: WinSendMsg (hwndRadioColor[sCurrentColor],
151: BM_SETCHECK, MPFROMSHORT (0), NULL) ;
152:
153: sCurrentColor = id ;
154:
155: WinSendMsg (hwndRadioColor[sCurrentColor],
156: BM_SETCHECK, MPFROMSHORT (1), NULL) ;
157: }
158:
159: else if (id < 24) // Line Type IDs
160: {
161: WinSendMsg (hwndRadioType[sCurrentType],
162: BM_SETCHECK, MPFROMSHORT (0), NULL) ;
163:
164: sCurrentType = id - 16 ;
165:
166: WinSendMsg (hwndRadioType[sCurrentType],
167: BM_SETCHECK, MPFROMSHORT (1), NULL) ;
168: }
169: WinInvalidateRect (hwnd, NULL, TRUE) ;
170: return 0 ;
171:
172: case WM_PAINT:
173: hps = WinBeginPaint (hwnd, NULL, NULL) ;
174: GpiErase (hps) ;
175:
176: GpiSetColor (hps, (LONG) sCurrentColor) ;
177: GpiSetLineType (hps, sCurrentType + LINETYPE_DOT) ;
178: GpiMove (hps, aptl) ;
179: GpiPolyLine (hps, 4L, aptl + 1) ;
180:
181: WinEndPaint (hps) ;
182: return 0 ;
183: }
184: return WinDefWindowProc (hwnd, msg, mp1, mp2) ;
185: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.