Metropoli BBS
VIEWER: env19.doc MODE: BINARY (HEX)
==============================================================================================================================================
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 Petzold63 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-NNew 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-3698Metafiles, 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 rectangleI 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  .MAKfrom 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 19Page 
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  page1§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 19Page 
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....=ΘeAΘà...
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 PetzoldCharles Petzold...
000045E0  00 00 00 00 00 00                                                                                   ......
[ RETURN TO DIRECTORY ]