============================================================================================================================================== OFFSET 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F ---------------------------------------------------------------------------------------------------------------------------------------------- 00000000 DB A5 2D 00 78 40 09 04 00 00 00 00 2D 00 00 00 00 00 00 00 00 00 00 00 80 01 00 00 14 3A 00 00 █Ñ-.x@○♦....-...........Ç☺..¶:.. 00000020 E6 45 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 56 38 00 00 00 00 00 00 3C 00 00 00 µE..................V8......<... 00000040 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 44 00 00 65 00 00 44 .........................D..e..D 00000060 00 00 65 00 65 44 00 00 00 00 65 44 00 00 00 00 65 44 00 00 00 00 65 44 00 00 00 00 65 44 00 00 ..e.eD....eD....eD....eD....eD.. 00000080 0E 00 73 44 00 00 66 00 D9 44 00 00 00 00 D9 44 00 00 00 00 D9 44 00 00 00 00 D9 44 00 00 10 00 ♫.sD..f.┘D....┘D....┘D....┘D..►. 000000A0 E9 44 00 00 0A 00 F3 44 00 00 16 00 D9 44 00 00 00 00 09 45 00 00 42 00 4B 45 00 00 00 00 4B 45 ΘD..◙.≤D..▬.┘D....○E..B.KE....KE 000000C0 00 00 16 00 61 45 00 00 00 00 61 45 00 00 00 00 61 45 00 00 00 00 61 45 00 00 00 00 61 45 00 00 ..▬.aE....aE....aE....aE....aE.. 000000E0 00 00 61 45 00 00 00 00 61 45 00 00 02 00 63 45 00 00 00 00 63 45 00 00 00 00 63 45 00 00 00 00 ..aE....aE..☻.cE....cE....cE.... 00000100 63 45 00 00 00 00 63 45 00 00 00 00 63 45 00 00 1E 00 81 45 00 00 34 00 B5 45 00 00 31 00 81 45 cE....cE....cE..▲.üE..4.╡E..1.üE 00000120 00 00 00 00 65 44 00 00 00 00 00 00 00 00 00 00 81 45 00 00 00 00 81 45 00 00 00 00 00 00 1E 00 ....eD..........üE....üE......▲. 00000140 1F 00 01 00 03 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ▼.☺.♥........................... 00000160 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................ 00000180 43 68 61 72 6C 65 73 20 50 65 74 7A 6F 6C 64 0D 0A 36 33 20 45 2E 20 39 74 68 20 53 74 2E 20 2D Charles Petzold♪◙63 E. 9th St. - 000001A0 2D 20 41 70 74 2E 20 31 30 2D 4E 0D 0A 4E 65 77 20 59 6F 72 6B 2C 20 4E 59 20 20 31 30 30 30 33 - Apt. 10-N♪◙New York, NY 10003 000001C0 0D 0A 0D 0A 32 31 32 2D 32 36 30 2D 33 36 39 38 0D 0A 0D 0A 4D 65 74 61 66 69 6C 65 73 2C 20 4D ♪◙♪◙212-260-3698♪◙♪◙Metafiles, M 000001E0 61 70 70 69 6E 67 20 4D 6F 64 65 73 2C 20 61 6E 64 20 54 72 61 6E 73 66 6F 72 6D 73 0D 0A 0D 0A apping Modes, and Transforms♪◙♪◙ 00000200 49 6E 20 74 68 65 20 6F 6C 64 65 6E 20 28 61 6E 64 20 6C 61 72 67 65 6C 79 20 61 63 61 64 65 6D In the olden (and largely academ 00000220 69 63 29 20 64 61 79 73 20 6F 66 20 63 6F 6D 70 75 74 65 72 20 67 72 61 70 68 69 63 73 20 74 68 ic) days of computer graphics th 00000240 65 6F 72 79 2C 20 69 74 20 77 61 73 20 61 73 73 75 6D 65 64 20 74 68 61 74 20 64 69 73 70 6C 61 eory, it was assumed that displa 00000260 79 20 73 75 72 66 61 63 65 73 20 77 65 72 65 20 63 6F 6E 74 69 6E 75 6F 75 73 6C 79 20 61 64 64 y surfaces were continuously add 00000280 72 65 73 73 61 62 6C 65 2E 20 20 54 68 65 72 65 20 77 65 72 65 20 6E 6F 20 73 75 63 68 20 6E 75 ressable. There were no such nu 000002A0 69 73 61 6E 63 65 73 20 61 73 20 70 69 78 65 6C 73 20 74 6F 20 69 6D 70 6F 73 65 20 6C 69 6D 69 isances as pixels to impose limi 000002C0 74 61 74 69 6F 6E 73 20 6F 6E 20 74 68 65 20 63 6F 6F 72 64 69 6E 61 61 74 65 20 61 64 64 72 65 tations on the coordinaate addre 000002E0 73 73 61 62 69 6C 69 74 79 20 6F 66 20 74 68 65 20 64 65 76 69 63 65 2E 0D 0A 0D 0A 49 6E 64 65 ssability of the device.♪◙♪◙Inde 00000300 65 64 2C 20 65 61 72 6C 79 20 76 69 64 65 6F 20 64 69 73 70 6C 61 79 73 20 77 65 72 65 20 76 65 ed, early video displays were ve 00000320 63 74 6F 72 20 64 65 76 69 63 65 73 20 72 61 74 68 65 72 20 74 68 61 6E 20 74 68 65 20 72 61 73 ctor devices rather than the ras 00000340 74 65 72 20 64 65 76 69 63 65 73 20 75 73 65 64 20 74 6F 64 61 79 2E 20 20 54 68 65 20 65 6C 65 ter devices used today. The ele 00000360 63 74 72 6F 6E 20 62 65 61 6D 20 63 6F 75 6C 64 20 62 65 20 6D 6F 76 65 64 20 69 6E 20 61 6E 79 ctron beam could be moved in any 00000380 20 74 79 70 65 20 6F 66 20 70 61 74 74 65 72 6E 20 69 6E 73 74 65 61 64 20 6F 66 20 62 65 69 6E type of pattern instead of bein 000003A0 67 20 63 6F 6E 66 69 6E 65 64 20 74 6F 20 73 77 65 65 70 73 20 6F 66 20 68 6F 72 69 7A 6F 6E 74 g confined to sweeps of horizont 000003C0 61 6C 20 6C 69 6E 65 73 2E 20 20 28 54 68 65 72 65 20 77 61 73 20 61 20 67 6F 6F 64 20 72 65 61 al lines. (There was a good rea 000003E0 73 6F 6E 20 66 6F 72 20 74 68 69 73 3A 20 20 52 61 73 74 65 72 20 64 69 73 70 6C 61 79 73 20 72 son for this: Raster displays r 00000400 65 71 75 69 72 65 20 6D 6F 72 65 20 6D 65 6D 6F 72 79 20 74 68 61 6E 20 76 65 63 74 6F 72 20 64 equire more memory than vector d 00000420 69 73 70 6C 61 79 73 2C 20 61 6E 64 20 6D 65 6D 6F 72 79 20 77 61 73 20 71 75 69 74 65 20 65 78 isplays, and memory was quite ex 00000440 70 65 6E 73 69 76 65 20 62 61 63 6B 20 74 68 65 6E 2E 29 20 20 4E 6F 77 61 64 61 79 73 2C 20 74 pensive back then.) Nowadays, t 00000460 68 65 20 6F 6E 6C 79 20 63 6F 6E 74 69 6E 75 6F 75 73 6C 79 2D 61 64 64 72 65 73 73 61 62 6C 65 he only continuously-addressable 00000480 20 67 72 61 70 68 69 63 73 20 64 69 73 70 6C 61 79 20 64 65 76 69 63 65 20 63 6F 6D 6D 6F 6E 6C graphics display device commonl 000004A0 79 20 75 73 65 64 20 69 73 20 74 68 65 20 70 65 6E 20 70 6C 6F 74 74 65 72 2C 20 61 6E 64 20 74 y used is the pen plotter, and t 000004C0 68 6F 73 65 20 61 72 65 20 71 75 69 63 6B 6C 79 20 62 65 63 6F 6D 69 6E 67 20 6F 62 73 6F 6C 65 hose are quickly becoming obsole 000004E0 74 65 20 77 69 74 68 20 74 68 65 20 77 69 64 65 73 70 72 65 61 64 20 61 76 61 69 6C 61 62 69 6C te with the widespread availabil 00000500 69 74 79 20 6F 66 20 69 6E 65 78 70 65 6E 73 69 76 65 20 63 6F 6C 6F 72 20 6C 61 73 65 72 20 70 ity of inexpensive color laser p 00000520 72 69 6E 74 65 72 73 2E 0D 0A 0D 0A 54 68 65 20 65 61 72 6C 79 20 74 68 65 6F 72 65 74 69 63 69 rinters.♪◙♪◙The early theoretici 00000540 61 6E 73 20 6F 66 20 63 6F 6D 70 75 74 65 72 20 67 72 61 70 68 69 63 73 20 6F 66 74 65 6E 20 63 ans of computer graphics often c 00000560 61 6D 65 20 66 72 6F 6D 20 61 20 62 61 63 6B 67 72 6F 75 6E 64 20 69 6E 20 6D 61 74 68 65 6D 61 ame from a background in mathema 00000580 74 69 63 73 2C 20 73 6F 20 74 68 65 79 20 74 65 6E 64 65 64 20 74 6F 20 74 68 69 6E 6B 20 6F 66 tics, so they tended to think of 000005A0 20 74 68 65 20 64 69 73 70 6C 61 79 20 61 73 20 61 20 68 61 72 64 77 61 72 65 20 69 6D 70 6C 65 the display as a hardware imple 000005C0 6D 65 6E 74 61 74 69 6F 6E 20 6F 66 20 61 20 72 65 63 74 61 6E 67 75 6C 61 72 20 28 6F 72 20 43 mentation of a rectangular (or C 000005E0 61 72 74 65 73 69 61 6E 29 20 63 6F 6F 72 64 69 6E 61 74 65 20 73 79 73 74 65 6D 2E 20 20 54 68 artesian) coordinate system. Th 00000600 65 20 6F 72 69 67 69 6E 20 77 6F 75 6C 64 20 62 65 20 69 6E 20 74 68 65 20 63 65 6E 74 65 72 20 e origin would be in the center 00000620 6F 66 20 74 68 65 20 64 69 73 70 6C 61 79 20 61 6E 64 20 63 6F 6F 72 64 69 6E 61 74 65 73 20 77 of the display and coordinates w 00000640 6F 75 6C 64 20 65 78 74 65 6E 64 20 66 6F 72 20 28 73 61 79 29 20 31 30 30 30 20 75 6E 69 74 73 ould extend for (say) 1000 units 00000660 20 68 6F 72 69 7A 6F 6E 74 61 6C 6C 79 20 6C 65 66 74 20 61 6E 64 20 72 69 67 68 74 2C 20 61 6E horizontally left and right, an 00000680 64 20 76 65 72 74 69 63 61 6C 6C 79 20 75 70 20 61 6E 64 20 64 6F 77 6E 2E 20 20 4F 66 20 63 6F d vertically up and down. Of co 000006A0 75 72 73 65 2C 20 6E 6F 74 68 69 6E 67 20 70 72 65 76 65 6E 74 65 64 20 79 6F 75 20 66 72 6F 6D urse, nothing prevented you from 000006C0 20 75 73 69 6E 67 20 66 72 61 63 74 69 6F 6E 61 6C 20 63 6F 6F 72 64 69 6E 61 74 65 73 2E 0D 0A using fractional coordinates.♪◙ 000006E0 0D 0A 54 68 65 73 65 20 64 61 79 73 2C 20 72 65 61 6C 2D 77 6F 72 6C 64 20 64 69 73 70 6C 61 79 ♪◙These days, real-world display 00000700 73 20 61 72 65 20 61 6C 6D 6F 73 74 20 61 6C 77 61 79 73 20 72 61 73 74 65 72 20 64 65 76 69 63 s are almost always raster devic 00000720 65 73 2E 20 20 42 6F 74 68 20 76 69 64 65 6F 20 64 69 73 70 6C 61 79 73 20 61 6E 64 20 6C 61 73 es. Both video displays and las 00000740 65 72 20 70 72 69 6E 74 65 72 73 20 68 61 76 65 20 61 20 64 69 73 63 72 65 74 65 20 70 69 78 65 er printers have a discrete pixe 00000760 6C 20 72 65 73 6F 6C 75 74 69 6F 6E 20 74 68 61 74 20 63 6F 6E 73 74 72 61 69 6E 73 20 74 68 65 l resolution that constrains the 00000780 20 61 64 64 72 65 73 73 61 62 69 6C 69 74 79 2E 0D 0A 0D 0A 54 6F 20 4D 61 70 20 6F 72 20 4E 6F addressability.♪◙♪◙To Map or No 000007A0 74 20 74 6F 20 4D 61 70 0D 0A 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 0D 0A t to Map♪◙--------------------♪◙ 000007C0 0D 0A 57 69 6E 64 6F 77 73 20 69 73 20 70 72 69 6D 61 72 69 6C 79 20 61 20 70 69 78 65 6C 2D 62 ♪◙Windows is primarily a pixel-b 000007E0 61 73 65 64 20 67 72 61 70 68 69 63 73 20 73 79 73 74 65 6D 2E 20 20 41 6E 64 20 62 65 63 61 75 ased graphics system. And becau 00000800 73 65 20 74 68 65 72 65 20 69 73 20 6E 6F 20 73 75 63 68 20 74 68 69 6E 67 20 61 73 20 61 20 66 se there is no such thing as a f 00000820 72 61 63 74 69 6F 6E 61 6C 20 70 69 78 65 6C 2C 20 74 68 61 74 20 61 6C 6C 6F 77 65 64 20 57 69 ractional pixel, that allowed Wi 00000840 6E 64 6F 77 73 20 74 6F 20 62 65 20 61 6E 20 69 6E 74 65 67 65 72 2D 62 61 73 65 64 20 73 79 73 ndows to be an integer-based sys 00000860 74 65 6D 2E 20 20 46 6F 72 20 70 72 6F 67 72 61 6D 6D 65 72 73 20 77 68 6F 20 70 72 65 66 65 72 tem. For programmers who prefer 00000880 72 65 64 20 74 6F 20 77 6F 72 6B 20 69 6E 20 61 72 62 69 74 72 61 72 79 20 75 6E 69 74 73 2C 20 red to work in arbitrary units, 000008A0 6F 72 20 74 68 65 20 6D 65 74 72 69 63 20 75 6E 69 74 73 20 6F 66 20 69 6E 63 68 65 73 20 6F 72 or the metric units of inches or 000008C0 20 6D 69 6C 6C 69 6D 65 74 65 72 73 2C 20 74 68 65 20 65 61 72 6C 79 20 64 65 73 69 67 6E 65 72 millimeters, the early designer 000008E0 73 20 6F 66 20 74 68 65 20 57 69 6E 64 6F 77 73 20 47 72 61 70 68 69 63 61 6C 20 44 65 76 69 63 s of the Windows Graphical Devic 00000900 65 20 49 6E 74 65 72 66 61 63 65 20 28 47 44 49 29 20 69 6E 74 72 6F 64 75 63 65 64 20 74 68 65 e Interface (GDI) introduced the 00000920 20 63 6F 6E 63 65 70 74 20 6F 66 20 74 68 65 20 6D 61 70 70 69 6E 67 20 6D 6F 64 65 2E 0D 0A 0D concept of the mapping mode.♪◙♪ 00000940 0A 54 68 65 20 6D 61 70 70 69 6E 67 20 6D 6F 64 65 20 69 73 20 73 69 6D 70 6C 79 20 61 20 63 6F ◙The mapping mode is simply a co 00000960 6F 72 64 69 6E 61 74 65 20 74 72 61 6E 73 66 6F 72 6D 20 74 68 61 74 20 69 6E 76 6F 6C 76 65 73 ordinate transform that involves 00000980 20 74 72 61 6E 73 6C 61 74 69 6F 6E 20 61 6E 64 20 73 63 61 6C 69 6E 67 2E 20 20 46 6F 72 20 65 translation and scaling. For e 000009A0 78 61 6D 70 6C 65 2C 20 77 68 65 6E 20 79 6F 75 20 73 65 6C 65 63 74 20 74 68 65 20 6D 61 70 70 xample, when you select the mapp 000009C0 69 6E 67 20 6D 6F 64 65 20 6F 66 20 4D 4D 5F 4C 4F 45 4E 47 4C 49 53 48 20 28 77 68 69 63 68 20 ing mode of MM_LOENGLISH (which 000009E0 6C 65 74 73 20 79 6F 75 20 64 72 61 77 20 69 6E 20 75 6E 69 74 73 20 6F 66 20 30 2E 30 31 20 69 lets you draw in units of 0.01 i 00000A00 6E 63 68 65 73 29 2C 20 47 44 49 20 73 65 74 73 20 75 70 20 61 20 73 63 61 6C 69 6E 67 20 66 61 nches), GDI sets up a scaling fa 00000A20 63 74 6F 72 20 74 68 61 74 20 69 73 20 65 66 66 65 63 74 69 76 65 6C 79 20 74 68 65 20 6E 75 6D ctor that is effectively the num 00000A40 62 65 72 20 6F 66 20 70 69 78 65 6C 73 20 69 6E 20 30 2E 30 31 20 69 6E 63 68 65 73 20 66 6F 72 ber of pixels in 0.01 inches for 00000A60 20 74 68 65 20 70 61 72 74 69 63 75 6C 61 72 20 64 65 76 69 63 65 2E 20 20 28 54 68 69 73 20 69 the particular device. (This i 00000A80 73 20 65 78 70 72 65 73 73 65 64 20 61 73 20 61 20 72 61 74 69 6F 20 6F 66 20 74 77 6F 20 69 6E s expressed as a ratio of two in 00000AA0 74 65 67 65 72 73 20 74 6F 20 61 76 6F 69 64 20 66 6C 6F 61 74 69 6E 67 20 70 6F 69 6E 74 20 63 tegers to avoid floating point c 00000AC0 61 6C 63 75 6C 61 74 69 6F 6E 73 2E 29 0D 0A 0D 0A 43 65 72 74 61 69 6E 6C 79 20 75 73 69 6E 67 alculations.)♪◙♪◙Certainly using 00000AE0 20 6D 61 70 70 69 6E 67 20 6D 6F 64 65 73 20 69 73 20 63 6F 6E 76 65 6E 69 65 6E 74 20 69 6E 20 mapping modes is convenient in 00000B00 73 6F 6D 65 20 63 61 73 65 73 2E 20 20 42 75 74 2C 20 61 73 20 49 27 76 65 20 6F 66 74 65 6E 20 some cases. But, as I've often 00000B20 64 65 6D 6F 6E 73 74 72 61 74 65 64 20 28 61 6E 64 20 61 73 20 72 65 63 65 6E 74 6C 79 20 61 73 demonstrated (and as recently as 00000B40 20 74 68 65 20 6C 61 73 74 20 69 73 73 75 65 29 2C 20 69 74 20 69 73 20 70 6F 73 73 69 62 6C 65 the last issue), it is possible 00000B60 20 74 6F 20 77 6F 72 6B 20 69 6E 20 75 6E 69 74 73 20 6F 66 20 69 6E 63 68 65 73 20 6F 72 20 6D to work in units of inches or m 00000B80 69 6C 6C 69 6D 65 74 65 72 73 20 77 69 74 68 6F 75 74 20 75 73 69 6E 67 20 6D 61 70 70 69 6E 67 illimeters without using mapping 00000BA0 20 6D 6F 64 65 73 2E 20 20 54 68 65 20 47 65 74 44 65 76 69 63 65 43 61 70 73 20 66 75 6E 63 74 modes. The GetDeviceCaps funct 00000BC0 69 6F 6E 20 67 69 76 65 73 20 79 6F 75 20 61 6C 6C 20 74 68 65 20 69 6E 66 6F 72 6D 61 74 69 6F ion gives you all the informatio 00000BE0 6E 20 79 6F 75 20 6E 65 65 64 20 74 6F 20 70 72 6F 70 65 72 6C 79 20 64 6F 20 79 6F 75 72 20 6F n you need to properly do your o 00000C00 77 6E 20 73 63 61 6C 69 6E 67 2E 0D 0A 0D 0A 41 6C 74 68 6F 75 67 68 20 49 27 6D 20 6F 62 76 69 wn scaling.♪◙♪◙Although I'm obvi 00000C20 6F 75 73 6C 79 20 6E 6F 74 20 70 72 69 76 79 20 74 6F 20 74 68 65 20 73 6F 75 72 63 65 20 63 6F ously not privy to the source co 00000C40 64 65 20 6F 66 20 6C 61 72 67 65 20 67 72 61 70 68 69 63 61 6C 20 61 70 70 6C 69 63 61 74 69 6F de of large graphical applicatio 00000C60 6E 73 2C 20 49 20 73 75 73 70 65 63 74 20 74 68 61 74 20 6D 6F 73 74 20 70 72 6F 67 72 61 6D 6D ns, I suspect that most programm 00000C80 65 72 73 20 6F 66 20 74 68 6F 73 65 20 61 70 70 6C 69 63 61 74 69 6F 6E 73 20 74 65 6E 64 20 74 ers of those applications tend t 00000CA0 6F 20 61 76 6F 69 64 20 74 68 65 20 6D 61 70 70 69 6E 67 20 6D 6F 64 65 73 20 6F 72 20 75 73 65 o avoid the mapping modes or use 00000CC0 20 74 68 65 6D 20 73 70 61 72 69 6E 67 6C 79 2E 20 20 41 66 74 65 72 20 61 6C 6C 2C 20 6C 65 74 them sparingly. After all, let 00000CE0 74 69 6E 67 20 47 44 49 20 64 6F 20 63 6F 6F 72 64 69 6E 61 74 65 20 73 63 61 6C 69 6E 67 20 69 ting GDI do coordinate scaling i 00000D00 6E 76 6F 6C 76 65 73 20 73 6F 6D 65 20 72 65 6C 69 6E 71 75 69 73 68 69 6E 67 20 6F 66 20 63 6F nvolves some relinquishing of co 00000D20 6E 74 72 6F 6C 2E 20 20 4D 61 6E 79 20 70 72 6F 67 72 61 6D 6D 65 72 73 20 64 6F 6E 27 74 20 6C ntrol. Many programmers don't l 00000D40 69 6B 65 20 74 6F 20 64 6F 20 74 68 61 74 2E 0D 0A 0D 0A 41 6C 73 6F 2C 20 6F 6E 63 65 20 61 20 ike to do that.♪◙♪◙Also, once a 00000D60 70 72 6F 67 72 61 6D 6D 65 72 20 65 6E 63 6F 75 6E 74 65 72 73 20 61 20 70 72 6F 62 6C 65 6D 20 programmer encounters a problem 00000D80 77 69 74 68 20 75 73 69 6E 67 20 6D 61 70 70 69 6E 67 20 6D 6F 64 65 73 2C 20 74 68 65 20 65 61 with using mapping modes, the ea 00000DA0 73 65 2D 6F 66 2D 75 73 65 20 69 73 73 75 65 20 69 73 20 69 72 72 65 6C 65 76 61 6E 74 2E 20 20 se-of-use issue is irrelevant. 00000DC0 4F 6E 65 20 73 75 63 68 20 70 72 6F 62 6C 65 6D 20 69 6E 76 6F 6C 76 65 73 20 53 63 72 6F 6C 6C One such problem involves Scroll 00000DE0 44 43 2C 20 77 68 69 63 68 20 73 63 72 6F 6C 6C 73 20 61 6E 20 61 72 65 61 20 6F 66 20 74 68 65 DC, which scrolls an area of the 00000E00 20 64 65 76 69 63 65 20 63 6F 6E 74 65 78 74 2E 20 20 54 68 65 20 53 63 72 6F 6C 6C 44 43 20 66 device context. The ScrollDC f 00000E20 75 6E 63 74 69 6F 6E 20 72 65 71 75 69 72 65 73 20 64 65 76 69 63 65 20 75 6E 69 74 73 20 28 70 unction requires device units (p 00000E40 69 78 65 6C 73 29 2E 20 20 49 66 20 79 6F 75 27 72 65 20 75 73 69 6E 67 20 61 20 6D 61 70 70 69 ixels). If you're using a mappi 00000E60 6E 67 20 6D 6F 64 65 20 77 68 65 6E 20 64 72 61 77 69 6E 67 2C 20 79 6F 75 20 6D 75 73 74 20 75 ng mode when drawing, you must u 00000E80 73 65 20 74 68 65 20 4C 50 74 6F 44 50 20 66 75 6E 63 74 69 6F 6E 20 74 6F 20 63 6F 6E 76 65 72 se the LPtoDP function to conver 00000EA0 74 20 74 68 65 20 6C 6F 67 69 63 61 6C 20 75 6E 69 74 73 20 6F 66 20 74 68 65 20 73 63 72 6F 6C t the logical units of the scrol 00000EC0 6C 20 61 72 65 61 20 74 6F 20 64 65 76 69 63 65 20 75 6E 69 74 73 20 69 6E 20 70 72 65 70 61 72 l area to device units in prepar 00000EE0 61 74 69 6F 6E 20 66 6F 72 20 63 61 6C 6C 69 6E 67 20 53 63 72 6F 6C 6C 44 43 2E 20 20 53 6F 6D ation for calling ScrollDC. Som 00000F00 65 74 69 6D 65 73 20 74 68 69 73 20 72 65 73 75 6C 74 73 20 69 6E 20 61 6E 6E 6F 79 69 6E 67 20 etimes this results in annoying 00000F20 6F 66 66 2D 62 79 2D 6F 6E 65 20 72 6F 75 6E 64 69 6E 67 20 65 72 72 6F 72 73 2E 0D 0A 0D 0A 49 off-by-one rounding errors.♪◙♪◙I 00000F40 27 6D 20 6E 6F 74 20 61 64 76 6F 63 61 74 69 6E 67 20 74 68 61 74 20 79 6F 75 20 6E 6F 74 20 75 'm not advocating that you not u 00000F60 73 65 20 6D 61 70 70 69 6E 67 20 6D 6F 64 65 73 2C 20 6F 66 20 63 6F 75 72 73 65 2C 20 6F 72 20 se mapping modes, of course, or 00000F80 28 77 6F 72 73 65 29 20 61 76 6F 69 64 20 6C 65 61 72 6E 69 6E 67 20 61 62 6F 75 74 20 74 68 65 (worse) avoid learning about the 00000FA0 6D 20 62 65 63 61 75 73 65 20 79 6F 75 20 62 65 6C 69 65 76 65 20 79 6F 75 27 6C 6C 20 6E 65 76 m because you believe you'll nev 00000FC0 65 72 20 75 73 65 20 74 68 65 6D 2E 20 20 41 20 67 6F 6F 64 20 67 72 61 70 68 69 63 73 20 70 72 er use them. A good graphics pr 00000FE0 6F 67 72 61 6D 6D 65 72 20 6B 6E 6F 77 73 20 74 68 65 20 65 6E 74 69 72 65 20 67 72 61 70 68 69 ogrammer knows the entire graphi 00001000 63 73 20 73 79 73 74 65 6D 20 2D 2D 20 61 6E 64 20 70 61 72 74 69 63 75 6C 61 72 6C 79 20 68 6F cs system -- and particularly ho 00001020 77 20 76 61 72 69 6F 75 73 20 66 75 6E 63 74 69 6F 6E 73 20 69 6E 74 65 72 61 63 74 20 2D 2D 20 w various functions interact -- 00001040 61 6E 64 20 75 73 65 73 20 77 68 61 74 65 76 65 72 20 69 73 20 61 70 70 72 6F 70 72 69 61 74 65 and uses whatever is appropriate 00001060 20 66 6F 72 20 74 68 65 20 6A 6F 62 2E 0D 0A 0D 0A 4D 65 74 61 66 69 6C 65 73 2C 20 49 6E 63 68 for the job.♪◙♪◙Metafiles, Inch 00001080 65 73 2C 20 61 6E 64 20 4D 69 6C 6C 69 6D 65 74 65 72 73 0D 0A 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D es, and Millimeters♪◙----------- 000010A0 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 0D 0A 0D 0A 49 6E 20 74 68 -----------------------♪◙♪◙In th 000010C0 65 20 70 61 73 74 20 73 65 76 65 72 61 6C 20 63 6F 6C 75 6D 6E 73 2C 20 49 27 76 65 20 62 65 65 e past several columns, I've bee 000010E0 6E 20 64 69 73 63 75 73 73 69 6E 67 20 74 68 65 20 65 6E 68 61 6E 63 65 64 20 6D 65 74 61 66 69 n discussing the enhanced metafi 00001100 6C 65 20 66 6F 72 6D 61 74 20 61 73 20 69 6D 70 6C 65 6D 65 6E 74 65 64 20 75 6E 64 65 72 20 57 le format as implemented under W 00001120 69 6E 64 6F 77 73 20 4E 54 2E 20 20 49 6E 20 74 68 65 20 6C 61 73 74 20 69 73 73 75 65 2C 20 49 indows NT. In the last issue, I 00001140 20 73 68 6F 77 65 64 20 79 6F 75 20 68 6F 77 20 74 6F 20 65 6E 63 6F 64 65 20 74 68 65 20 69 6D showed you how to encode the im 00001160 61 67 65 20 6F 66 20 61 20 36 2D 69 6E 63 68 20 72 75 6C 65 72 20 69 6E 20 61 20 6D 65 74 61 66 age of a 6-inch ruler in a metaf 00001180 69 6C 65 20 61 6E 64 20 74 68 65 6E 20 64 69 73 70 6C 61 79 20 69 74 20 69 6E 20 69 74 73 20 70 ile and then display it in its p 000011A0 72 6F 70 65 72 20 73 69 7A 65 20 6F 6E 20 62 6F 74 68 20 74 68 65 20 76 69 64 65 6F 20 64 69 73 roper size on both the video dis 000011C0 70 6C 61 79 20 61 6E 64 20 74 68 65 20 70 72 69 6E 74 65 72 2E 0D 0A 0D 0A 42 6F 74 68 20 73 74 play and the printer.♪◙♪◙Both st 000011E0 65 70 73 20 6F 66 20 74 68 69 73 20 6A 6F 62 20 69 6E 76 6F 6C 76 65 64 20 77 6F 72 6B 69 6E 67 eps of this job involved working 00001200 20 77 69 74 68 20 64 69 6D 65 6E 73 69 6F 6E 73 20 6F 74 68 65 72 20 74 68 61 6E 20 70 69 78 65 with dimensions other than pixe 00001220 6C 73 2C 20 61 6C 74 68 6F 75 67 68 20 49 20 6D 61 6E 61 67 65 64 20 74 6F 20 61 76 6F 69 64 20 ls, although I managed to avoid 00001240 75 73 69 6E 67 20 6D 61 70 70 69 6E 67 20 6D 6F 64 65 73 2E 20 20 57 68 65 6E 20 63 72 65 61 74 using mapping modes. When creat 00001260 69 6E 67 20 74 68 65 20 6D 65 74 61 66 69 6C 65 2C 20 69 74 20 77 61 73 20 6E 65 63 65 73 73 61 ing the metafile, it was necessa 00001280 72 79 20 74 6F 20 75 73 65 20 47 65 74 44 65 76 69 63 65 43 61 70 73 20 74 6F 20 66 69 6E 64 20 ry to use GetDeviceCaps to find 000012A0 74 68 65 20 6E 75 6D 62 65 72 20 6F 66 20 70 69 78 65 6C 73 20 70 65 72 20 69 6E 63 68 20 62 61 the number of pixels per inch ba 000012C0 73 65 64 20 6F 6E 20 74 68 65 20 76 69 64 65 6F 20 64 69 73 70 6C 61 79 2E 20 20 54 68 75 73 2C sed on the video display. Thus, 000012E0 20 74 68 65 20 72 75 6C 65 72 20 63 6F 75 6C 64 20 62 65 20 64 72 61 77 6E 20 69 6E 20 74 68 65 the ruler could be drawn in the 00001300 20 6D 65 74 61 66 69 6C 65 20 64 65 76 69 63 65 20 63 6F 6E 74 65 78 74 20 75 73 69 6E 67 20 70 metafile device context using p 00001320 69 78 65 6C 73 2E 0D 0A 0D 0A 41 73 20 77 65 27 76 65 20 73 65 65 6E 2C 20 47 44 49 20 65 6E 63 ixels.♪◙♪◙As we've seen, GDI enc 00001340 6F 64 65 73 20 74 77 6F 20 70 69 65 63 65 73 20 6F 66 20 69 6D 70 6F 72 74 61 6E 74 20 69 6E 66 odes two pieces of important inf 00001360 6F 72 6D 61 74 69 6F 6E 20 69 6E 20 74 68 65 20 68 65 61 64 65 72 20 73 65 63 74 69 6F 6E 20 6F ormation in the header section o 00001380 66 20 74 68 65 20 65 6E 68 61 6E 63 65 64 20 6D 65 74 61 66 69 6C 65 2E 20 20 54 68 65 73 65 20 f the enhanced metafile. These 000013A0 61 72 65 20 74 68 65 20 72 65 63 74 61 6E 67 75 6C 61 72 20 62 6F 75 6E 64 69 6E 67 20 62 6F 78 are the rectangular bounding box 000013C0 20 6F 66 20 74 68 65 20 69 6D 61 67 65 20 69 6E 20 70 69 78 65 6C 73 2C 20 61 6E 64 20 61 6C 73 of the image in pixels, and als 000013E0 6F 20 69 6E 20 75 6E 69 74 73 20 6F 66 20 30 2E 30 31 20 6D 69 6C 6C 69 6D 65 74 65 72 73 2E 20 o in units of 0.01 millimeters. 00001400 20 54 68 65 20 72 65 6C 61 74 69 6F 6E 73 68 69 70 20 62 65 74 77 65 65 6E 20 74 68 65 73 65 20 The relationship between these 00001420 74 77 6F 20 72 65 63 74 61 6E 67 6C 65 73 20 69 73 20 62 61 73 65 64 20 6F 6E 20 74 68 65 20 72 two rectangles is based on the r 00001440 65 73 6F 6C 75 74 69 6F 6E 20 6F 66 20 74 68 65 20 72 65 66 65 72 65 6E 63 65 20 64 65 76 69 63 esolution of the reference devic 00001460 65 20 63 6F 6E 74 65 78 74 2C 20 77 68 69 63 68 20 62 79 20 64 65 66 61 75 6C 74 20 69 73 20 74 e context, which by default is t 00001480 68 65 20 76 69 64 65 6F 20 64 69 73 70 6C 61 79 2E 0D 0A 0D 0A 54 6F 20 64 69 73 70 6C 61 79 20 he video display.♪◙♪◙To display 000014A0 74 68 65 20 6D 65 74 61 66 69 6C 65 20 69 6D 61 67 65 20 69 6E 20 69 74 73 20 70 72 6F 70 65 72 the metafile image in its proper 000014C0 20 73 69 7A 65 2C 20 79 6F 75 20 75 73 65 20 74 68 65 20 72 65 63 74 61 6E 67 6C 65 20 73 74 6F size, you use the rectangle sto 000014E0 72 65 64 20 69 6E 20 74 68 65 20 68 65 61 64 65 72 20 74 68 61 74 20 70 72 6F 76 69 64 65 73 20 red in the header that provides 00001500 74 68 65 20 62 6F 75 6E 64 69 6E 67 20 62 6F 78 20 69 6E 20 75 6E 69 74 73 20 6F 66 20 30 2E 30 the bounding box in units of 0.0 00001520 31 20 6D 69 6C 6C 69 6D 65 74 65 72 73 2E 20 20 42 61 73 65 64 20 6F 6E 20 74 68 65 20 72 65 73 1 millimeters. Based on the res 00001540 6F 6C 75 74 69 6F 6E 20 6F 66 20 74 68 65 20 64 65 76 69 63 65 20 6F 6E 20 77 68 69 63 68 20 79 olution of the device on which y 00001560 6F 75 27 72 65 20 64 72 61 77 69 6E 67 20 74 68 65 20 6D 65 74 61 66 69 6C 65 2C 20 79 6F 75 20 ou're drawing the metafile, you 00001580 63 6F 6E 76 65 72 74 20 74 68 65 20 64 69 6D 65 6E 73 69 6F 6E 73 20 6F 66 20 74 68 65 20 69 6D convert the dimensions of the im 000015A0 61 67 65 20 74 6F 20 70 69 78 65 6C 73 2E 20 20 54 68 69 73 20 70 72 6F 76 69 64 65 73 20 74 68 age to pixels. This provides th 000015C0 65 20 69 6E 66 6F 72 6D 61 74 69 6F 6E 20 79 6F 75 20 6E 65 65 64 20 74 6F 20 73 65 74 20 75 70 e information you need to set up 000015E0 20 61 20 64 65 73 74 69 6E 61 74 69 6F 6E 20 72 65 63 74 61 6E 67 6C 65 20 66 6F 72 20 74 68 65 a destination rectangle for the 00001600 20 50 6C 61 79 45 6E 68 4D 65 74 61 46 69 6C 65 20 63 61 6C 6C 2E 20 20 54 68 65 20 6D 65 74 61 PlayEnhMetaFile call. The meta 00001620 66 69 6C 65 20 69 6D 61 67 65 20 69 73 20 64 69 73 70 6C 61 79 65 64 20 77 69 74 68 69 6E 20 74 file image is displayed within t 00001640 68 61 74 20 64 65 73 74 69 6E 61 74 69 6F 6E 20 72 65 63 74 61 6E 67 6C 65 0D 0A 0D 0A 49 20 61 hat destination rectangle♪◙♪◙I a 00001660 76 6F 69 64 65 64 20 75 73 69 6E 67 20 6D 61 70 70 69 6E 67 20 6D 6F 64 65 73 20 69 6E 20 6C 61 voided using mapping modes in la 00001680 73 74 20 69 73 73 75 65 27 73 20 73 61 6D 70 6C 65 20 70 72 6F 67 72 61 6D 73 20 62 65 63 61 75 st issue's sample programs becau 000016A0 73 65 20 49 20 77 61 6E 74 65 64 20 61 73 20 6C 69 74 74 6C 65 20 61 73 20 70 6F 73 73 69 62 6C se I wanted as little as possibl 000016C0 65 20 68 61 70 70 65 6E 69 6E 67 20 62 65 68 69 6E 64 20 74 68 65 20 73 63 65 6E 65 73 2E 20 20 e happening behind the scenes. 000016E0 42 75 74 20 74 68 65 20 71 75 65 73 74 69 6F 6E 20 6E 61 74 75 72 61 6C 6C 79 20 61 72 69 73 65 But the question naturally arise 00001700 73 3A 20 20 43 61 6E 20 77 65 20 75 73 65 20 6D 61 70 70 69 6E 67 20 6D 6F 64 65 73 20 74 6F 20 s: Can we use mapping modes to 00001720 73 69 6D 70 6C 69 66 79 20 74 68 65 20 63 72 65 61 74 69 6F 6E 20 61 6E 64 20 64 69 73 70 6C 61 simplify the creation and displa 00001740 79 20 6F 66 20 6D 65 74 61 66 69 6C 65 73 3F 0D 0A 0D 0A 57 65 6C 6C 2C 20 6C 65 74 27 73 20 74 y of metafiles?♪◙♪◙Well, let's t 00001760 72 79 2E 0D 0A 0D 0A 45 6D 62 65 64 64 65 64 20 53 65 74 4D 61 70 4D 6F 64 65 20 46 75 6E 63 74 ry.♪◙♪◙Embedded SetMapMode Funct 00001780 69 6F 6E 73 0D 0A 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D ions♪◙-------------------------- 000017A0 2D 2D 2D 0D 0A 0D 0A 57 68 65 6E 64 20 79 6F 75 20 63 61 6C 6C 20 53 65 74 4D 61 70 4D 6F 64 65 ---♪◙♪◙Whend you call SetMapMode 000017C0 20 75 73 69 6E 67 20 61 20 6D 65 74 61 66 69 6C 65 20 64 65 76 69 63 65 20 63 6F 6E 74 65 78 74 using a metafile device context 000017E0 2C 20 74 68 65 20 66 75 6E 63 74 69 6F 6E 20 69 73 20 65 6E 63 6F 64 65 64 20 69 6E 20 74 68 65 , the function is encoded in the 00001800 20 6D 65 74 61 66 69 6C 65 20 6A 75 73 74 20 6C 69 6B 65 20 61 6E 79 20 6F 74 68 65 72 20 47 44 metafile just like any other GD 00001820 49 20 66 75 6E 63 74 69 6F 6E 2E 20 20 54 68 69 73 20 69 73 20 64 65 6D 6F 6E 73 74 72 61 74 65 I function. This is demonstrate 00001840 64 20 69 6E 20 74 68 65 20 45 4D 46 31 32 20 70 72 6F 67 72 61 6D 20 73 68 6F 77 6E 20 69 6E 20 d in the EMF12 program shown in 00001860 46 69 67 75 72 65 73 20 31 20 61 6E 64 20 32 2E 0D 0A 0D 0A 09 5B 0D 0A 0D 0A 09 46 69 67 75 72 Figures 1 and 2.♪◙♪◙○[♪◙♪◙○Figur 00001880 65 20 31 2E 20 20 54 68 65 20 45 4D 46 31 32 2E 4D 41 4B 20 66 69 6C 65 20 66 61 63 69 6C 69 74 e 1. The EMF12.MAK file facilit 000018A0 61 74 65 73 20 63 6F 6D 70 69 6C 61 74 69 6F 6E 20 61 6E 64 20 6C 69 6E 6B 69 6E 67 20 6F 66 20 ates compilation and linking of 000018C0 74 68 65 20 45 4D 46 31 32 20 70 72 6F 67 72 61 6D 2E 0D 0A 0D 0A 09 46 69 67 75 72 65 20 32 2E the EMF12 program.♪◙♪◙○Figure 2. 000018E0 20 20 54 68 65 20 45 4D 46 31 32 2E 43 20 66 69 6C 65 20 65 6E 63 6F 64 65 73 20 61 20 72 75 6C The EMF12.C file encodes a rul 00001900 65 72 20 69 6E 74 6F 20 61 20 6D 65 74 61 66 69 6C 65 20 75 73 69 6E 67 20 61 20 6D 61 70 70 69 er into a metafile using a mappi 00001920 6E 67 20 6D 6F 64 65 2E 0D 0A 0D 0A 09 5D 0D 0A 0D 0A 59 6F 75 27 6C 6C 20 6E 65 65 64 20 74 68 ng mode.♪◙♪◙○]♪◙♪◙You'll need th 00001940 65 20 45 4D 46 20 66 69 6C 65 73 20 66 72 6F 6D 20 74 68 65 20 6C 61 73 74 20 69 73 73 75 65 20 e EMF files from the last issue 00001960 74 6F 20 63 6F 6D 70 69 6C 65 20 61 6E 64 20 6C 69 6E 6B 20 74 68 69 73 20 70 72 6F 67 72 61 6D to compile and link this program 00001980 2E 20 20 49 66 20 79 6F 75 20 68 61 76 65 20 57 69 6E 64 6F 77 73 20 4E 54 20 61 6E 64 20 74 68 . If you have Windows NT and th 000019A0 65 20 57 69 6E 33 32 20 53 6F 66 74 77 61 72 65 20 44 65 76 65 6C 6F 70 6D 65 6E 74 20 4B 69 74 e Win32 Software Development Kit 000019C0 20 69 6E 73 74 61 6C 6C 65 64 2C 20 79 6F 75 20 63 61 6E 20 63 72 65 61 74 65 20 45 4D 46 31 32 installed, you can create EMF12 000019E0 2E 45 58 45 20 62 79 20 72 75 6E 6E 69 6E 67 3A 0D 0A 0D 0A 09 4E 4D 41 4B 45 20 45 4D 46 31 32 .EXE by running:♪◙♪◙○NMAKE EMF12 00001A00 2E 4D 41 4B 0D 0A 0D 0A 66 72 6F 6D 20 61 20 57 69 6E 64 6F 77 73 20 4E 54 20 63 6F 6D 6D 61 6E .MAK♪◙♪◙from a Windows NT comman 00001A20 64 20 6C 69 6E 65 2E 20 20 4F 72 20 79 6F 75 20 63 61 6E 20 64 6F 77 6E 6C 6F 61 64 20 61 6C 6C d line. Or you can download all 00001A40 20 74 68 65 20 73 6F 75 72 63 65 73 20 66 69 6C 65 73 20 61 6E 64 20 74 68 65 20 65 78 65 63 75 the sources files and the execu 00001A60 74 61 62 6C 65 20 66 72 6F 6D 20 5A 69 66 66 4E 65 74 2E 0D 0A 0D 0A 54 68 65 20 43 72 65 61 74 table from ZiffNet.♪◙♪◙The Creat 00001A80 65 52 6F 75 74 69 6E 65 20 66 75 6E 63 74 69 6F 6E 20 69 6E 20 45 4D 46 31 32 20 69 73 20 73 69 eRoutine function in EMF12 is si 00001AA0 6D 70 6C 65 72 20 74 68 61 6E 20 74 68 65 20 6F 6E 65 20 69 6E 20 45 4D 46 39 20 28 6F 75 72 20 mpler than the one in EMF9 (our 00001AC0 6F 72 69 67 69 6E 61 6C 20 72 75 6C 65 72 2D 6D 65 74 61 66 69 6C 65 20 70 72 6F 67 72 61 6D 29 original ruler-metafile program) 00001AE0 20 62 65 63 61 75 73 65 20 69 74 20 64 6F 65 73 20 6E 6F 74 20 6E 65 65 64 20 74 6F 20 63 61 6C because it does not need to cal 00001B00 6C 20 47 65 74 44 65 76 69 63 65 43 61 70 73 20 74 6F 20 64 65 74 65 72 6D 69 6E 65 20 74 68 65 l GetDeviceCaps to determine the 00001B20 20 72 65 73 6F 6C 75 74 69 6F 6E 20 6F 66 20 74 68 65 20 76 69 64 65 6F 20 64 69 73 70 6C 61 79 resolution of the video display 00001B40 20 69 6E 20 64 6F 74 73 20 70 65 72 20 69 6E 63 68 2E 20 20 49 6E 73 74 65 61 64 2C 20 45 4D 46 in dots per inch. Instead, EMF 00001B60 31 32 20 63 61 6C 6C 73 20 53 65 74 4D 61 70 4D 6F 64 65 20 74 6F 20 73 65 74 20 74 68 65 20 6D 12 calls SetMapMode to set the m 00001B80 61 70 70 69 6E 67 20 6D 6F 64 65 20 74 6F 20 4D 4D 5F 4C 4F 45 4E 47 4C 49 53 48 2C 20 77 68 65 apping mode to MM_LOENGLISH, whe 00001BA0 72 65 20 6C 6F 67 69 63 61 6C 20 75 6E 69 74 73 20 61 72 65 20 65 71 75 61 6C 20 74 6F 20 30 2E re logical units are equal to 0. 00001BC0 30 31 20 69 6E 63 68 65 73 2E 20 20 54 68 75 73 2C 20 74 68 65 20 64 69 6D 65 6E 73 69 6F 6E 73 01 inches. Thus, the dimensions 00001BE0 20 6F 66 20 74 68 65 20 72 75 6C 65 72 20 61 72 65 20 36 30 30 20 75 6E 69 74 73 20 62 79 20 31 of the ruler are 600 units by 1 00001C00 30 30 20 75 6E 69 74 73 2C 20 61 6E 64 20 74 68 65 73 65 20 6E 75 6D 62 65 72 73 20 61 72 65 20 00 units, and these numbers are 00001C20 70 61 73 73 65 64 20 74 6F 20 74 68 65 20 44 72 61 77 52 75 6C 65 72 20 66 75 6E 63 74 69 6F 6E passed to the DrawRuler function 00001C40 2E 0D 0A 0D 0A 54 68 65 20 44 72 61 77 52 75 6C 65 72 20 66 75 6E 63 74 69 6F 6E 20 69 6E 20 45 .♪◙♪◙The DrawRuler function in E 00001C60 4D 46 31 32 20 69 73 20 74 68 65 20 73 61 6D 65 20 61 73 20 74 68 65 20 6F 6E 65 20 69 6E 20 45 MF12 is the same as the one in E 00001C80 4D 46 39 2C 20 65 78 63 65 70 74 20 66 6F 72 20 74 68 65 20 4D 6F 76 65 54 6F 45 78 20 61 6E 64 MF9, except for the MoveToEx and 00001CA0 20 4C 69 6E 65 54 6F 20 63 61 6C 6C 73 20 74 68 61 74 20 64 72 61 77 20 74 68 65 20 74 69 63 6B LineTo calls that draw the tick 00001CC0 20 6D 61 72 6B 73 20 6F 66 20 74 68 65 20 72 75 6C 65 72 2E 20 20 57 68 65 6E 20 64 72 61 77 69 marks of the ruler. When drawi 00001CE0 6E 67 20 69 6E 20 75 6E 69 74 73 20 6F 66 20 70 69 78 65 6C 73 20 28 74 68 65 20 64 65 66 61 75 ng in units of pixels (the defau 00001D00 6C 74 20 4D 4D 5F 54 45 58 54 20 6D 61 70 70 69 6E 67 20 6D 6F 64 65 29 2C 20 75 6E 69 74 73 20 lt MM_TEXT mapping mode), units 00001D20 6F 6E 20 74 68 65 20 76 65 72 74 69 63 61 6C 20 61 78 69 73 20 69 6E 63 72 65 61 73 65 20 67 6F on the vertical axis increase go 00001D40 69 6E 67 20 64 6F 77 6E 20 74 68 65 20 73 63 72 65 65 6E 2E 20 20 46 6F 72 20 74 68 65 20 4D 4D ing down the screen. For the MM 00001D60 5F 4C 4F 45 4E 47 4C 49 53 48 20 6D 61 70 70 69 6E 67 20 6D 6F 64 65 20 28 61 6E 64 20 74 68 65 _LOENGLISH mapping mode (and the 00001D80 20 6F 74 68 65 72 20 6D 65 74 72 69 63 61 6C 20 6D 61 70 70 69 6E 67 20 6D 6F 64 65 73 29 2C 20 other metrical mapping modes), 00001DA0 74 68 65 79 20 69 6E 63 72 65 61 73 65 20 67 6F 69 6E 67 20 75 70 2E 20 20 54 68 61 74 20 72 65 they increase going up. That re 00001DC0 71 75 69 72 65 64 20 61 20 63 68 61 6E 67 65 20 74 6F 20 74 68 69 73 20 63 6F 64 65 2E 0D 0A 0D quired a change to this code.♪◙♪ 00001DE0 0A 54 68 65 20 50 61 69 6E 74 52 6F 75 74 69 6E 65 20 66 75 6E 63 74 69 6F 6E 20 69 6E 20 45 4D ◙The PaintRoutine function in EM 00001E00 46 31 32 20 69 73 20 62 61 73 69 63 61 6C 6C 79 20 74 68 65 20 73 61 6D 65 20 61 73 20 74 68 65 F12 is basically the same as the 00001E20 20 6F 6E 65 20 69 6E 20 6C 61 73 74 20 69 73 73 75 65 27 73 20 45 4D 46 31 30 2C 20 77 68 69 63 one in last issue's EMF10, whic 00001E40 68 20 77 61 73 20 74 68 65 20 76 65 72 73 69 6F 6E 20 6F 66 20 74 68 65 20 70 72 6F 67 72 61 6D h was the version of the program 00001E60 20 74 68 61 74 20 73 75 63 63 65 73 73 66 75 6C 6C 79 20 64 69 73 70 6C 61 79 65 64 20 74 68 65 that successfully displayed the 00001E80 20 72 75 6C 65 72 20 69 6E 20 69 74 73 20 63 6F 72 72 65 63 74 20 64 69 6D 65 6E 73 69 6F 6E 73 ruler in its correct dimensions 00001EA0 20 6F 6E 20 62 6F 74 68 20 74 68 65 20 76 69 64 65 6F 20 64 69 73 70 6C 61 79 20 61 6E 64 20 74 on both the video display and t 00001EC0 68 65 20 70 72 69 6E 74 65 72 2E 20 20 54 68 65 20 6F 6E 6C 79 20 64 69 66 66 65 72 65 6E 63 65 he printer. The only difference 00001EE0 20 69 73 20 74 68 61 74 20 45 4D 46 31 32 20 75 73 65 73 20 74 68 65 20 45 4D 46 31 32 2E 45 4D is that EMF12 uses the EMF12.EM 00001F00 46 20 66 69 6C 65 2C 20 77 68 65 72 65 61 73 20 45 4D 46 31 30 20 75 73 65 64 20 74 68 65 20 45 F file, whereas EMF10 used the E 00001F20 4D 46 39 2E 45 4D 46 20 66 69 6C 65 20 63 72 65 61 74 65 64 20 62 79 20 45 4D 46 39 2E 0D 0A 0D MF9.EMF file created by EMF9.♪◙♪ 00001F40 0A 49 6E 20 74 68 65 20 68 65 61 64 65 72 20 72 65 63 6F 72 64 20 6F 66 20 45 4D 46 39 2E 45 4D ◙In the header record of EMF9.EM 00001F60 46 2C 20 74 68 65 20 64 69 6D 65 6E 73 69 6F 6E 73 20 77 65 72 65 20 72 65 63 6F 72 64 65 64 20 F, the dimensions were recorded 00001F80 61 73 20 34 30 32 20 70 69 78 65 6C 73 20 77 69 64 65 20 61 6E 64 20 36 37 20 70 69 78 65 6C 73 as 402 pixels wide and 67 pixels 00001FA0 20 68 69 67 68 2C 20 61 6E 64 20 31 35 30 2E 37 35 20 6D 69 6C 6C 69 6D 65 74 65 72 73 20 77 69 high, and 150.75 millimeters wi 00001FC0 64 65 20 61 6E 64 20 32 35 2E 31 33 20 6D 69 6C 6C 69 6D 65 74 65 72 73 20 68 69 67 68 2E 20 20 de and 25.13 millimeters high. 00001FE0 4F 66 20 63 6F 75 72 73 65 2C 20 74 68 65 72 65 20 61 72 65 20 32 35 2E 34 20 6D 69 6C 6C 69 6D Of course, there are 25.4 millim 00002000 65 74 65 72 73 20 74 6F 20 74 68 65 20 69 6E 63 68 2C 20 73 6F 20 74 68 65 20 64 69 6D 65 6E 73 eters to the inch, so the dimens 00002020 69 6F 6E 73 20 61 72 65 20 6E 6F 74 20 70 72 65 63 69 73 65 2E 20 20 54 68 69 73 20 72 65 73 75 ions are not precise. This resu 00002040 6C 74 73 20 66 72 6F 6D 20 74 68 65 20 70 72 6F 67 72 61 6D 20 72 6F 75 6E 64 69 6E 67 20 74 68 lts from the program rounding th 00002060 65 20 56 47 41 20 70 69 78 65 6C 20 72 65 73 6F 6C 75 74 69 6F 6E 20 74 6F 20 36 37 20 64 6F 74 e VGA pixel resolution to 67 dot 00002080 73 20 70 65 72 20 69 6E 63 68 2E 0D 0A 0D 0A 49 20 6D 65 6E 74 69 6F 6E 65 64 20 65 61 72 6C 69 s per inch.♪◙♪◙I mentioned earli 000020A0 65 72 20 74 68 61 74 20 74 68 65 20 64 69 6D 65 6E 73 69 6F 6E 73 20 6F 66 20 74 68 65 20 69 6D er that the dimensions of the im 000020C0 61 67 65 20 61 72 65 20 72 65 63 6F 72 64 65 64 20 61 73 20 72 65 63 74 61 6E 67 6C 65 73 2E 20 age are recorded as rectangles. 000020E0 20 46 6F 72 20 45 4D 46 39 2C 20 74 68 65 20 6C 65 66 74 20 61 6E 64 20 74 6F 70 20 66 69 65 6C For EMF9, the left and top fiel 00002100 64 73 20 6F 66 20 74 68 65 20 52 45 43 54 20 73 74 72 75 63 74 75 72 65 20 61 72 65 20 7A 65 72 ds of the RECT structure are zer 00002120 6F 2C 20 61 6E 64 20 74 68 65 20 66 69 67 75 72 65 73 20 69 6E 20 74 68 65 20 70 61 72 61 67 72 o, and the figures in the paragr 00002140 61 70 68 20 61 62 6F 76 65 20 69 6E 64 69 63 61 74 65 20 74 68 65 20 72 69 67 68 74 20 61 6E 64 aph above indicate the right and 00002160 20 62 6F 74 74 6F 6D 20 66 69 65 6C 64 73 2E 0D 0A 0D 0A 49 6E 20 45 4D 46 31 32 2E 45 4D 46 20 bottom fields.♪◙♪◙In EMF12.EMF 00002180 74 68 65 20 52 45 43 54 20 73 74 72 75 63 74 75 72 65 20 66 69 65 6C 64 73 20 66 6F 72 20 74 68 the RECT structure fields for th 000021A0 65 20 70 69 78 65 6C 20 64 69 6D 65 6E 73 69 6F 6E 73 20 61 72 65 20 72 65 63 6F 72 64 65 64 20 e pixel dimensions are recorded 000021C0 61 73 20 28 30 2C 20 2D 36 37 2C 20 34 30 36 2C 20 30 29 2C 20 61 6E 64 20 74 68 65 20 6D 69 6C as (0, -67, 406, 0), and the mil 000021E0 6C 69 6D 65 74 65 72 20 64 69 6D 65 6E 73 69 6F 6E 73 20 61 72 65 20 28 30 2C 20 2D 32 35 2E 34 limeter dimensions are (0, -25.4 00002200 39 2C 20 31 35 32 2E 32 35 2C 20 30 29 2E 20 20 54 68 69 73 20 61 63 63 6F 75 6E 74 73 20 66 6F 9, 152.25, 0). This accounts fo 00002220 72 20 75 6E 69 74 73 20 6F 66 20 79 20 69 6E 63 72 65 61 73 69 6E 67 20 67 6F 69 6E 67 20 75 70 r units of y increasing going up 00002240 2E 20 20 41 6C 73 6F 20 6E 6F 74 65 20 74 68 61 74 20 47 44 49 20 6D 61 6E 61 67 65 64 20 74 6F . Also note that GDI managed to 00002260 20 62 65 20 61 20 62 69 74 20 6D 6F 72 65 20 61 63 63 75 72 61 74 65 20 69 6E 20 63 61 6C 63 75 be a bit more accurate in calcu 00002280 6C 61 74 69 6E 67 20 74 68 65 20 64 69 6D 65 6E 73 69 6F 6E 73 20 6F 66 20 74 68 65 20 72 75 6C lating the dimensions of the rul 000022A0 65 72 2E 20 20 42 65 63 61 75 73 65 20 45 4D 46 31 32 20 63 61 6C 63 75 6C 61 74 65 73 20 74 68 er. Because EMF12 calculates th 000022C0 65 20 68 6F 72 69 7A 6F 6E 74 61 6C 20 61 6E 64 20 76 65 72 74 69 63 61 6C 20 64 69 6D 65 6E 73 e horizontal and vertical dimens 000022E0 69 6F 6E 73 20 6F 66 20 74 68 65 20 69 6D 61 67 65 20 62 79 20 73 75 62 74 72 61 63 74 69 6E 67 ions of the image by subtracting 00002300 20 74 68 65 20 6C 65 66 74 20 66 69 65 6C 64 20 66 72 6F 6D 20 74 68 65 20 72 69 67 68 74 20 66 the left field from the right f 00002320 69 65 6C 64 2C 20 61 6E 64 20 74 68 65 20 74 6F 70 20 66 69 65 6C 64 20 66 72 6F 6D 20 74 68 65 ield, and the top field from the 00002340 20 62 6F 74 74 6F 6D 20 66 69 65 6C 64 2C 20 74 68 65 20 63 61 6C 63 75 6C 61 74 69 6F 6E 20 79 bottom field, the calculation y 00002360 69 65 6C 64 73 20 74 68 65 20 73 61 6D 65 20 72 65 73 75 6C 74 20 61 73 20 45 4D 46 31 30 2E 0D ields the same result as EMF10.♪ 00002380 0A 0D 0A 54 68 65 20 69 6D 61 67 65 20 64 69 73 70 6C 61 79 65 64 20 62 79 20 45 4D 46 31 32 20 ◙♪◙The image displayed by EMF12 000023A0 69 73 20 62 61 73 69 63 61 6C 6C 79 20 74 68 65 20 73 61 6D 65 20 61 73 20 45 4D 46 31 30 2E 20 is basically the same as EMF10. 000023C0 20 53 6F 2C 20 77 65 20 73 65 65 20 68 65 72 65 20 68 6F 77 20 65 6D 62 65 64 64 69 6E 67 20 61 So, we see here how embedding a 000023E0 20 53 65 74 4D 61 70 4D 6F 64 65 20 63 61 6C 6C 20 69 6E 74 6F 20 61 20 6D 65 74 61 66 69 6C 65 SetMapMode call into a metafile 00002400 20 63 61 6E 20 73 69 6D 70 6C 69 66 79 20 74 68 65 20 6D 65 74 61 66 69 6C 65 20 63 72 65 61 74 can simplify the metafile creat 00002420 69 6F 6E 20 61 6E 64 20 64 6F 65 73 6E 27 74 20 61 66 66 65 63 74 20 61 74 20 61 6C 6C 20 74 68 ion and doesn't affect at all th 00002440 65 20 6D 65 63 68 61 6E 69 63 73 20 6F 66 20 70 6C 61 79 69 6E 67 20 6F 66 20 74 68 65 20 6D 65 e mechanics of playing of the me 00002460 74 61 66 69 6C 65 20 69 6E 20 69 74 73 20 63 6F 72 72 65 63 74 20 73 69 7A 65 2E 20 20 0D 0A 0D tafile in its correct size. ♪◙♪ 00002480 0A 4E 6F 77 20 6C 65 74 27 73 20 73 65 65 20 77 68 61 74 20 6F 74 68 65 72 20 67 61 6D 65 73 20 ◙Now let's see what other games 000024A0 77 65 20 63 61 6E 20 70 6C 61 79 2E 0D 0A 0D 0A 4D 61 70 70 69 6E 67 20 61 6E 64 20 50 6C 61 79 we can play.♪◙♪◙Mapping and Play 000024C0 69 6E 67 0D 0A 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 0D 0A 0D 0A 43 61 6C 63 ing♪◙-------------------♪◙♪◙Calc 000024E0 75 6C 61 74 69 6E 67 20 74 68 65 20 64 65 73 74 69 6E 61 74 69 6F 6E 20 72 65 63 74 61 6E 67 6C ulating the destination rectangl 00002500 65 20 69 6E 20 45 4D 46 31 32 20 69 6E 76 6F 6C 76 65 73 20 73 6F 6D 65 20 63 61 6C 6C 73 20 74 e in EMF12 involves some calls t 00002520 6F 20 47 65 74 44 65 76 69 63 65 43 61 70 73 2E 20 20 4F 75 72 20 73 65 63 6F 6E 64 20 67 6F 61 o GetDeviceCaps. Our second goa 00002540 6C 20 69 73 20 74 6F 20 65 6C 69 6D 69 6E 61 74 65 20 74 68 6F 73 65 20 61 6E 64 20 75 73 65 20 l is to eliminate those and use 00002560 61 20 6D 61 70 70 69 6E 67 20 6D 6F 64 65 20 69 6E 73 74 65 61 64 2E 20 20 47 44 49 20 74 72 65 a mapping mode instead. GDI tre 00002580 61 74 73 20 74 68 65 20 63 6F 6F 72 64 69 6E 61 74 65 73 20 6F 66 20 74 68 65 20 64 65 73 74 69 ats the coordinates of the desti 000025A0 6E 61 74 69 6F 6E 20 72 65 63 74 61 6E 67 6C 65 20 61 73 20 6C 6F 67 69 63 61 6C 20 63 6F 6F 72 nation rectangle as logical coor 000025C0 64 69 6E 61 74 65 73 2E 20 20 55 73 69 6E 67 20 74 68 65 20 4D 4D 5F 48 49 4D 45 54 52 49 43 20 dinates. Using the MM_HIMETRIC 000025E0 6D 6F 64 65 20 73 65 65 6D 73 20 6C 69 6B 65 20 61 20 67 6F 6F 64 20 63 61 6E 64 69 64 61 74 65 mode seems like a good candidate 00002600 20 66 6F 72 20 74 68 65 73 65 20 63 6F 6F 72 64 69 6E 61 74 65 73 2C 20 62 65 63 61 75 73 65 20 for these coordinates, because 00002620 74 68 61 74 20 6D 61 6B 65 73 20 6C 6F 67 69 63 61 6C 20 75 6E 69 74 73 20 30 2E 30 31 20 6D 69 that makes logical units 0.01 mi 00002640 6C 6C 69 6D 65 74 65 72 73 2C 20 74 68 65 20 73 61 6D 65 20 75 6E 69 74 73 20 75 73 65 64 20 66 llimeters, the same units used f 00002660 6F 72 20 74 68 65 20 62 6F 75 6E 64 69 6E 67 20 72 65 63 74 61 6E 67 6C 65 20 69 6E 20 74 68 65 or the bounding rectangle in the 00002680 20 65 6E 68 61 6E 63 65 64 20 6D 65 74 61 66 69 6C 65 20 68 65 61 64 65 72 2E 0D 0A 0D 0A 54 68 enhanced metafile header.♪◙♪◙Th 000026A0 65 20 45 4D 46 31 33 20 70 72 6F 67 72 61 6D 20 73 68 6F 77 6E 20 69 6E 20 46 69 67 75 72 65 73 e EMF13 program shown in Figures 000026C0 20 33 20 61 6E 64 20 34 20 72 65 73 74 6F 72 65 73 20 74 68 65 20 6F 72 69 67 69 6E 61 6C 20 6D 3 and 4 restores the original m 000026E0 65 74 61 66 69 6C 65 2D 63 72 65 61 74 69 6F 6E 20 6C 6F 67 69 63 20 61 73 20 6F 72 69 67 69 6E etafile-creation logic as origin 00002700 61 6C 6C 79 20 70 72 65 73 65 6E 74 65 64 20 69 6E 20 6C 61 73 74 20 69 73 73 75 65 27 73 20 45 ally presented in last issue's E 00002720 4D 46 39 2C 20 62 75 74 20 75 73 65 73 20 74 68 65 20 4D 4D 5F 48 49 4D 45 54 52 49 43 20 6D 61 MF9, but uses the MM_HIMETRIC ma 00002740 70 70 69 6E 67 20 6D 6F 64 65 20 74 6F 20 64 69 73 70 6C 61 79 20 74 68 65 20 6D 65 74 61 66 69 pping mode to display the metafi 00002760 6C 65 2E 0D 0A 0D 0A 09 5B 0D 0A 0D 0A 09 46 69 67 75 72 65 20 33 2E 20 20 54 68 65 20 45 4D 46 le.♪◙♪◙○[♪◙♪◙○Figure 3. The EMF 00002780 31 33 2E 4D 41 4B 20 66 69 6C 65 20 66 61 63 69 6C 69 74 61 74 65 73 20 63 6F 6D 70 69 6C 61 74 13.MAK file facilitates compilat 000027A0 69 6F 6E 20 61 6E 64 20 6C 69 6E 6B 69 6E 67 20 6F 66 20 74 68 65 20 45 4D 46 31 33 20 70 72 6F ion and linking of the EMF13 pro 000027C0 67 72 61 6D 2E 0D 0A 0D 0A 09 46 69 67 75 72 65 20 34 2E 20 20 54 68 65 20 45 4D 46 31 33 2E 43 gram.♪◙♪◙○Figure 4. The EMF13.C 000027E0 20 66 69 6C 65 20 64 69 73 70 6C 61 79 73 20 61 20 72 75 6C 65 72 20 6D 65 74 61 66 69 6C 65 20 file displays a ruler metafile 00002800 75 73 69 6E 67 20 61 20 6D 61 70 70 69 6E 67 20 6D 6F 64 65 2E 0D 0A 0D 0A 09 5D 0D 0A 0D 0A 54 using a mapping mode.♪◙♪◙○]♪◙♪◙T 00002820 68 65 20 50 61 69 6E 74 52 6F 75 74 69 6E 65 20 66 75 6E 63 74 69 6F 6E 20 69 6E 20 45 4D 46 31 he PaintRoutine function in EMF1 00002840 33 20 66 69 72 73 74 20 73 65 74 73 20 74 68 65 20 6D 61 70 70 69 6E 67 20 6D 6F 64 65 20 74 6F 3 first sets the mapping mode to 00002860 20 4D 4D 5F 48 49 4D 45 54 52 49 43 2E 20 20 41 73 20 77 69 74 68 20 74 68 65 20 6F 74 68 65 72 MM_HIMETRIC. As with the other 00002880 20 6D 65 74 72 69 63 20 6D 6F 64 65 73 2C 20 76 61 6C 75 65 73 20 6F 66 20 79 20 69 6E 63 72 65 metric modes, values of y incre 000028A0 61 73 65 20 67 6F 69 6E 67 20 75 70 20 74 68 65 20 73 63 72 65 65 6E 2E 20 20 48 6F 77 65 76 65 ase going up the screen. Howeve 000028C0 72 2C 20 74 68 65 20 6F 72 69 67 69 6E 20 69 73 20 73 74 69 6C 6C 20 61 74 20 74 68 65 20 75 70 r, the origin is still at the up 000028E0 70 65 72 2D 6C 65 66 74 20 63 6F 72 6E 65 72 2C 20 77 68 69 63 68 20 6D 65 61 6E 73 20 74 68 61 per-left corner, which means tha 00002900 74 20 79 2D 63 6F 6F 72 64 69 6E 61 74 65 73 20 77 69 74 68 69 6E 20 74 68 65 20 63 6C 69 65 6E t y-coordinates within the clien 00002920 74 20 61 72 65 61 20 61 72 65 20 6E 65 67 61 74 69 76 65 2E 20 20 54 6F 20 63 6F 72 72 65 63 74 t area are negative. To correct 00002940 20 74 68 69 73 20 6F 64 64 69 74 79 2C 20 74 68 65 20 70 72 6F 67 72 61 6D 20 63 61 6C 6C 73 20 this oddity, the program calls 00002960 53 65 74 56 69 65 77 70 6F 72 74 4F 72 67 45 78 20 74 6F 20 73 65 74 20 74 68 65 20 6F 72 69 67 SetViewportOrgEx to set the orig 00002980 69 6E 20 74 6F 20 74 68 65 20 6C 6F 77 65 72 2D 6C 65 66 74 20 63 6F 72 6E 65 72 2E 0D 0A 0D 0A in to the lower-left corner.♪◙♪◙ 000029A0 54 68 65 20 64 65 76 69 63 65 20 70 6F 69 6E 74 20 28 63 78 41 72 65 61 2C 30 29 20 69 73 20 61 The device point (cxArea,0) is a 000029C0 74 20 74 68 65 20 75 70 70 65 72 2D 72 69 67 68 74 20 63 6F 72 6E 65 72 20 6F 66 20 74 68 65 20 t the upper-right corner of the 000029E0 73 63 72 65 65 6E 2E 20 20 50 61 73 73 69 6E 67 20 74 68 61 74 20 70 6F 69 6E 74 20 74 6F 20 74 screen. Passing that point to t 00002A00 68 65 20 44 50 74 6F 4C 50 20 28 22 64 65 76 69 63 65 20 70 6F 69 6E 74 20 74 6F 20 6C 6F 67 69 he DPtoLP ("device point to logi 00002A20 63 61 6C 20 70 6F 69 6E 74 22 29 20 66 75 6E 63 74 69 6F 6E 20 67 69 76 65 73 20 75 73 20 74 68 cal point") function gives us th 00002A40 65 20 73 69 7A 65 20 6F 66 20 74 68 65 20 63 6C 69 65 6E 74 20 61 72 65 61 20 69 6E 20 30 2E 30 e size of the client area in 0.0 00002A60 31 20 6D 69 6C 6C 69 6D 65 74 65 72 73 2E 20 20 0D 0A 0D 0A 54 68 65 20 70 72 6F 67 72 61 6D 20 1 millimeters. ♪◙♪◙The program 00002A80 74 68 65 6E 20 6C 6F 61 64 73 20 74 68 65 20 6D 65 74 61 66 69 6C 65 2C 20 67 65 74 73 20 74 68 then loads the metafile, gets th 00002AA0 65 20 68 65 61 64 65 72 2C 20 61 6E 64 20 66 69 6E 64 73 20 74 68 65 20 64 69 6D 65 6E 73 69 6F e header, and finds the dimensio 00002AC0 6E 73 20 6F 66 20 74 68 65 20 6D 65 74 61 66 69 6C 65 20 69 6E 20 30 2E 30 31 20 6D 69 6C 6C 69 ns of the metafile in 0.01 milli 00002AE0 6D 65 74 65 72 73 2E 20 20 54 68 65 20 64 65 73 74 69 6E 61 74 69 6F 6E 20 72 65 63 74 61 6E 67 meters. The destination rectang 00002B00 6C 65 20 63 65 6E 74 65 72 65 64 20 69 6E 20 74 68 65 20 6D 69 64 64 6C 65 20 6F 66 20 74 68 65 le centered in the middle of the 00002B20 20 63 6C 69 65 6E 74 20 61 72 65 61 20 69 73 20 74 68 65 6E 20 65 61 73 79 20 74 6F 20 63 61 6C client area is then easy to cal 00002B40 63 75 6C 61 74 65 2E 20 20 0D 0A 0D 0A 43 6F 6D 62 69 6E 69 6E 67 20 74 68 65 20 45 66 66 65 63 culate. ♪◙♪◙Combining the Effec 00002B60 74 73 0D 0A 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 0D 0A 0D 0A 4E 6F 77 ts♪◙---------------------♪◙♪◙Now 00002B80 20 77 65 27 76 65 20 73 65 65 6E 20 68 6F 77 20 77 65 20 63 61 6E 20 75 73 65 20 61 20 6D 61 70 we've seen how we can use a map 00002BA0 70 69 6E 67 20 6D 6F 64 65 20 77 68 65 6E 20 63 72 65 61 74 69 6E 67 20 74 68 65 20 6D 65 74 61 ping mode when creating the meta 00002BC0 66 69 6C 65 2C 20 61 6E 64 20 61 6C 73 6F 20 66 6F 72 20 64 69 73 70 6C 61 79 69 6E 67 20 69 74 file, and also for displaying it 00002BE0 2E 20 20 43 61 6E 20 77 65 20 64 6F 20 62 6F 74 68 3F 20 20 0D 0A 0D 0A 57 68 65 6E 20 49 20 66 . Can we do both? ♪◙♪◙When I f 00002C00 69 72 73 74 20 63 6F 6E 73 69 64 65 72 65 64 20 74 68 69 73 2C 20 6D 79 20 69 6D 6D 65 64 69 61 irst considered this, my immedia 00002C20 74 65 20 69 6E 73 74 69 6E 63 74 20 77 61 73 20 22 4E 6F 20 77 61 79 21 22 20 20 49 6E 20 65 66 te instinct was "No way!" In ef 00002C40 66 65 63 74 2C 20 74 68 65 20 70 72 6F 67 72 61 6D 20 77 6F 75 6C 64 20 62 65 20 73 65 74 74 69 fect, the program would be setti 00002C60 6E 67 20 74 68 65 20 6D 61 70 70 69 6E 67 20 6D 6F 64 65 20 74 6F 20 4D 4D 5F 48 49 4D 45 54 52 ng the mapping mode to MM_HIMETR 00002C80 49 43 20 77 68 65 6E 20 70 6C 61 79 69 6E 67 20 74 68 65 20 6D 65 74 61 66 69 6C 65 2C 20 62 75 IC when playing the metafile, bu 00002CA0 74 20 74 68 65 20 66 69 72 73 74 20 63 61 6C 6C 20 69 6E 20 74 68 65 20 6D 65 74 61 66 69 6C 65 t the first call in the metafile 00002CC0 20 63 68 61 6E 67 65 73 20 74 68 65 20 6D 61 70 70 69 6E 67 20 6D 6F 64 65 20 74 6F 20 4D 4D 5F changes the mapping mode to MM_ 00002CE0 4C 4F 45 4E 47 4C 49 53 48 2C 20 73 6F 20 77 68 61 74 20 64 6F 65 73 20 74 68 61 74 20 64 6F 20 LOENGLISH, so what does that do 00002D00 74 6F 20 74 68 65 20 64 65 73 74 69 6E 61 74 69 6F 6E 20 72 65 63 74 61 6E 67 6C 65 3F 0D 0A 0D to the destination rectangle?♪◙♪ 00002D20 0A 49 74 20 74 75 72 6E 73 20 6F 75 74 20 74 6F 20 77 6F 72 6B 2C 20 61 73 20 45 4D 46 31 34 20 ◙It turns out to work, as EMF14 00002D40 28 73 68 6F 77 6E 20 69 6E 20 46 69 67 75 72 65 73 20 35 20 61 6E 64 20 36 29 20 64 65 6D 6F 6E (shown in Figures 5 and 6) demon 00002D60 73 74 72 61 74 65 73 2E 0D 0A 0D 0A 09 5B 0D 0A 0D 0A 09 46 69 67 75 72 65 20 35 2E 20 20 54 68 strates.♪◙♪◙○[♪◙♪◙○Figure 5. Th 00002D80 65 20 45 4D 46 31 34 2E 4D 41 4B 20 66 69 6C 65 20 66 61 63 69 6C 69 74 61 74 65 73 20 63 6F 6D e EMF14.MAK file facilitates com 00002DA0 70 69 6C 61 74 69 6F 6E 20 61 6E 64 20 6C 69 6E 6B 69 6E 67 20 6F 66 20 74 68 65 20 45 4D 46 31 pilation and linking of the EMF1 00002DC0 34 20 70 72 6F 67 72 61 6D 2E 0D 0A 0D 0A 09 46 69 67 75 72 65 20 36 2E 20 20 54 68 65 20 45 4D 4 program.♪◙♪◙○Figure 6. The EM 00002DE0 46 31 34 2E 43 20 66 69 6C 65 20 64 69 73 70 6C 61 79 73 20 74 68 65 20 72 75 6C 65 72 20 6D 65 F14.C file displays the ruler me 00002E00 74 61 66 69 6C 65 20 66 72 6F 6D 20 45 4D 46 31 32 20 75 73 69 6E 67 20 61 20 6D 61 70 70 69 6E tafile from EMF12 using a mappin 00002E20 67 20 6D 6F 64 65 2E 0D 0A 0D 0A 09 5D 0D 0A 0D 0A 49 6E 20 74 68 65 20 45 4D 46 31 34 20 70 72 g mode.♪◙♪◙○]♪◙♪◙In the EMF14 pr 00002E40 6F 67 72 61 6D 2C 20 69 74 27 73 20 6E 6F 74 20 6E 65 63 65 73 73 61 72 79 20 74 6F 20 63 72 65 ogram, it's not necessary to cre 00002E60 61 74 65 20 74 68 65 20 72 75 6C 65 72 20 6D 65 74 61 66 69 6C 65 20 75 73 69 6E 67 20 61 20 6D ate the ruler metafile using a m 00002E80 61 70 70 69 6E 67 20 6D 6F 64 65 20 62 65 63 61 75 73 65 20 69 74 27 73 20 61 6C 72 65 61 64 79 apping mode because it's already 00002EA0 20 62 65 65 6E 20 63 72 65 61 74 65 64 20 62 79 20 45 4D 46 31 32 2E 20 20 45 4D 46 31 34 20 73 been created by EMF12. EMF14 s 00002EC0 69 6D 70 6C 79 20 6C 6F 61 64 73 20 74 68 61 74 20 6F 6E 65 20 61 6E 64 20 75 73 65 73 20 61 20 imply loads that one and uses a 00002EE0 6D 61 70 70 69 6E 67 20 6D 6F 64 65 20 74 6F 20 63 61 6C 63 75 6C 61 74 65 20 74 68 65 20 64 65 mapping mode to calculate the de 00002F00 73 74 69 6E 61 74 69 6F 6E 20 72 65 63 74 61 6E 67 6C 65 2C 20 6A 75 73 74 20 6C 69 6B 65 20 45 stination rectangle, just like E 00002F20 4D 46 31 33 2E 0D 0A 0D 0A 4E 6F 77 20 77 65 20 63 61 6E 20 65 73 74 61 62 6C 69 73 68 20 61 20 MF13.♪◙♪◙Now we can establish a 00002F40 63 6F 75 70 6C 65 20 70 72 69 6E 63 69 70 6C 65 73 3A 20 20 57 68 65 6E 20 74 68 65 20 6D 65 74 couple principles: When the met 00002F60 61 66 69 6C 65 20 69 73 20 63 72 65 61 74 65 64 2C 20 47 44 49 20 75 73 65 73 20 61 6E 79 20 65 afile is created, GDI uses any e 00002F80 6D 62 65 64 64 65 64 20 63 68 61 6E 67 65 73 20 74 6F 20 74 68 65 20 6D 61 70 70 69 6E 67 20 6D mbedded changes to the mapping m 00002FA0 6F 64 65 20 74 6F 20 63 61 6C 63 75 6C 61 74 65 20 74 68 65 20 73 69 7A 65 20 6F 66 20 74 68 65 ode to calculate the size of the 00002FC0 20 6D 65 74 61 66 69 6C 65 20 69 6D 61 67 65 20 69 6E 20 70 69 78 65 6C 73 20 61 6E 64 20 6D 69 metafile image in pixels and mi 00002FE0 6C 6C 69 6D 65 74 65 72 73 2E 20 20 54 68 65 20 73 69 7A 65 20 6F 66 20 74 68 65 20 69 6D 61 67 llimeters. The size of the imag 00003000 65 20 69 73 20 73 74 6F 72 65 64 20 69 6E 20 74 68 65 20 6D 65 74 61 66 69 6C 65 20 68 65 61 64 e is stored in the metafile head 00003020 65 72 2E 20 20 57 68 65 6E 20 74 68 65 20 6D 65 74 61 66 69 6C 65 20 69 73 20 70 6C 61 79 65 64 er. When the metafile is played 00003040 2C 20 47 44 49 20 65 73 74 61 62 6C 69 73 68 65 73 20 74 68 65 20 70 68 79 73 69 63 61 6C 20 6C , GDI establishes the physical l 00003060 6F 63 61 74 69 6F 6E 20 6F 66 20 74 68 65 20 64 65 73 74 69 6E 61 74 69 6F 6E 20 72 65 63 74 61 ocation of the destination recta 00003080 6E 67 6C 65 20 62 61 73 65 64 20 6F 6E 20 74 68 65 20 6D 61 70 70 69 6E 67 20 6D 6F 64 65 20 69 ngle based on the mapping mode i 000030A0 6E 20 65 66 66 65 63 74 20 61 74 20 74 68 65 20 74 69 6D 65 20 6F 66 20 74 68 65 20 50 6C 61 79 n effect at the time of the Play 000030C0 45 6E 68 4D 65 74 61 46 69 6C 65 20 63 61 6C 6C 2E 20 20 4E 6F 74 68 69 6E 67 20 69 6E 20 74 68 EnhMetaFile call. Nothing in th 000030E0 65 20 6D 65 74 61 66 69 6C 65 20 63 61 6E 20 63 68 61 6E 67 65 20 74 68 61 74 20 6C 6F 63 61 74 e metafile can change that locat 00003100 69 6F 6E 2E 20 20 0D 0A 0D 0A 4D 65 74 61 66 69 6C 65 73 20 61 6E 64 20 74 68 65 20 57 6F 72 6C ion. ♪◙♪◙Metafiles and the Worl 00003120 64 20 54 72 61 6E 73 66 6F 72 6D 0D 0A 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D d Transform♪◙------------------- 00003140 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 0D 0A 0D 0A 54 68 65 20 65 6E 68 61 6E 63 65 64 20 6D --------------♪◙♪◙The enhanced m 00003160 65 74 61 66 69 6C 65 20 66 6F 72 6D 61 74 20 69 73 20 6E 65 77 20 77 69 74 68 20 57 69 6E 64 6F etafile format is new with Windo 00003180 77 73 20 4E 54 2C 20 62 75 74 20 73 6F 20 61 72 65 20 61 20 66 65 77 20 6F 74 68 65 72 20 67 72 ws NT, but so are a few other gr 000031A0 61 70 68 69 63 73 20 66 65 61 74 75 72 65 73 2C 20 73 75 63 68 20 61 73 20 74 68 65 20 77 6F 72 aphics features, such as the wor 000031C0 6C 64 20 74 72 61 6E 73 66 6F 72 6D 2E 20 20 4C 6F 67 69 63 61 6C 20 70 6F 69 6E 74 73 20 69 6E ld transform. Logical points in 000031E0 20 4E 54 20 61 72 65 20 6D 6F 64 69 66 69 65 64 20 66 69 72 73 74 20 62 79 20 74 68 65 20 77 6F NT are modified first by the wo 00003200 72 6C 64 20 74 72 61 6E 73 66 6F 72 6D 20 61 6E 64 20 74 68 65 6E 20 62 79 20 74 68 65 20 6D 61 rld transform and then by the ma 00003220 70 70 69 6E 67 20 6D 6F 64 65 20 28 6F 72 2C 20 6D 6F 72 65 20 61 63 63 75 72 61 74 65 6C 79 2C pping mode (or, more accurately, 00003240 20 74 68 65 20 77 69 6E 64 6F 77 20 61 6E 64 20 76 69 65 77 70 6F 72 74 20 6F 72 69 67 69 6E 73 the window and viewport origins 00003260 20 61 6E 64 20 65 78 74 65 6E 74 73 29 20 74 6F 20 79 69 65 6C 64 20 64 65 76 69 63 65 20 70 6F and extents) to yield device po 00003280 69 6E 74 73 2E 0D 0A 0D 0A 54 68 69 73 20 69 6D 70 6C 69 65 73 20 74 68 61 74 20 77 65 20 63 61 ints.♪◙♪◙This implies that we ca 000032A0 6E 20 64 65 66 69 6E 65 20 61 20 77 6F 72 6C 64 20 74 72 61 6E 73 66 6F 72 6D 20 69 6E 20 74 68 n define a world transform in th 000032C0 65 20 64 65 73 74 69 6E 61 74 69 6F 6E 20 64 65 76 69 63 65 20 63 6F 6E 74 65 78 74 20 61 6E 64 e destination device context and 000032E0 20 64 69 73 70 6C 61 79 20 74 68 65 20 6D 65 74 61 66 69 6C 65 20 69 6D 61 67 65 20 69 6E 20 61 display the metafile image in a 00003300 20 73 6B 65 77 65 64 20 6F 72 20 72 6F 74 61 74 65 64 20 72 65 63 74 61 6E 67 6C 65 2E 20 20 54 skewed or rotated rectangle. T 00003320 68 69 73 20 69 73 20 64 65 6D 6F 6E 73 74 72 61 74 65 64 20 69 6E 20 45 4D 46 31 35 2C 20 73 68 his is demonstrated in EMF15, sh 00003340 6F 77 6E 20 69 6E 20 46 69 67 75 72 65 73 20 37 20 61 6E 64 20 38 2E 0D 0A 0D 0A 09 5B 0D 0A 0D own in Figures 7 and 8.♪◙♪◙○[♪◙♪ 00003360 0A 09 46 69 67 75 72 65 20 37 2E 20 20 54 68 65 20 45 4D 46 31 35 2E 4D 41 4B 20 66 69 6C 65 20 ◙○Figure 7. The EMF15.MAK file 00003380 66 61 63 69 6C 69 74 61 74 65 73 20 63 6F 6D 70 69 6C 61 74 69 6F 6E 20 61 6E 64 20 6C 69 6E 6B facilitates compilation and link 000033A0 69 6E 67 20 6F 66 20 74 68 65 20 45 4D 46 31 35 20 70 72 6F 67 72 61 6D 2E 0D 0A 0D 0A 09 46 69 ing of the EMF15 program.♪◙♪◙○Fi 000033C0 67 75 72 65 20 38 2E 20 20 54 68 65 20 45 4D 46 31 35 2E 43 20 66 69 6C 65 20 64 69 73 70 6C 61 gure 8. The EMF15.C file displa 000033E0 79 73 20 74 68 65 20 72 75 6C 65 72 20 6D 65 74 61 66 69 6C 65 20 66 72 6F 6D 20 45 4D 46 31 32 ys the ruler metafile from EMF12 00003400 20 77 69 74 68 20 72 6F 74 61 74 69 6F 6E 2E 0D 0A 0D 0A 09 5D 0D 0A 0D 0A 54 6F 20 73 69 6D 70 with rotation.♪◙♪◙○]♪◙♪◙To simp 00003420 6C 69 66 79 20 74 68 65 20 77 6F 72 6C 64 20 74 72 61 6E 73 66 6F 72 6D 20 66 61 63 74 6F 72 73 lify the world transform factors 00003440 2C 20 49 27 76 65 20 73 65 74 20 74 68 65 20 6F 72 69 67 69 6E 20 74 6F 20 74 68 65 20 63 65 6E , I've set the origin to the cen 00003460 74 65 72 20 6F 66 20 74 68 65 20 63 6C 69 65 6E 74 20 61 72 65 61 2E 20 20 54 68 69 73 20 61 6C ter of the client area. This al 00003480 73 6F 20 65 6C 69 6D 69 6E 61 74 65 73 20 74 68 65 20 6E 65 65 64 20 66 6F 72 20 74 68 65 20 44 so eliminates the need for the D 000034A0 50 74 6F 4C 50 20 63 61 6C 6C 2C 20 62 65 63 61 75 73 65 20 74 68 65 20 64 65 73 74 69 6E 61 74 PtoLP call, because the destinat 000034C0 69 6F 6E 20 72 65 63 74 61 6E 67 6C 65 20 63 6F 6F 72 64 69 6E 61 74 65 73 20 61 72 65 20 70 6F ion rectangle coordinates are po 000034E0 73 69 74 69 76 65 20 61 6E 64 20 6E 65 67 61 74 69 76 65 20 6F 66 66 73 65 74 73 20 28 62 61 73 sitive and negative offsets (bas 00003500 65 64 20 6F 6E 20 74 68 65 20 73 69 7A 65 20 6F 66 20 74 68 65 20 72 75 6C 65 72 29 20 66 72 6F ed on the size of the ruler) fro 00003520 6D 20 74 68 65 20 6F 72 69 67 69 6E 2E 20 20 54 68 65 20 77 6F 72 6C 64 20 74 72 61 6E 73 66 6F m the origin. The world transfo 00003540 72 6D 20 6D 61 74 72 69 78 20 72 6F 74 61 74 65 73 20 74 68 65 20 64 65 73 74 69 6E 61 74 69 6F rm matrix rotates the destinatio 00003560 6E 20 72 65 63 74 61 6E 67 6C 65 20 34 35 20 64 65 67 72 65 65 73 20 63 6F 75 6E 74 65 72 2D 63 n rectangle 45 degrees counter-c 00003580 6C 6F 63 6B 77 69 73 65 20 61 72 6F 75 6E 64 20 74 68 65 20 6F 72 69 67 69 6E 2E 20 20 54 68 65 lockwise around the origin. The 000035A0 20 72 65 73 75 6C 74 73 20 61 72 65 20 73 68 6F 77 6E 20 69 6E 20 46 69 67 75 72 65 20 39 2E 0D results are shown in Figure 9.♪ 000035C0 0A 0D 0A 09 5B 0D 0A 0D 0A 09 46 69 67 75 72 65 20 39 2E 20 20 54 68 65 20 72 6F 74 61 74 65 64 ◙♪◙○[♪◙♪◙○Figure 9. The rotated 000035E0 20 72 75 6C 65 72 20 64 69 73 70 6C 61 79 65 64 20 62 79 20 74 68 65 20 45 4D 46 31 35 20 70 72 ruler displayed by the EMF15 pr 00003600 6F 67 72 61 6D 2E 0D 0A 0D 0A 09 09 5B 20 45 4E 31 39 46 47 30 39 2E 50 43 58 20 5D 0D 0A 0D 0A ogram.♪◙♪◙○○[ EN19FG09.PCX ]♪◙♪◙ 00003620 09 5D 0D 0A 0D 0A 41 6E 79 20 6D 61 70 70 69 6E 67 20 6D 6F 64 65 20 6F 72 20 77 6F 72 6C 64 20 ○]♪◙♪◙Any mapping mode or world 00003640 74 72 61 6E 73 66 6F 72 6D 20 79 6F 75 20 73 65 74 20 62 65 66 6F 72 65 20 74 68 65 20 50 6C 61 transform you set before the Pla 00003660 79 45 6E 68 4D 65 74 61 46 69 6C 65 20 63 61 6C 6C 20 72 65 6D 61 69 6E 73 20 69 6E 20 65 66 66 yEnhMetaFile call remains in eff 00003680 65 63 74 20 61 66 74 65 72 20 74 68 65 20 63 61 6C 6C 20 68 61 73 20 63 6F 6D 70 6C 65 74 65 64 ect after the call has completed 000036A0 2E 20 20 59 6F 75 27 64 20 70 72 6F 62 61 62 6C 79 20 65 78 70 65 63 74 20 73 75 63 68 20 62 65 . You'd probably expect such be 000036C0 68 61 76 69 6F 72 2E 20 20 42 75 74 20 68 6F 77 20 64 6F 20 6F 74 68 65 72 20 64 65 76 69 63 65 havior. But how do other device 000036E0 20 63 6F 6E 74 65 78 74 20 61 74 74 72 69 62 75 74 65 73 20 61 66 66 65 63 74 20 74 68 65 20 6D context attributes affect the m 00003700 65 74 61 66 69 6C 65 3F 20 20 46 6F 72 20 65 78 61 6D 70 6C 65 2C 20 69 66 20 79 6F 75 20 63 72 etafile? For example, if you cr 00003720 65 61 74 65 20 61 20 72 65 64 20 70 65 6E 20 61 6E 64 20 73 65 6C 65 63 74 20 69 74 20 69 6E 74 eate a red pen and select it int 00003740 6F 20 74 68 65 20 64 65 76 69 63 65 20 63 6F 6E 74 65 78 74 20 62 65 66 6F 72 65 20 63 61 6C 6C o the device context before call 00003760 69 6E 67 20 50 6C 61 79 45 6E 68 4D 65 74 61 46 69 6C 65 2C 20 77 69 6C 6C 20 74 68 65 20 72 75 ing PlayEnhMetaFile, will the ru 00003780 6C 65 72 20 62 65 20 64 72 61 77 6E 20 69 6E 20 72 65 64 3F 0D 0A 0D 0A 54 68 65 20 61 6E 73 77 ler be drawn in red?♪◙♪◙The answ 000037A0 65 72 20 69 73 20 4E 6F 2E 20 20 50 6C 61 79 45 6E 68 4D 65 74 61 46 69 6C 65 20 65 66 66 65 63 er is No. PlayEnhMetaFile effec 000037C0 74 69 76 65 6C 79 20 73 61 76 65 73 20 74 68 65 20 73 74 61 74 65 20 6F 66 20 74 68 65 20 64 65 tively saves the state of the de 000037E0 76 69 63 65 20 63 6F 6E 74 65 78 74 2C 20 73 65 74 73 20 74 68 65 20 61 74 74 72 69 62 75 74 65 vice context, sets the attribute 00003800 73 20 74 6F 20 64 65 66 61 75 6C 74 20 76 61 6C 75 65 73 20 28 77 68 69 63 68 20 6D 61 79 20 62 s to default values (which may b 00003820 65 20 6D 6F 64 69 66 69 65 64 20 62 79 20 63 6F 6D 6D 61 6E 64 73 20 77 69 74 68 69 6E 20 74 68 e modified by commands within th 00003840 65 20 6D 65 74 61 66 69 6C 65 29 2C 20 61 6E 64 20 74 68 65 6E 20 72 65 73 74 6F 72 65 73 20 74 e metafile), and then restores t 00003860 68 65 20 64 65 76 69 63 65 20 63 6F 6E 74 65 78 74 20 73 74 61 74 65 20 61 66 74 65 72 20 63 6F he device context state after co 00003880 6D 70 6C 65 74 69 6F 6E 2E 20 20 54 68 65 20 6F 6E 6C 79 20 72 65 61 73 6F 6E 20 74 68 61 74 20 mpletion. The only reason that 000038A0 74 68 65 20 6D 61 70 70 69 6E 67 20 6D 6F 64 65 20 61 6E 64 20 77 6F 72 6C 64 20 74 72 61 6E 73 the mapping mode and world trans 000038C0 66 6F 72 6D 20 61 66 66 65 63 74 73 20 74 68 65 20 6D 65 74 61 66 69 6C 65 20 69 73 20 62 65 63 form affects the metafile is bec 000038E0 61 75 73 65 20 47 44 49 20 69 6E 74 65 72 70 72 65 74 73 20 74 68 65 20 64 65 73 74 69 6E 61 74 ause GDI interprets the destinat 00003900 69 6F 6E 20 72 65 63 74 61 6E 67 6C 65 20 69 6E 20 74 68 65 20 6C 6F 67 69 63 61 6C 20 63 6F 6F ion rectangle in the logical coo 00003920 72 64 69 6E 61 74 65 73 20 64 65 66 69 6E 65 64 20 61 74 20 74 68 65 20 74 69 6D 65 20 50 6C 61 rdinates defined at the time Pla 00003940 79 45 6E 68 4D 65 74 61 46 69 6C 65 20 69 73 20 63 61 6C 6C 65 64 2E 0D 0A 0D 0A 41 6E 64 20 77 yEnhMetaFile is called.♪◙♪◙And w 00003960 69 74 68 20 74 68 61 74 2C 20 6C 65 74 27 73 20 63 6F 6E 63 6C 75 64 65 20 6F 75 72 20 65 78 70 ith that, let's conclude our exp 00003980 6C 6F 72 61 74 69 6F 6E 20 6F 66 20 74 68 65 20 57 69 6E 64 6F 77 73 20 4E 54 20 65 6E 68 61 6E loration of the Windows NT enhan 000039A0 63 65 64 20 6D 65 74 61 66 69 6C 65 20 66 6F 72 6D 61 74 20 61 6E 64 20 6D 6F 76 65 20 6F 6E 20 ced metafile format and move on 000039C0 74 6F 20 6E 65 77 20 70 61 73 74 75 72 65 73 2E 0D 0A 0D 0A 0D 0A 45 6E 76 69 72 6F 6E 6D 65 6E to new pastures.♪◙♪◙♪◙Environmen 000039E0 74 73 2C 20 56 6F 6C 75 6D 65 20 31 33 2C 20 4E 75 6D 62 65 72 20 31 39 09 09 09 50 61 67 65 20 ts, Volume 13, Number 19○○○Page 00003A00 13 70 61 67 65 14 31 15 0D 0A 0D 0A 0D 0A 0D 0A 0D 0A 0D 0A 07 76 01 80 12 82 40 02 61 79 20 62 ‼page¶1§♪◙♪◙♪◙♪◙♪◙♪◙•v☺Ç↕é@☻ay b 00003A20 65 20 6D 6F 64 69 66 69 65 64 20 62 79 20 63 6F 6D 6D 61 6E 64 73 20 77 69 74 68 69 6E 20 74 68 e modified by commands within th 00003A40 65 20 6D 65 74 61 66 69 6C 65 29 2C 20 61 6E 64 20 74 68 65 6E 20 72 65 73 74 6F 72 65 73 20 74 e metafile), and then restores t 00003A60 68 65 20 64 65 76 69 63 65 20 63 6F 6E 74 65 78 74 20 73 74 61 74 65 20 61 66 74 65 72 20 63 6F he device context state after co 00003A80 6D 70 6C 65 74 69 6F 6E 2E 20 20 54 68 65 20 6F 6E 6C 79 20 72 65 61 73 6F 6E 20 74 68 61 74 20 mpletion. The only reason that 00003AA0 74 68 65 20 6D 61 70 70 69 6E 67 20 6D 6F 64 65 20 61 6E 64 20 77 6F 72 6C 64 20 74 72 61 6E 73 the mapping mode and world trans 00003AC0 66 6F 72 6D 20 61 66 66 65 63 74 73 20 74 68 65 20 6D 65 74 61 66 69 6C 65 20 69 73 20 62 65 63 form affects the metafile is bec 00003AE0 61 75 73 65 20 47 44 49 20 69 6E 74 65 72 70 72 65 74 73 20 74 68 65 20 64 65 73 74 69 6E 61 74 ause GDI interprets the destinat 00003B00 69 6F 6E 20 72 65 63 74 61 6E 67 6C 65 20 69 6E 20 74 68 65 20 6C 6F 67 69 63 61 6C 20 63 6F 6F ion rectangle in the logical coo 00003B20 72 64 69 6E 61 74 65 73 20 64 65 66 69 6E 65 64 20 61 74 20 74 68 65 20 74 69 6D 65 20 50 6C 61 rdinates defined at the time Pla 00003B40 79 45 6E 68 4D 65 74 61 46 69 6C 65 20 69 73 20 63 61 6C 6C 65 64 2E 0D 0A 0D 0A 41 6E 64 20 77 yEnhMetaFile is called.♪◙♪◙And w 00003B60 69 74 68 20 74 68 61 74 2C 20 6C 65 74 27 73 20 63 6F 6E 63 6C 75 64 65 20 6F 75 72 20 65 78 70 ith that, let's conclude our exp 00003B80 6C 6F 72 61 74 69 6F 6E 20 6F 66 20 74 68 65 20 57 69 6E 64 6F 77 73 20 4E 54 20 65 6E 68 61 6E loration of the Windows NT enhan 00003BA0 63 65 64 20 6D 65 74 61 66 69 6C 65 20 66 6F 72 6D 61 74 20 61 6E 64 20 6D 6F 76 65 20 6F 6E 20 ced metafile format and move on 00003BC0 74 6F 20 6E 65 77 20 70 61 73 74 75 72 65 73 2E 0D 0A 0D 0A 0D 0A 45 6E 76 69 72 6F 6E 6D 65 6E to new pastures.♪◙♪◙♪◙Environmen 00003BE0 74 73 2C 20 56 6F 6C 75 6D 65 20 31 33 2C 20 4E 75 6D 62 65 72 20 31 39 09 09 09 50 61 67 65 20 ts, Volume 13, Number 19○○○Page 00003C00 80 01 00 00 D4 01 00 00 FE 01 00 00 D6 39 00 00 00 3A 00 00 01 3A 00 00 05 3A 00 00 06 3A 00 00 Ç☺..╘☺..■☺..╓9...:..☺:..♣:..♠:.. 00003C20 07 3A 00 00 08 3A 00 00 12 3A 00 00 14 3A 00 00 1C 3A 00 00 FC F9 FC F8 F6 F8 F6 F8 F6 00 FC EE •:..◘:..↕:..¶:..∟:..ⁿ∙ⁿ°÷°÷°÷.ⁿε 00003C40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................ 00003C60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................ 00003C80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................ 00003CA0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................ 00003CC0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................ 00003CE0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................ 00003D00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................ 00003D20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................ 00003D40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................ 00003D60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................ 00003D80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................ 00003DA0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................ 00003DC0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0E 00 02 00 ............................♫.☻. 00003DE0 00 00 00 14 00 00 00 00 00 00 04 00 02 01 02 00 01 01 05 01 00 02 00 04 05 00 00 02 00 04 00 0C ...¶......♦.☻☺☻.☺☺♣☺.☻.♦♣..☻.♦.♀ 00003E00 80 01 00 00 91 01 00 00 AD 01 00 00 C2 01 00 00 C4 01 00 00 D2 01 00 00 D4 01 00 00 FE 01 00 00 Ç☺..æ☺..¡☺..┬☺..─☺..╥☺..╘☺..■☺.. 00003E20 00 02 00 00 FA 02 00 00 FC 02 00 00 2A 05 00 00 2C 05 00 00 E0 06 00 00 E2 06 00 00 92 07 00 00 .☻..·☻..ⁿ☻..*♣..,♣..α♠..Γ♠..Æ•.. 00003E40 94 07 00 00 AA 07 00 00 C0 07 00 00 C2 07 00 00 3F 09 00 00 41 09 00 00 CF 0A 00 00 D1 0A 00 00 ö•..¬•..└•..┬•..?○..A○..╧◙..╤◙.. 00003E60 0D 0C 00 00 0F 0C 00 00 51 0D 00 00 53 0D 00 00 3D 0F 00 00 3F 0F 00 00 6F 10 00 00 71 10 00 00 ♪♀..☼♀..Q♪..S♪..=☼..?☼..o►..q►.. 00003E80 95 10 00 00 B9 10 00 00 BB 10 00 00 D7 11 00 00 D9 11 00 00 28 13 00 00 2A 13 00 00 93 14 00 00 ò►..╣►..╗►..╫◄..┘◄..(‼..*‼..ô¶.. 00003EA0 95 14 00 00 5B 16 00 00 5D 16 00 00 51 17 00 00 53 17 00 00 65 17 00 00 67 17 00 00 86 17 00 00 ò¶..[▬..]▬..Q↨..S↨..e↨..g↨..å↨.. 00003EC0 A5 17 00 00 A7 17 00 00 72 18 00 00 74 18 00 00 78 18 00 00 7A 18 00 00 D4 18 00 00 D6 18 00 00 Ñ↨..º↨..r↑..t↑..x↑..z↑..╘↑..╓↑.. 00003EE0 2A 19 00 00 2C 19 00 00 30 19 00 00 32 19 00 00 F2 19 00 00 F4 19 00 00 06 1A 00 00 08 1A 00 00 *↓..,↓..0↓..2↓..≥↓..⌠↓..♠→..◘→.. 00003F00 75 1A 00 00 77 1A 00 00 43 1C 00 00 45 1C 00 00 DF 1D 00 00 E1 1D 00 00 3F 1F 00 00 41 1F 00 00 u→..w→..C∟..E∟..▀↔..ß↔..?▼..A▼.. 00003F20 8D 20 00 00 8F 20 00 00 71 21 00 00 73 21 00 00 81 23 00 00 83 23 00 00 FA FA FA FA FA FA F1 EC ì ..Å ..q!..s!..ü#..â#..······±∞ 00003F40 E7 EC E2 EC DD EC D8 EC EC EC EC D3 EC DD EC CE EC CE EC C9 EC CE EC EC EC EC E7 EC CE EC D3 EC τ∞Γ∞▌∞╪∞∞∞∞╙∞▌∞╬∞╬∞╔∞╬∞∞∞∞τ∞╬∞╙∞ 00003F60 C9 EC E7 EC EC EC EC EC EC DD EC EC EC C4 EC C4 EC EC EC D8 EC EC EC C4 EC C9 EC D3 EC CE EC CE ╔∞τ∞∞∞∞∞∞▌∞∞∞─∞─∞∞∞╪∞∞∞─∞╔∞╙∞╬∞╬ 00003F80 EC D8 EC E2 EC 00 00 00 04 00 00 02 C0 21 F0 00 00 00 04 00 00 09 C0 21 F0 00 00 00 04 00 00 06 ∞╪∞Γ∞...♦..☻└!≡...♦..○└!≡...♦..♠ 00003FA0 C0 21 F0 00 00 00 04 00 00 07 C0 21 F0 00 00 00 04 00 00 04 C0 21 F0 00 00 00 04 00 00 00 00 00 └!≡...♦..•└!≡...♦..♦└!≡...♦..... 00003FC0 00 00 00 00 04 00 00 0A C0 21 F0 00 00 00 04 00 00 05 C0 21 F0 00 00 00 04 00 00 01 C0 21 F0 00 ....♦..◙└!≡...♦..♣└!≡...♦..☺└!≡. 00003FE0 00 00 08 00 00 01 C0 21 F0 00 05 01 15 D0 02 16 D0 02 00 00 05 00 00 01 C0 21 F0 00 14 F0 00 4D ..◘..☺└!≡.♣☺§╨☻▬╨☻..♣..☺└!≡.¶≡.M 00004000 83 23 00 00 7F 24 00 00 81 24 00 00 AE 24 00 00 B0 24 00 00 C5 24 00 00 DA 24 00 00 DC 24 00 00 â#..⌂$..ü$..«$..░$..┼$..┌$..▄$.. 00004020 9C 26 00 00 9E 26 00 00 65 27 00 00 67 27 00 00 6B 27 00 00 6D 27 00 00 C7 27 00 00 C9 27 00 00 £&..₧&..e'..g'..k'..m'..╟'..╔'.. 00004040 17 28 00 00 19 28 00 00 1D 28 00 00 1F 28 00 00 9E 29 00 00 A0 29 00 00 72 2A 00 00 74 2A 00 00 ↨(..↓(..↔(..▼(..₧)..á)..r*..t*.. 00004060 4B 2B 00 00 4D 2B 00 00 64 2B 00 00 7B 2B 00 00 7D 2B 00 00 F6 2B 00 00 F8 2B 00 00 1F 2D 00 00 K+..M+..d+..{+..}+..÷+..°+..▼-.. 00004080 21 2D 00 00 6A 2D 00 00 6C 2D 00 00 70 2D 00 00 72 2D 00 00 CC 2D 00 00 CE 2D 00 00 29 2E 00 00 !-..j-..l-..p-..r-..╠-..╬-..)... 000040A0 2B 2E 00 00 2F 2E 00 00 31 2E 00 00 27 2F 00 00 29 2F 00 00 08 31 00 00 0A 31 00 00 2D 31 00 00 +.../...1...'/..)/..◘1..◙1..-1.. 000040C0 50 31 00 00 52 31 00 00 87 32 00 00 89 32 00 00 59 33 00 00 5B 33 00 00 5F 33 00 00 61 33 00 00 P1..R1..ç2..ë2..Y3..[3.._3..a3.. 000040E0 BB 33 00 00 BD 33 00 00 11 34 00 00 13 34 00 00 17 34 00 00 19 34 00 00 C1 35 00 00 C3 35 00 00 ╗3..╜3..◄4..‼4..↨4..↓4..┴5..├5.. 00004100 C7 35 00 00 C9 35 00 00 08 36 00 00 0A 36 00 00 1E 36 00 00 20 36 00 00 24 36 00 00 26 36 00 00 ╟5..╔5..◘6..◙6..▲6.. 6..$6..&6.. 00004120 96 37 00 00 98 37 00 00 59 39 00 00 5B 39 00 00 D2 39 00 00 D4 39 00 00 D6 39 00 00 0A 3A 00 00 û7..ÿ7..Y9..[9..╥9..╘9..╓9..◙:.. 00004140 0C 3A 00 00 FB F6 F6 F6 F6 F6 F6 F1 F6 EC F6 F6 F6 E7 F6 E7 F6 F6 F6 E2 F6 EC F6 EC F6 FB F6 F6 ♀:..√÷÷÷÷÷÷±÷∞÷÷÷τ÷τ÷÷÷Γ÷∞÷∞÷√÷÷ 00004160 E7 F6 DD F6 E7 F6 F6 F6 E7 F6 E7 F6 F6 F6 D8 F6 D3 F6 F6 F6 F6 DD F6 EC F6 F6 F6 E7 F6 E7 F6 F6 τ÷▌÷τ÷÷÷τ÷τ÷÷÷╪÷╙÷÷÷÷▌÷∞÷÷÷τ÷τ÷÷ 00004180 F6 F1 F6 F6 F6 E7 F6 F6 F6 F6 F6 E2 F6 F1 F6 E7 F6 F6 CD FB 00 00 00 00 00 00 05 00 00 01 C0 21 ÷±÷÷÷τ÷÷÷÷÷Γ÷±÷τ÷÷═√......♣..☺└! 000041A0 0D 01 14 F0 00 00 04 00 00 09 C0 21 F0 00 00 00 04 00 00 05 C0 21 F0 00 00 00 04 00 00 06 C0 21 ♪☺¶≡..♦..○└!≡...♦..♣└!≡...♦..♠└! 000041C0 F0 00 00 00 04 00 00 07 C0 21 F0 00 00 00 04 00 00 02 C0 21 F0 00 00 00 04 00 00 04 C0 21 F0 00 ≡...♦..•└!≡...♦..☻└!≡...♦..♦└!≡. 000041E0 00 00 04 00 00 08 C0 21 F0 00 00 00 04 00 00 01 C0 21 F0 00 00 00 04 00 00 00 00 00 00 00 00 50 ..♦..◘└!≡...♦..☺└!≡...♦........P 00004200 0C 3A 00 00 0E 3A 00 00 10 3A 00 00 12 3A 00 00 14 3A 00 00 FB F6 F6 F1 00 00 00 00 00 00 00 00 ♀:..♫:..►:..↕:..¶:..√÷÷±........ 00004220 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................ 00004240 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................ 00004260 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................ 00004280 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................ 000042A0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................ 000042C0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................ 000042E0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................ 00004300 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................ 00004320 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................ 00004340 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................ 00004360 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................ 00004380 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................ 000043A0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................ 000043C0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................ 000043E0 00 00 04 00 00 01 C0 21 F0 00 00 00 04 00 00 00 00 00 00 00 00 00 04 F3 00 01 C0 21 FE 00 00 04 ..♦..☺└!≡...♦.........♦≤.☺└!■..♦ 00004400 0D 00 10 00 00 FF FF FF FF FF FF FF FF FF FF FF FF 00 1E 00 FF FF FF FF FF FF FF FF FF FF FF FF ♪.►.. .▲. 00004420 FF 0E 00 00 46 00 03 00 18 00 00 00 00 00 09 04 17 00 FF FF FF FF FF FF FF FF FF FF FF FF FF 07 ♫..F.♥.↑.....○♦↨. • 00004440 00 00 00 00 00 00 00 0E 00 F3 00 00 00 F5 00 FF 00 FF 00 FF 00 FF 00 FF 00 FF 00 FF 00 00 00 00 .......♫.≤...⌡. . . . . . . .... 00004460 00 FF 00 00 DE 00 00 00 00 94 38 00 00 11 00 14 3A 00 00 00 00 00 00 62 07 00 00 0A 11 00 00 86 . ..▐....ö8..◄.¶:......b•..◙◄..å 00004480 18 00 00 78 22 00 00 FD 29 00 00 DB 31 00 00 94 38 00 00 08 02 FF FF 00 00 01 00 5D 00 00 02 FF ↑..x"..²)..█1..ö8..◘☻ ..☺.]..☻ 000044A0 FF 00 00 02 00 9E 00 08 02 FF FF 00 00 03 00 02 00 00 02 FF FF 00 00 04 00 87 00 08 02 FF FF 00 ..☻.₧.◘☻ ..♥.☻..☻ ..♦.ç.◘☻ . 000044C0 00 05 00 79 00 00 02 FF FF 00 00 06 00 04 00 08 02 FF FF 00 00 07 00 00 00 00 00 00 00 36 00 00 .♣.y..☻ ..♠.♦.◘☻ ..•.......6.. 000044E0 00 3A 00 00 00 40 00 00 00 80 01 00 00 1C 3A 00 00 1E 00 80 01 00 00 83 23 00 00 0C 3A 00 00 14 .:...@...Ç☺..∟:..▲.Ç☺..â#..♀:..¶ 00004500 3A 00 00 1F 00 20 00 21 00 42 00 12 16 00 54 69 6D 65 73 20 4E 65 77 20 52 6F 6D 61 6E 00 09 16 :..▼. .!.B.↕▬.Times New Roman.○▬ 00004520 02 53 79 6D 62 6F 6C 00 08 26 00 41 72 69 61 6C 00 0E 35 00 43 6F 75 72 69 65 72 20 4E 65 77 00 ☻Symbol.◘&.Arial.♫5.Courier New. 00004540 0A 36 00 43 6F 75 72 69 65 72 00 2A 00 00 00 2F 00 00 00 31 00 00 00 40 00 00 00 13 21 14 FF 15 ◙6.Courier.*.../...1...@...‼!¶ § 00004560 00 00 00 03 80 01 00 54 38 00 00 54 38 00 00 07 00 00 80 00 00 54 38 00 00 00 00 00 00 54 38 00 ...♥Ç☺.T8..T8..•..Ç..T8......T8. 00004580 00 22 00 02 00 03 03 8D 00 00 00 D0 02 00 00 68 01 00 00 00 00 C6 3D E9 65 DA 41 E9 85 00 00 00 .".☻.♥♥ì...╨☻..h☺....╞=Θe┌AΘà... 000045A0 00 16 00 EB 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 31 00 00 00 00 00 00 00 0F 43 68 .▬.δ☺................1.......☼Ch 000045C0 61 72 6C 65 73 20 50 65 74 7A 6F 6C 64 0F 43 68 61 72 6C 65 73 20 50 65 74 7A 6F 6C 64 00 00 00 arles Petzold☼Charles Petzold... 000045E0 00 00 00 00 00 00 ......