1 /*
2 * Checkout program for the EMF library
3 * Copyright (C) 2002, 2003 lignum Computing, Inc. <dallenbarnett@users.sourceforge.net>
4 * $Id: check1.c 70 2015-11-21 21:14:35Z dallenbarnett $
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or
9 * (at your option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software
18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
19 *
20 */
21
22 #include <libEMF/emf.h>
23
24 static XFORM xform = { 2., 0., 0., 2., -3., -4. };
25
26 static POINT plarray[4] = { { -4, -3 }, { -2, -1 }, { 0, 1 }, { 2, 3 } };
27 static POINT plarrayl[4] = { { -400000, -300000 }, { -200000, -100000 },
28 { 0, 100000 }, { 200000, 300000 } };
29 static POINT pltoarray[4] = { { -10, -20 }, { -30, -40 }, { 50, 61 }, { 72, 83 } };
30 static POINT pltoarrayl[4] = { { -1000000, -2000000 }, { -3000000, -4000000 },
31 { 5000000, 6100000 }, { 7200000, 8300000 } };
32 static POINT pgarray[4] = {
33 { -400, -300 }, { -200, -100 }, { 0, 100 }, { 200, 300 }
34 };
35 static POINT pgarrayl[4] = {
36 { -40000000, -30000000 }, { -20000000, -10000000 },
37 { 0, 10000000 }, { 20000000, 30000000 }
38 };
39 static INT advances[7] = { 11, 22, 33, 44, 55, 66, 77 };
40 static POINT plplarray[7] = { { -101, -201 }, { -301, -401 }, { -501, -601 },
41 { 101, 201 }, { 301, 401 }, { 501, 601 }, { 701, 801 } };
42 static POINT plplarrayl[7] = { { -10100000, -20100000 }, { -30100000, -40100000 },
43 { -50100000, -60100000 },
44 { 10100000, 20100000 }, { 30100000, 40100000 },
45 { 50100000, 60100000 }, { 70100000, 80100000 } };
46 static INT plplsizes[2] = { 3, 4 };
47 static LOGPEN lpen = { PS_SOLID, {20,20}, RGB(0,0xff,0xff) };
48 static LOGBRUSH lbrush = { BS_HATCHED, RGB(0x0,0x0,0xff), HS_DIAGCROSS };
49
main(int argc,char * argv[])50 int main ( int argc, char* argv[] )
51 {
52 (void)argc;
53 (void)argv;
54
55 HWND desktop = GetDesktopWindow();
56 HDC dc = GetDC( desktop );
57
58 RECT size = { 0, 0, 10000, 20000 }; /* 10cm x 20cm */
59 PCSTR filename = "check1.emf";
60 PCSTR description = "Test metafile created\0with libEMF\0";
61
62 HENHMETAFILE mfh;
63 HDC metaDC = CreateEnhMetaFile( dc, filename, &size, description );
64
65 HPEN pen;
66 HBRUSH brush;
67 HFONT font;
68
69 FLOAT old_miter_limit;
70
71 SetViewportOrgEx( metaDC, 123, 456, 0 );
72 SetViewportExtEx( metaDC, 789, 1011, 0 );
73 ScaleViewportExtEx( metaDC, 1, 2, 1, 2, 0 );
74
75 SetWindowOrgEx( metaDC, 124, 248, 0 );
76 SetWindowExtEx( metaDC, 481, 812, 0 );
77 ScaleWindowExtEx( metaDC, 1, 2, 1, 2, 0 );
78
79 ModifyWorldTransform( metaDC, &xform, MWT_IDENTITY );
80 SetWorldTransform( metaDC, &xform );
81
82 SetTextColor( metaDC, RGB(0x12,0x34,0x56) );
83 SetTextAlign( metaDC, TA_CENTER+TA_BASELINE );
84 SetBkMode( metaDC, TRANSPARENT );
85 SetBkColor( metaDC, RGB(0x78,0x9a,0xbc) );
86 SetPolyFillMode( metaDC, WINDING );
87 SetMapMode( metaDC, MM_ANISOTROPIC );
88
89 SelectObject( metaDC, GetStockObject( WHITE_BRUSH ) );
90
91 MoveToEx( metaDC, 123, 456, 0 );
92 LineTo( metaDC, 789, 1011 );
93
94 Arc( metaDC, 12, 23, 34, 45, 56, 67, 78, 89 );
95 ArcTo( metaDC, 12, 23, 34, 45, 56, 67, 78, 89 );
96
97 Rectangle( metaDC, 98, 76, 54, 32 );
98 Ellipse( metaDC, 32, 54, 76, 98 );
99
100 SetMiterLimit( metaDC, 20.f, &old_miter_limit );
101 Polyline( metaDC, plarray, 4 );
102 Polyline( metaDC, plarrayl, 4 );
103 PolylineTo( metaDC, pltoarray, 4 );
104 PolylineTo( metaDC, pltoarrayl, 4 );
105 PolyBezier( metaDC, plarray, 4 );
106 PolyBezier( metaDC, plarrayl, 4 );
107 PolyBezierTo( metaDC, pltoarray, 4 );
108 PolyBezierTo( metaDC, pltoarrayl, 4 );
109 Polygon( metaDC, pgarray, 4 );
110 Polygon( metaDC, pgarrayl, 4 );
111 PolyPolygon( metaDC, plplarray, plplsizes, 2 );
112 PolyPolygon( metaDC, plplarrayl, plplsizes, 2 );
113
114 TextOut( metaDC, 50, 75, "A larger font, e?", 17 );
115 ExtTextOut( metaDC, 100, 200, ETO_GRAYED|ETO_CLIPPED, 0, "And now", 7, advances );
116
117 pen = CreatePenIndirect( &lpen );
118 SelectObject( metaDC, pen );
119 SelectObject( metaDC, GetStockObject( GRAY_BRUSH ) );
120 DeleteObject( GetStockObject( GRAY_BRUSH ) );
121
122 brush = CreateBrushIndirect( &lbrush );
123 SelectObject( metaDC, brush );
124
125 font = CreateFont( -11, 0, 0, 0, FW_BOLD, 0, 0, 0, ANSI_CHARSET,
126 OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY,
127 DEFAULT_PITCH | FF_DONTCARE, "Helvetica" );
128 SelectObject( metaDC, font );
129 DeleteObject( font );
130 DeleteObject( brush );
131 DeleteObject( pen );
132
133 BeginPath( metaDC );
134 EndPath( metaDC );
135 CloseFigure( metaDC );
136
137 FillPath( metaDC );
138 StrokePath( metaDC );
139 StrokeAndFillPath( metaDC );
140
141 SetPixel( metaDC, 123, 456, RGB(0x24,0x68,0xac) );
142
143 SaveDC( metaDC );
144 SetMetaRgn( metaDC );
145 RestoreDC( metaDC, 1 );
146
147 pen = ExtCreatePen( PS_SOLID, 1, &lbrush, 0, 0 );
148 SelectObject( metaDC, pen );
149 DeleteObject( pen );
150
151 mfh = CloseEnhMetaFile( metaDC );
152 DeleteEnhMetaFile( mfh );
153 DeleteDC( metaDC );
154
155 return 0;
156 }
157