|
|
1.1 root 1: /****************************************************************************
2:
3: PROGRAM: line.c Created by Microsoft Corp., 1988
4:
5: PURPOSE: Demonstrate the color, line, arc, and retained
6: drawing capabilities of the MS OS/2 Presentation Manager.
7:
8: FUNCTIONS:
9: GENERICWNDPROC
10: ABOUT
11: ARCPDLGPROC
12: FIL_S_DLGPROC
13:
14:
15: COMMENTS:
16: This code demonstrates some of the features of GPI, the Graphics
17: Programming Interface for MS OS/2. The user interface consists of
18: menus, dialogs, and message boxes.
19:
20: You can use menu selections to:
21:
22: o Erase the current screen contents
23: o Open a segment for retained drawing
24: o Save a segments contents
25: o Display a series of segments
26: o Select line widths ranging from 2 to 50 pels
27: o Select a line color from one of the 16 default colors
28: o Select a line-end style
29: o Select a line-join style
30: o Select a foreground line mix mode
31: o Plot an x- and y-axis for arc and ellipse drawing
32: o Draw 3 types of arcs
33: o Collect points for fillet and spline drawings
34: o Draw fillets and splines
35:
36: You can draw lines by pressing the left-most mouse button and
37: dragging the mouse.
38:
39: You can collect points for fillets and splines by clicking the
40: leftmost button when the mouse cursor is at the appropriate
41: position in the window's client area.
42:
43:
44:
45:
46: ****************************************************************************/
47: #include "line.h"
48:
49: HAB hab; /* handle to the anchor block */
50: HMQ hmq; /* handle to the message queue */
51: HPS hps; /* handle to the presentation space */
52: SIZEL page; /* ps pagesize */
53: HDC hdc; /* device context handle */
54: LONG width = 2; /* wide-line width */
55: POINTL point1, point2; /* pel points */
56: POINTL cur_pos, prev_pos, point; /* points used in tracking mouse */
57: LONG larray[4]; /* array of fillet sharpness values */
58: POINTL farray[20]; /* array fillet & spline params */
59: LONG m; /* full arc multiplier */
60: BOOL draw_full_arc, draw_geom_line, collect_points, geom_line_flag = 1;
61: LONG seg_num=0; /* unique segment identifier */
62: LONG i,j, point_count; /* loop counter */
63: POINTL parray[4] = { 10,10, 50,50, 200,10, 10,10 };
64: LONG bflWinStyle; /* window style */
65: CHAR str[80]; /* char string from sprintf */
66: LINEBUNDLE pbundle; /* attribute bundle pointer */
67: SHORT lP, lQ, lR, lS; /* temporary arc parameters */
68: ARCPARAMS arcparams; /* arc parameters */
69: POINTL arc_array[2] = {450, 150, 550, 100}; /* params for point arc */
70:
71:
72: CHAR szClassName[] = "Line"; /* window class name */
73: HWND hwndClient; /* handle to the client */
74: HWND hwndFrame; /* handle to the frame window */
75: QMSG qmsg; /* message queue structure */
76:
77: VOID cdecl main() {
78: hab = WinInitialize(NULL);
79: hmq = WinCreateMsgQueue(hab, 0);
80: if (!WinRegisterClass(hab, szClassName, GenericWndProc, CS_SIZEREDRAW, 0))
81: DosExit(EXIT_PROCESS, 1);
82: bflWinStyle = FCF_SYSMENU | FCF_TITLEBAR | FCF_SIZEBORDER | FCF_MINMAX |
83: FCF_MENU;
84: if (!(hwndFrame = WinCreateStdWindow(HWND_DESKTOP, 0L, &bflWinStyle,
85: szClassName, "Line Graphics", 0L, NULL, ID_RESOURCE, &hwndClient)))
86: DosExit(EXIT_PROCESS, 1);
87: WinSetWindowPos(hwndFrame, NULL, 0, 0, 639, 349,
88: SWP_SIZE | SWP_MOVE | SWP_SHOW);
89:
90: /* obtain a handle to a window DC */
91: hdc = WinOpenWindowDC(hwndClient);
92:
93: /* create a ps */
94: hps = GpiCreatePS (hab, /* handle to anchor block */
95: hdc, /* handle to window DC */
96: &page, /* page size is 0 by 0 */
97: PU_PELS | GPIA_ASSOC); /* map 1 world coordinate to 1
98: * pel, associate the new ps
99: * with hdc
100: */
101:
102: GpiSetMarker(hps, MARKSYM_SMALLCIRCLE);
103:
104: while (WinGetMsg(hab, &qmsg, NULL, 0, 0))
105: WinDispatchMsg(hab, &qmsg);
106:
107:
108: WinDestroyWindow(hwndFrame);
109: WinDestroyMsgQueue(hmq);
110: WinTerminate(hab);
111: DosExit(EXIT_PROCESS, 0);
112: }
113:
114: /****************************************************************************
115:
116: FUNCTION: GenericWndProc(HWND, USHORT, MPARAM, MPARAM)
117:
118: PURPOSE: Processes messages
119:
120: MESSAGES:
121:
122: WM_COMMAND - input received
123: WM_PAINT - paint the window
124:
125: ****************************************************************************/
126:
127: MRESULT FAR PASCAL GenericWndProc(hwnd, usMessage, mp1, mp2)
128: HWND hwnd;
129: USHORT usMessage;
130: MPARAM mp1;
131: MPARAM mp2;
132: {
133: RECTL rcl;
134: HWND hMenu; /* handle to the System menu */
135: POINTL point1, point2; /* point structures */
136: RECTL rect; /* rect structure */
137: CHAR str[126]; /* array of characters */
138: HPS hgpi; /* special ps for repainting */
139:
140: switch (usMessage) {
141: case WM_COMMAND:
142: switch (LOUSHORT (mp1)) {
143:
144: /*
145: * ABOUT menu case statement
146: */
147: case IDM_ABOUT:
148: WinDlgBox(HWND_DESKTOP, hwndFrame, About, NULL, ID_ABOUT,
149: NULL);
150: return 0L;
151:
152: /*
153: * LINE menu case statement
154: */
155: case IDM_DR_LINE:
156: geom_line_flag = TRUE;
157: collect_points = FALSE;
158: return 0L;
159:
160: /*
161: * ARC menu case statements
162: */
163: case IDM_AR_PARM: /* display arc param dialog box */
164: WinDlgBox(HWND_DESKTOP,
165: hwndFrame,
166: (PFNWP)ArcPDlgProc,
167: NULL,
168: IDDLG_ARCP,
169: NULL);
170: return 0L;
171: case IDM_AR_AXIS: /* draw cartesian coord system */
172: point1.x = 500; point1.y = 200;
173: GpiMove(hps, &point1);
174: DrawAxis(hps, &point1);
175: return 0L;
176: case IDM_AR_FULL: /* draw a full arc */
177: point1.x = 500; point1.y = 200;
178: GpiMove(hps, &point1);
179: GpiFullArc(hps, DRO_OUTLINE, 50L * 65536L);
180: return 0L;
181: case IDM_AR_3PNT: /* draw a 3 point arc */
182: point1.x = 500; point1.y = 200;
183: GpiMove(hps, &point1);
184: GpiPointArc(hps, arc_array);
185: return 0L;
186: case IDM_AR_PRTL: /* draw a partial arc */
187: point1.x = 500; point1.y = 200;
188: GpiPartialArc(hps,
189: &point1, /* arc's center */
190: 50L * 65536L,/* radii multiplier */
191: 0L, /* start angle=0 * 65536 */
192: 5898240L); /* sweep angle=90 * 65536 */
193: return 0L;
194: case IDM_AR_CPNT: /* collect points for fillet or spline */
195: draw_geom_line = FALSE;
196: geom_line_flag = FALSE;
197: collect_points = TRUE;
198: i = 0;
199: return 0L;
200: case IDM_AR_SPLN: /* draw spline using collected points */
201: collect_points = FALSE;
202: if (!(j = --i % 3)){ /* check for mult. of 3 points */
203: j = i; /* set up j for polyspline call */
204: for (i = 0; i<=j; i++){ /* shift elements */
205: farray[i].x = farray[i+1].x;
206: farray[i].y = farray[i+1].y;
207: }
208: farray[i].x = farray[i+1].x; farray[i].y = farray[i+1].y;
209: GpiQueryCurrentPosition(hps, &cur_pos);
210: GpiPolySpline(hps, j, farray);
211: for (i = 0; i<=j; i++){
212: farray[i].x = 0;
213: farray[i].y = 0;
214: }
215: i = 0;
216: }
217: else
218: {
219: sprintf(str,"((Number_of_Points - 1) mod 3) != 0");
220: WinMessageBox(HWND_DESKTOP,
221: hwndClient,
222: str,
223: "Try Again...",
224: 0,
225: MB_OK);
226: for (i = 0; i<20; i++){
227: farray[i].x = 0;
228: farray[i].y = 0;
229: }
230: i = 0;
231: }
232: return 0L;
233: case IDM_AR_SFLL: /* draw sharp fillet using collected pts */
234: collect_points = FALSE;
235: sprintf(str, "Plot 9 points. (If sharpness > 1, the fillet is a parabola, if sharpness < 0, the fillet is a hyperbola.) Four fillets will be drawn.");
236: WinMessageBox(HWND_DESKTOP,
237: hwndClient,
238: str,
239: "PolyFilletSharp",
240: 0,
241: MB_OK);
242: WinDlgBox(HWND_DESKTOP,
243: hwndFrame,
244: (PFNWP)Fil_S_DlgProc,
245: NULL,
246: IDDLG_FSDP,
247: NULL);
248: j = i; /* set up j for polyspline call */
249: for (i = 0; i<=j; i++){ /* shift elements */
250: farray[i].x = farray[i+1].x;
251: farray[i].y = farray[i+1].y;
252: }
253: GpiPolyFilletSharp(hps,--j, farray, larray);
254: for (i = 0; i<=j; i++){
255: farray[i].x = 0;
256: farray[i].y = 0;
257: }
258: i = 0;
259: return 0L;
260: case IDM_AR_FLLT: /* draw fillet using collected points */
261: collect_points = FALSE;
262: sprintf(str, "This selection will draw multiple fillets.");
263: WinMessageBox(HWND_DESKTOP,
264: hwndClient,
265: str,
266: "PolyFillet",
267: 0,
268: MB_OK);
269: GpiPolyFillet(hps,i, farray);
270: for (i = 0; i<20; i++){
271: farray[i].x = 0;
272: farray[i].y = 0;
273: }
274: i = 0;
275: return 0L;
276:
277: /*
278: * QUERY menu case statement
279: */
280: case IDM_QUERY: /* query the line attributes */
281: QueryLBundle();
282: return 0L;
283:
284: /*
285: * WIDTH menu case statments
286: */
287: case IDM_WI_2: /* set the line width to 2 pels */
288: width = 2;
289: return 0L;
290: case IDM_WI_5: /* set the line width to 5 pels */
291: width = 5;
292: return 0L;
293: case IDM_WI_10: /* set the line width to 10 pels */
294: width = 10;
295: return 0L;
296: case IDM_WI_15: /* set the line width to 15 pels */
297: width = 15;
298: return 0L;
299: case IDM_WI_20: /* set the line width to 20 pels */
300: width = 20;
301: return 0L;
302: case IDM_WI_25: /* set the line width to 25 pels */
303: width = 25;
304: return 0L;
305: case IDM_WI_50: /* set the line width to 50 pels */
306: width = 50;
307: return 0L;
308:
309: /*
310: * LINE END menu case statements
311: */
312: case IDM_LE_DEFAULT: /* set the lineend to default */
313: GpiSetLineEnd(hps, LINEEND_DEFAULT);
314: return 0L;
315: case IDM_LE_FLAT: /* set the lineend to flat */
316: GpiSetLineEnd(hps, LINEEND_FLAT);
317: return 0L;
318: case IDM_LE_SQUARE: /* set the lineend to square */
319: GpiSetLineEnd(hps, LINEEND_SQUARE);
320: return 0L;
321: case IDM_LE_ROUND: /* set the lineend to round */
322: GpiSetLineEnd(hps, LINEEND_ROUND);
323: return 0L;
324:
325: /*
326: * LINE JOIN menu case statments
327: */
328: case IDM_LI_DEFAULT: /* set the linejoin to default */
329: GpiSetLineJoin(hps, LINEJOIN_DEFAULT);
330: return 0L;
331: case IDM_LI_BEVEL:
332: GpiSetLineJoin(hps, LINEJOIN_BEVEL);
333: return 0L;
334: case IDM_LI_ROUND:
335: GpiSetLineJoin(hps, LINEJOIN_ROUND);
336: return 0L;
337: case IDM_LI_MITRE:
338: GpiSetLineJoin(hps, LINEJOIN_MITRE);
339: return 0L;
340:
341: /*
342: * COLOR menu case statments
343: */
344: case IDM_CO_BACKGROUND: /* set the color to background */
345: GpiSetColor(hps, CLR_BACKGROUND);
346: return 0L;
347: case IDM_CO_BLUE: /* set the color to blue */
348: GpiSetColor(hps, CLR_BLUE);
349: return 0L;
350: case IDM_CO_RED: /* set the color to red */
351: GpiSetColor(hps, CLR_RED);
352: return 0L;
353: case IDM_CO_PINK: /* set the color to pink */
354: GpiSetColor(hps, CLR_PINK);
355: return 0L;
356: case IDM_CO_GREEN: /* set the color to green */
357: GpiSetColor(hps, CLR_GREEN);
358: return 0L;
359: case IDM_CO_CYAN: /* set the color to cyan */
360: GpiSetColor(hps, CLR_CYAN);
361: return 0L;
362: case IDM_CO_YELLOW: /* set the color to yellow */
363: GpiSetColor(hps, CLR_YELLOW);
364: return 0L;
365: case IDM_CO_NEUTRAL: /* set the color to neutral */
366: GpiSetColor(hps, CLR_NEUTRAL);
367: return 0L;
368: case IDM_CO_DARKGRAY: /* set the color to darkgray */
369: GpiSetColor(hps, CLR_DARKGRAY);
370: return 0L;
371: case IDM_CO_PALEBLUE: /* set the color to paleblue */
372: GpiSetColor(hps, CLR_PALEBLUE);
373: return 0L;
374: case IDM_CO_PALERED: /* set the color to palered */
375: GpiSetColor(hps, CLR_PALERED);
376: return 0L;
377: case IDM_CO_PALEPINK: /* set the color to palepink */
378: GpiSetColor(hps, CLR_PALEPINK);
379: return 0L;
380: case IDM_CO_DARKGREEN: /* set the color to darkgreen */
381: GpiSetColor(hps, CLR_DARKGREEN);
382: return 0L;
383: case IDM_CO_DARKCYAN: /* set the color to darkcyan */
384: GpiSetColor(hps, CLR_DARKCYAN);
385: return 0L;
386: case IDM_CO_BROWN: /* set the color to brown */
387: GpiSetColor(hps, CLR_BROWN);
388: return 0L;
389: case IDM_CO_PALEGRAY: /* set the color to palegray */
390: GpiSetColor(hps, CLR_PALEGRAY);
391: return 0L;
392:
393: /*
394: * MIX MODE menu case statments
395: */
396: case IDM_MM_DEFAULT: /* set the mix mode to default */
397: GpiSetMix(hps, FM_DEFAULT);
398: return 0L;
399: case IDM_MM_OR: /* set the mix mode to or */
400: GpiSetMix(hps, FM_OR);
401: return 0L;
402: case IDM_MM_OVERPAINT: /* set the mix mode to overpaint */
403: GpiSetMix(hps, FM_OVERPAINT);
404: return 0L;
405: case IDM_MM_XOR: /* set the mix mode to xor */
406: GpiSetMix(hps, FM_XOR);
407: return 0L;
408: case IDM_MM_LEAVEALONE: /* set the mix mode to leavealone */
409: GpiSetMix(hps, FM_LEAVEALONE);
410: return 0L;
411: case IDM_MM_AND: /* set the mix mode to and */
412: GpiSetMix(hps, FM_AND);
413: return 0L;
414: case IDM_MM_SUBTRACT: /* set the mix mode to subtract */
415: GpiSetMix(hps, FM_SUBTRACT);
416: return 0L;
417: case IDM_MM_MASKSRCNOT: /* set the mixmode to masksrcnot */
418: GpiSetMix(hps, FM_MASKSRCNOT);
419: return 0L;
420: case IDM_MM_ZERO: /* set the mix mode to zero */
421: GpiSetMix(hps, FM_ZERO);
422: return 0L;
423: case IDM_MM_NOTMERGESRC: /* set the mix mode to notmergesrc */
424: GpiSetMix(hps, FM_NOTMERGESRC);
425: return 0L;
426: case IDM_MM_NOTXORSRC: /* set the mix mode to notxorsrc */
427: GpiSetMix(hps, FM_NOTXORSRC);
428: return 0L;
429: case IDM_MM_INVERT: /* set the mix mode to invert */
430: GpiSetMix (hps, FM_INVERT);
431: return 0L;
432: case IDM_MM_MERGESRCNOT: /* set the mix mode to mergesrcnot
433: GpiSetMix (hps, FM_MERGESRCNOT);
434: return 0L;
435: case IDM_MM_NOTCOPYSRC: /* setthe mix mode to notcopysrc */
436: GpiSetMix(hps, FM_NOTCOPYSRC);
437: return 0L;
438: case IDM_MM_MERGENOTSRC:/* set the mix mode to mergenotsrc */
439: GpiSetMix(hps, FM_MERGENOTSRC);
440: return 0L;
441: case IDM_MM_NOTMASKSRC: /* set the mix mode to notmasksrc */
442: GpiSetMix (hps, FM_NOTMASKSRC);
443: return 0L;
444: case IDM_MM_ONE: /* set the mix mode to one */
445: GpiSetMix(hps, FM_ONE);
446: return 0L;
447:
448: /*
449: * SCREEN menu case statement
450: */
451: case IDM_SC_ERASE: /* erase the screen */
452: WinQueryWindowRect(hwnd, &rcl);
453: WinFillRect(hps, &rcl, CLR_WHITE);
454: return 0L;
455:
456: /*
457: * SEGMENT menu case statements
458: */
459: case IDM_DR_DRAW1: /* open a segment for drawing */
460: GpiSetDrawingMode(hps,
461: DM_DRAWANDRETAIN);
462: GpiOpenSegment (hps,
463: ++seg_num);
464: GpiSetSegmentAttrs (hps, seg_num, ATTR_CHAINED, ATTR_ON);
465: return 0L;
466:
467: case IDM_DR_SAVE: /* close a segment and save its contents */
468: GpiCloseSegment (hps);
469: return 0L;
470:
471:
472: case IDM_DR_DRAW2: /* display all of the saved segments */
473: if (seg_num == 1)
474: GpiDrawSegment(hps, seg_num);
475: else
476: GpiDrawFrom(hps, 1L, seg_num);
477: return 0L;
478:
479: }
480: return 0L;
481:
482: /*
483: * User pressed the leftmost mouse button
484: */
485: case WM_BUTTON1DOWN: /*...and they're drawing or collecting points */
486: if (geom_line_flag){ /* drawing wide lines */
487: cur_pos.x = (LONG) LOUSHORT(mp1); /* get the x-coordinate of the current pos */
488: cur_pos.y = (LONG) HIUSHORT(mp1); /* get the y-coord of the current pos */
489: GpiMove (hps, &cur_pos); /* move to the current pos */
490: draw_geom_line = TRUE;
491: }
492: if (collect_points){ /* collecting points */
493: cur_pos.x = (LONG) LOUSHORT(mp1); /* get the x-coordinate of the current pos */
494: cur_pos.y = (LONG) HIUSHORT(mp1); /* get the y-coord of the current pos */
495: if (i == 0){
496: point.x = cur_pos.x; point.y = cur_pos.y;
497: }
498: farray[i].x = cur_pos.x; farray[i++].y = cur_pos.y;
499: GpiMarker(hps, &cur_pos);
500: GpiSetCurrentPosition(hps, &point);
501: }
502: return TRUE;
503:
504: /*
505: * User is dragging the mouse
506: */
507: case WM_MOUSEMOVE: /*...and their drawing */
508: if (draw_geom_line)
509: {
510: cur_pos.x = (LONG) LOUSHORT(mp1); /* get the x-coord for the mouse */
511: cur_pos.y = (LONG) HIUSHORT(mp1); /* get the y-coord for the mouse */
512: DrawWideLine(hps, cur_pos); /* draw the line */
513: return TRUE;
514: }
515: return FALSE;
516: /*
517: * User released the leftmost mouse button
518: */
519: case WM_BUTTON1UP: /*...stop all drawing */
520: draw_geom_line = FALSE;
521: return TRUE;
522:
523:
524: /*
525: * Paint the window
526: */
527: case WM_PAINT:
528: hgpi = WinBeginPaint(hwnd, NULL, NULL);
529: GpiErase(hgpi);
530: WinEndPaint(hgpi);
531: break;
532:
533: default:
534: return (WinDefWindowProc(hwnd, usMessage, mp1, mp2));
535: }
536: return (0L);
537: }
538:
539: /****************************************************************************
540:
541: FUNCTION: About(HWND, USHORT, MPARAM, MPARAM)
542:
543: PURPOSE: Processes messages for "About" dialog box
544:
545: MESSAGES:
546:
547: WM_COMMAND - Input received
548:
549: COMMENTS:
550:
551: Wait for user to click on "Ok" button, then close the dialog box.
552:
553: ****************************************************************************/
554:
555: MRESULT FAR PASCAL About(hwnd, usMessage, mp1, mp2)
556: HWND hwnd;
557: USHORT usMessage;
558: MPARAM mp1;
559: MPARAM mp2;
560: {
561: switch (usMessage) {
562: case WM_COMMAND:
563: switch (LOUSHORT(mp1)) {
564: case ID_OK:
565: WinDismissDlg(hwnd, 0);
566: break;
567: }
568: break;
569:
570: default:
571: return (WinDefDlgProc(hwnd, usMessage, mp1, mp2));
572: }
573: return (0L);
574: }
575:
576: /***************************************************************************
577:
578: FUNCTION: DrawWideLine
579:
580: PURPOSE: This function uses the coordinates of the cursor to draw
581: a line of specified width and color. (Note: since this is
582: a wide line, the drawing occurs within a path)
583:
584: ***************************************************************************/
585:
586: DrawWideLine(hps, cur_pos)
587: HPS hps;
588: POINTL cur_pos;
589: {
590: GpiSetLineWidthGeom(hps, width);
591: GpiBeginPath(hps, 1L); /* start a path */
592: GpiLine(hps, &cur_pos);
593: GpiEndPath(hps);
594: GpiModifyPath(hps,
595: 1L,
596: MPATH_STROKE);
597: GpiFillPath(hps,
598: 1L,
599: FPATH_ALTERNATE);
600: }
601:
602: /***************************************************************************
603:
604: FUNCTION: ArcParam Dlg Proc
605:
606: PURPOSE: This function processes the arc parameters and scaling factor
607: that the user enters.
608:
609: COMMENTS: The application uses these values when it draws a full arc,
610: a partial arc, or, a three-point arc.
611:
612: ***************************************************************************/
613:
614:
615: MRESULT FAR PASCAL ArcPDlgProc(hwnd, Msg, lParam1, lParam2)
616: HWND hwnd;
617: USHORT Msg;
618: MPARAM lParam1;
619: MPARAM lParam2;
620: {
621: switch (Msg)
622: {
623: case WM_COMMAND:
624: switch (LOUSHORT (lParam1))
625: {
626: case DM_QUIT:
627: WinDismissDlg(hwnd, FALSE);
628: break;
629: case DM_OK:
630: /*
631: * Capture lP
632: */
633: WinQueryDlgItemShort(hwnd,
634: DM_LP,
635: &lP,
636: 0);
637:
638: /*
639: * Capture lQ
640: */
641: WinQueryDlgItemShort(hwnd,
642: DM_LQ,
643: &lQ,
644: 0);
645:
646: /*
647: * Capture lR
648: */
649: WinQueryDlgItemShort(hwnd,
650: DM_LR,
651: &lR,
652: 0);
653:
654: /*
655: * Capture lS
656: */
657: WinQueryDlgItemShort(hwnd,
658: DM_LS,
659: &lS,
660: 0);
661: arcparams.lP = (LONG)(lP);
662: arcparams.lQ = (LONG)(lQ);
663: arcparams.lR = (LONG)(lR);
664: arcparams.lS = (LONG)(lS);
665:
666: GpiSetArcParams(hps, &arcparams);
667: WinDismissDlg(hwnd, TRUE);
668: break;
669: default:
670: break;
671: }
672: break;
673: default:
674: return WinDefDlgProc (hwnd, Msg, lParam1, lParam2);
675: }
676: return 0L;
677: }
678:
679:
680: /***************************************************************************
681:
682: FUNCTION: QueryLBundle
683:
684: PURPOSE: Query the line attribute structure and print attributes
685: in a message box
686:
687: ***************************************************************************/
688:
689: QueryLBundle()
690: {
691: GpiQueryAttrs(hps,
692: PRIM_LINE,
693: LBB_COLOR | LBB_MIX_MODE | LBB_WIDTH |
694: LBB_GEOM_WIDTH | LBB_TYPE | LBB_END |
695: LBB_JOIN,
696: &pbundle);
697:
698: sprintf(str, "Color %ld Mix %d C_Width %ld G_Width %ld Type %d End %d Join %d", pbundle.lColor, pbundle.usMixMode, pbundle.fxWidth, pbundle.lGeomWidth, pbundle.usType, pbundle.usEnd, pbundle.usJoin);
699:
700: WinMessageBox(HWND_DESKTOP,
701: hwndClient,
702: str,
703: "Line Attributes",
704: 0,
705: MB_OK);
706:
707: }
708:
709: /***************************************************************************
710:
711: FUNCTION: DrawAxis()
712:
713: PURPOSE: Plots a Graph that identifies origin for full arcs
714:
715: ***************************************************************************/
716:
717:
718: DrawAxis(hps, pOrigin)
719: HPS hps;
720: PPOINTL pOrigin;
721: {
722: POINTL start, end; /* points for axis plotting */
723: LONG color; /* old color */
724:
725: color = GpiQueryColor(hps);
726: GpiSetColor (hps, CLR_BLUE);
727: /* plot y-axis */
728: start.x = pOrigin->x; start.y = 600;
729: end.x = start.x; end.y = 5;
730: DrawLine(hps, &start, &end);
731:
732: /* plot x-axis */
733: start.x = 5; start.y = pOrigin->y;
734: end.x = 810; end.y = start.y;
735: DrawLine(hps, &start, &end);
736:
737: /* plot units along x-axis */
738: start.x = 300; start.y = 202;
739: end.x = 300; end.y = 198;
740: DrawLine(hps, &start, &end);
741:
742: start.x = 400; start.y = 202;
743: end.x = 400; end.y= 198;
744: DrawLine(hps, &start, &end);
745:
746: start.x = 600; start.y = 202;
747: end.x = 600; end.y = 198;
748: DrawLine(hps, &start, &end);
749:
750: start.x = 700; start.y = 202;
751: end.x = 700; end.y = 198;
752: DrawLine(hps, &start, &end);
753:
754: /* plot units along y-axis */
755: start.x = 497; start.y = 400;
756: end.x = 502; end.y = 400;
757: DrawLine(hps, &start, &end);
758:
759: start.x = 497; start.y = 300;
760: end.x = 502; end.y = 300;
761: DrawLine(hps, &start, &end);
762:
763: start.x = 497; start.y = 100;
764: end.x = 502; end.y = 100;
765: DrawLine(hps, &start, &end);
766:
767: GpiSetColor(hps, color);
768: }
769:
770: /***************************************************************************
771:
772: FUNCTION: DrawLine(start, end)
773:
774: PURPOSE: Draws a line from a starting point to an ending point
775:
776: ***************************************************************************/
777:
778: DrawLine(hps, pStart, pEnd)
779: HPS hps;
780: PPOINTL pStart;
781: PPOINTL pEnd;
782: {
783: POINTL start, end; /* start and end points */
784: start.x = pStart->x; start.y = pStart->y;
785: end.x = pEnd->x; end.y = pEnd->y;
786: GpiMove(hps, &start);
787: GpiLine(hps, &end);
788: }
789: MRESULT FAR PASCAL Fil_S_DlgProc(hwnd, Msg, lParam1, lParam2)
790: HWND hwnd;
791: USHORT Msg;
792: MPARAM lParam1;
793: MPARAM lParam2;
794: {
795: switch (Msg)
796: {
797: case WM_COMMAND:
798: switch (LOUSHORT (lParam1))
799: {
800: case DM_QUITF:
801: WinDismissDlg(hwnd, FALSE);
802: break;
803: case DM_OKF:
804: /*
805: * Capture Sharpness for Fillet1
806: */
807: WinQueryDlgItemShort(hwnd,
808: DM_S1,
809: &lP,
810: 1);
811:
812: /*
813: * Capture Sharpness for Fillet2
814: */
815: WinQueryDlgItemShort(hwnd,
816: DM_S2,
817: &lQ,
818: 1);
819:
820: /*
821: * Capture Sharpness for Fillet3
822: */
823: WinQueryDlgItemShort(hwnd,
824: DM_S3,
825: &lR,
826: 1);
827:
828: /*
829: * Capture Sharpness for Fillet4
830: */
831: WinQueryDlgItemShort(hwnd,
832: DM_S4,
833: &lS,
834: 1);
835: larray[0] = (LONG)(65536 * lP);
836: larray[1] = (LONG)(65536 * lQ);
837: larray[2] = (LONG)(65536 * lR);
838: larray[3] = (LONG)(65536 * lS);
839:
840: WinDismissDlg(hwnd, TRUE);
841: break;
842: default:
843: break;
844: }
845: break;
846: default:
847: return WinDefDlgProc (hwnd, Msg, lParam1, lParam2);
848: }
849: return 0L;
850: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.