ΠŸΠΎΠΌΠΎΡ‰ΡŒ Π² написании студСнчСских Ρ€Π°Π±ΠΎΡ‚
АнтистрСссовый сСрвис

ΠžΡΠ½ΠΎΠ²Ρ‹ графичСского Π²Ρ‹Π²ΠΎΠ΄Π°

Π›Π΅ΠΊΡ†ΠΈΡΠŸΠΎΠΌΠΎΡ‰ΡŒ Π² Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠΈΠ£Π·Π½Π°Ρ‚ΡŒ ΡΡ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒΠΌΠΎΠ΅ΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹

Бтандартная систСма ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ GDI, выбираСмая Π² ΠΊΠΎΠ½Ρ‚Скст устройства ΠΏΡ€ΠΈ Π΅Π³ΠΎ создании совпадаСт с ΡΠΈΡΡ‚Π΅ΠΌΠΎΠΉ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ самого устройства (ΠΈΠ»ΠΈ ΠΎΠΊΠ½Π°). Вакая систСма ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»Π° Π½Π°Π·Π²Π°Π½ΠΈΠ΅ тСкстовой (MM_TEXT). Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΡ‚ΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ ΠΎΡ‚ ΡΡ‚ΠΎΠΉ систСмы ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ ΠΈ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΡΠΎΠ±ΡΡ‚Π²Π΅Π½Π½ΡƒΡŽ систСму, Ρƒ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ориСнтация осСй ΠΈΠ»ΠΈ ΠΌΠ°ΡΡˆΡ‚Π°Π±Π½Ρ‹Π΅ коэффициСнты ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ ΠΎΡ‚ ΡΡ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½ΠΎΠΉ. ΠžΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ, Ρ‡Ρ‚ΠΎ Ρ‡Π°Ρ‰Π΅… Π§ΠΈΡ‚Π°Ρ‚ΡŒ Π΅Ρ‰Ρ‘ >

ΠžΡΠ½ΠΎΠ²Ρ‹ графичСского Π²Ρ‹Π²ΠΎΠ΄Π° (Ρ€Π΅Ρ„Π΅Ρ€Π°Ρ‚, курсовая, Π΄ΠΈΠΏΠ»ΠΎΠΌ, ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Π°Ρ)

ΠžΡΠ½ΠΎΠ²Ρ‹ графичСского Π²Ρ‹Π²ΠΎΠ΄Π°

Π’ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΡ… Ρ€Π°Π·Π΄Π΅Π»Π°Ρ… ΠΌΡ‹ Π²ΡΠΊΠΎΠ»ΡŒΠ·ΡŒ касались Ρ‚Π΅ΠΌΡ‹, связанной с Π³Ρ€Π°Ρ„ичСским Π²Ρ‹Π²ΠΎΠ΄ΠΎΠΌ. ΠŸΡ€ΠΈ рассмотрСнии самого ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ прилоТСния (ΠΏΡ€ΠΈΠΌΠ΅Ρ€ 1), Π±Ρ‹Π»ΠΈ ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΎ ΠΎΡ‚ΠΌΠ΅Ρ‡Π΅Π½Ρ‹ основныС ΠΏΡ€Π°Π²ΠΈΠ»Π° Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π³Ρ€Π°Ρ„ичСскими устройствами, Π²Π²Π΅Π΄Π΅Π½ΠΎ понятиС контСкст устройства (device context, DC), обсуТдСны Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ основныС ΠΏΡ€Π°Π²ΠΈΠ»Π° Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΊΠΎΠ½Ρ‚Скстом. ΠŸΡ€ΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠΌ знакомствС ΠΌΡ‹ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ»ΠΈΡΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ контСкста устройства ΠΏΡ€ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ сообщСния WM_PAINT.

Π—Π΄Π΅ΡΡŒ Π΅Ρ‰Π΅ Ρ€Π°Π· Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π΅Π½Ρ‹ ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΎ ΡƒΠ³Π»ΡƒΠ±Π»Π΅Π½Ρ‹ рассмотрСнныС вопросы, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ рассмотрСно ΠΌΠ½ΠΎΠ³ΠΎ Π½ΠΎΠ²Ρ‹Ρ…, связанных с ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»Π΅Π½ΠΈΠ΅ΠΌ Π²Ρ‹Π²ΠΎΠ΄Π° Π½Π° Π³Ρ€Π°Ρ„ичСскоС устройство. Π—Π΄Π΅ΡΡŒ ΠΆΠ΅ Π±ΡƒΠ΄ΡƒΡ‚ рассмотрСны Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ вопросы осущСствлСния Π²Ρ‹Π²ΠΎΠ΄Π° Π½Π° ΠΏΡ€ΠΈΠ½Ρ‚Π΅Ρ€, Π½Π΅ ΡΠ²ΡΠ·Π°Π½Π½Ρ‹Π΅ с GDI нСпосрСдствСнно.

ΠšΠΎΠ½Ρ‚Π΅ΠΊΡΡ‚ устройства

ΠŸΠΎΠ²Ρ‚ΠΎΡ€ΠΈΠΌ Π²ΠΊΡ€Π°Ρ‚Ρ†Π΅ основныС полоТСния, сформулированныС ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠΌ знакомствС:

ВсС срСдства Π²Ρ‹Π²ΠΎΠ΄Π° Π² Windows относятся ΠΊ графичСскому интСрфСйсу устройств (GDI). GDI прСдставляСт собой Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ для выполнСния графичСского Π²Ρ‹Π²ΠΎΠ΄Π° Π½Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… устройствах, Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π° Π΄ΠΈΡΠΏΠ»Π΅Π΅.

ВсС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ GDI Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‚ с контСкстом устройства (device context, DC). Π’Π°ΠΊ Ρ‡Ρ‚ΠΎ для осущСствлСния Π²Ρ‹Π²ΠΎΠ΄Π° Π½Π° ΡƒΡΡ‚ройство Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Ρ‚Ρ€ΠΈ основных шага:

ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Ρ…Π΅Π½Π΄Π» контСкста этого устройства ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²ΠΈΡ‚ΡŒ собствСнно Π²Ρ‹Π²ΠΎΠ΄ Π½Π° ΡΡ‚ΠΎ устройство (рисованиС, Π²Ρ‹Π²ΠΎΠ΄ тСкста ΠΈ ΠΏΡ€.)

ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΎΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΡ‚ΡŒ контСкст устройства.

БущСствуСт Π΄Π²Π° способа получСния Ρ…Π΅Π½Π΄Π»Π° контСкста устройства — созданиС ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ контСкста устройства. Π‘ΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ достаточно спСцифичныС контСксты, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΡ€ΠΈΠ½Ρ‚Π΅Ρ€Π°. Π’Π°ΠΊΠΈΠ΅ контСксты послС использования Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡƒΠ½ΠΈΡ‡Ρ‚ΠΎΠΆΠ°Ρ‚ΡŒ. Π’Π°ΠΊ ΠΊΠ°ΠΊ созданиС ΠΈ ΡƒΠ½ΠΈΡ‡Ρ‚ΠΎΠΆΠ΅Π½ΠΈΠ΅ контСкста Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅, хотя ΠΈ Π½Π΅Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ врСмя, ΠΈ, ΠΊΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Π² Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ случаСв ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡŽΡ‚ Π²Ρ‹Π²ΠΎΠ΄ Π½Π° Π΄ΠΈΡΠΏΠ»Π΅ΠΉ, Ρ‚ΠΎ ΡΡ‚ΠΎΡ‚ процСсс нСсколько ускорили: Π² ΡΠΈΡΡ‚Π΅ΠΌΠ΅ Π·Π°Ρ€Π°Π½Π΅Π΅ создаСтся нСсколько контСкстов, связанных с Π΄ΠΈΡΠΏΠ»Π΅Π΅ΠΌ. ΠŸΡ€ΠΈ Π²Ρ‹Π²ΠΎΠ΄Π΅ Π² ΠΎΠΊΠ½ΠΎ ΠΈΠ»ΠΈ Π½Π° Π΄ΠΈΡΠΏΠ»Π΅ΠΉ Π½ΠΎΠ²Ρ‹ΠΉ контСкст Π½Π΅ создаСтся, Π° получаСтся ΠΈΠ· Ρ‡ΠΈΡΠ»Π° ΡƒΠΆΠ΅ Π·Π°Π³ΠΎΡ‚ΠΎΠ²Π»Π΅Π½Π½Ρ‹Ρ… систСмой. ПослС использования Ρ‚Π°ΠΊΠΎΠΉ контСкст Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ освобоТдСн, Π° Π½Π΅ ΡƒΠ½ΠΈΡ‡Ρ‚ΠΎΠΆΠ΅Π½. ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ контСкста осущСствляСтся быстрСС, Ρ‡Π΅ΠΌ Π΅Π³ΠΎ созданиС (Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π² ΡΠΈΡΡ‚Π΅ΠΌΠ΅ Π·Π°Ρ€Π°Π½Π΅Π΅ создано Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ количСство Ρ‚Π°ΠΊΠΈΡ… контСкстов), Π½ΠΎ Π·Π°Ρ‚ΠΎ ΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ ΠΈ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π΅Π½ Π² ΠΏΡ€ΠΎΡ†Π΅ΡΡΠ΅ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ сообщСния — ΠΈΠ½Π°Ρ‡Π΅ всС Π·Π°Π³ΠΎΡ‚ΠΎΠ²Π»Π΅Π½Π½Ρ‹Π΅ контСксты ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ занятыми Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ процСссами ΠΈΠ»ΠΈ ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ Ρ€Π°Π±ΠΎΡ‚Π° систСмы окаТСтся Π½Π°Ρ€ΡƒΡˆΠ΅Π½Π½ΠΎΠΉ.

ΠšΠΎΠ½Ρ‚Π΅ΠΊΡΡ‚ устройства описываСт Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹Π΅ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ контСкста ΠΈ Π½Π΅ΠΏΠΎΡΡ€Π΅Π΄ΡΡ‚Π²Π΅Π½Π½ΠΎ характСристики устройства.

Атрибуты контСкста устройства нСзависимы ΠΎΡ‚ ΡΠ°ΠΌΠΎΠ³ΠΎ устройства. Они Ρ…Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€ΠΈΠ·ΡƒΡŽΡ‚ Ρ‚ΠΎ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€ΠΈΡΠΎΠ²Π°Ρ‚ΡŒΡΡ. Π’ Ρ‡ΠΈΡΠ»ΠΎ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ² входят кисти, ΠΏΠ΅Ρ€ΡŒΡ, ΡˆΡ€ΠΈΡ„Ρ‚Ρ‹, Ρ†Π²Π΅Ρ‚ тСкста, Ρ†Π²Π΅Ρ‚ Ρ„ΠΎΠ½Π° ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠ΅ Π΄Ρ€ΡƒΠ³ΠΎΠ΅.

Π˜Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡ ΠΎΠ± ΡƒΡΡ‚ройствС описываСт нСпосрСдствСнно возмоТности самого графичСского устройства. Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ GDI Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‚ с ΡƒΡΡ‚ройством опосрСдованно — Ρ‡Π΅Ρ€Π΅Π· контСкст ΠΈ Ρ‡Π΅Ρ€Π΅Π· Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ этого устройства. Для обСспСчСния ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ срСдств Π²Ρ‹Π²ΠΎΠ΄Π° ΠΎΡ‚ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ΠΎΠ² трСбуСтся ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ. ΠŸΡ€ΠΈ нСобходимости Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ слоТныС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ GDI Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΈΠ²Π»Π΅ΠΊΠ°Ρ‚ΡŒ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹Π΅ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ, ΡΠ²Π»ΡΡŽΡ‰ΠΈΠ΅ΡΡ Ρ‡Π°ΡΡ‚ΡŒΡŽ самого GDI. Π’ ΡΠ»ΡƒΡ‡Π°Π΅ использования устройств, способных Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, GDI Π±ΡƒΠ΄Π΅Ρ‚ Π½Π°ΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ запросы нСпосрСдствСнно Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Ρƒ этого устройства, Π° Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ собствСнныС Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ.

Рисунок 1. Π’Ρ‹Π²ΠΎΠ΄ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ с ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ контСкста устройства Π² Windows

Как ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π΅ Π·Π°Π±ΠΎΡ‚ΠΈΡ‚ΡŒΡΡ ΠΎ Ρ…арактСристиках устройств, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Ρ€Π΅Π°Π»ΡŒΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Однако, ΠΏΡ€ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ слоТных ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΡˆΠΈΡ€ΠΎΠΊΠΎ Ρ€Π°ΡΠΏΡ€ΠΎΡΡ‚Ρ€Π°Π½ΡΡ‚ΡŒΡΡ, Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ всС-Ρ‚Π°ΠΊΠΈ ΠΏΠΎΠ·Π°Π±ΠΎΡ‚ΠΈΡ‚ΡŒΡΡ ΠΎ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… вопросах совмСстимости — Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΡ€ΠΈ Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΈ Ρ†Π²Π΅Ρ‚ΠΎΠ² стоит ΠΈΡ… ΠΏΠΎΠ΄Π±ΠΈΡ€Π°Ρ‚ΡŒ Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎ Π±Ρ‹ ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π΅ Π½Π° Ρ‡Π΅Ρ€Π½ΠΎ-Π±Π΅Π»ΠΎΠ΅ ΠΎΠ±ΠΎΡ€ΡƒΠ΄ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΎΡΡ‚Π°Π»ΠΎΡΡŒ Π±Ρ‹ Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΠΌΡ‹ΠΌ. Часто Π»ΡƒΡ‡ΡˆΠΈΠΌ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ΠΌ являСтся Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π»Π΅Π³ΠΊΠΎΠΉ настройки ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ ΠΏΠΎΠ΄ Π΅Π³ΠΎ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΡƒΡŽ Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚ΡƒΡ€Ρƒ, Π»ΠΈΠ±ΠΎ использованиС Ρ‚ΠΎΠ»ΡŒΠΊΠΎ систСмных Ρ†Π²Π΅Ρ‚ΠΎΠ² (ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ, Ссли для всСх ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅ΠΌΡ‹Ρ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ, прСдусмотрСны систСмныС Ρ†Π²Π΅Ρ‚Π°).

ΠžΠ±Ρ‹Ρ‡Π½ΠΎ Π½Π°Π΄ΠΎ ΠΏΠΎΠ·Π°Π±ΠΎΡ‚ΠΈΡ‚ΡŒΡΡ ΠΎ Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ прилоТСния Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… случаях:

Ссли ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ осущСствляСт Π²Ρ‹Π²ΠΎΠ΄ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² ΠΎΠΊΠ½ΠΎ, Ρ‚ΠΎ Π½Π°Π΄ΠΎ ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρ‹:

с Ρ€Π°Π·Π½Ρ‹ΠΌ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ΠΌ — ΠΎΡ‚ 640×400, 640×480 ΠΈ Π΄ΠΎ Ρ‡Π°ΡΡ‚ΠΎ Π²ΡΡ‚Ρ€Π΅Ρ‡Π°ΡŽΡ‰ΠΈΡ…ΡΡ 1024×768, 1280×1024. Π‘Ρ‹Π»ΠΎ Π±Ρ‹ ΠΎΡ‡Π΅Π½ΡŒ ΠΆΠ΅Π»Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, Ρ‡Ρ‚ΠΎ Π±Ρ‹ Π΄Π°ΠΆΠ΅ Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ 640×400 всС Π΄ΠΈΠ°Π»ΠΎΠ³ΠΈ ΠΈ ΠΎΠΊΠ½Π° ΠΏΠΎΠΌΠ΅Ρ‰Π°Π»ΠΈΡΡŒ Π½Π° ΡΠΊΡ€Π°Π½Π΅.

с Ρ€Π°Π·Π½Ρ‹ΠΌ числом Ρ†Π²Π΅Ρ‚ΠΎΠ² — ΠΎΡ‚ 16 ΠΈ Π΄ΠΎ Π±ΠΎΠ»Π΅Π΅ Ρ‡Π΅ΠΌ 16 ΠΌΠΈΠ»Π»ΠΈΠΎΠ½ΠΎΠ² Ρ†Π²Π΅Ρ‚ΠΎΠ². ΠŸΡ€ΠΈ этом Π½Π°Π΄ΠΎ ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ количСство Ρ†Π²Π΅Ρ‚ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ поддСрТиваСтся Π²ΠΈΠ΄Π΅ΠΎΠΊΠ°Ρ€Ρ‚ΠΎΠΉ, Ρ‚Π°ΠΊ ΠΈ ΠΊΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ Ρ†Π²Π΅Ρ‚ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΎΡΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ΡŒ дисплСй. Чисто монохроматичСскиС дисплСи (Ρ‡Π΅Ρ€Π½Ρ‹ΠΉ ΠΈ Π±Π΅Π»Ρ‹ΠΉ) ΡƒΠΆΠ΅ практичСски Π½Π΅ Π²ΡΡ‚Ρ€Π΅Ρ‡Π°ΡŽΡ‚ΡΡ, Π° Π²ΠΎΡ‚ дисплСи Π΄Π΅ΡˆΠ΅Π²Ρ‹Ρ… пСрСносных ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ΠΎΠ² часто Π΄Π°ΡŽΡ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ 8−16 Π³Ρ€Π°Π΄Π°Ρ†ΠΈΠΉ сСрого; ΠΏΡ€ΠΈΡ‡Π΅ΠΌ Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΠΌΠΎΡΡ‚ΡŒ Ρ†Π²Π΅Ρ‚ΠΎΠ² ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π½Π΅Π²Π΅Π»ΠΈΠΊΠ°. Π‘Ρ€Π°Π²Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ€Π΅Π΄ΠΊΠΈΠΉ случай, ΠΊΠΎΠ³Π΄Π° ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΡΡ‚Ρ€Π΅Ρ‚ΠΈΡ‚ΡŒΡΡ монохроматичСский дисплСй — Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π½Π° ΡΠ΅Ρ€Π²Π΅Ρ€Π°Ρ….

с Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ настройками систСмной ΠΏΠ°Π»ΠΈΡ‚Ρ€Ρ‹; Π²ΠΊΠ»ΡŽΡ‡Π°Ρ контрастныС ΠΈ ΡΠ½Π΅Ρ€Π³ΠΎΡΠ±Π΅Ρ€Π΅Π³Π°ΡŽΡ‰ΠΈΠ΅ Ρ€Π΅ΠΆΠΈΠΌΡ‹ (ΠΈΠ½ΠΎΠ³Π΄Π° ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ для пСрСносных ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ΠΎΠ²) Ссли ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ способно Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒ Π½Π° ΠΏΡ€ΠΈΠ½Ρ‚Π΅Ρ€, Ρ‚ΠΎ Π½Π°Π΄ΠΎ ΠΈΠΌΠ΅Ρ‚ΡŒ Π² Π²ΠΈΠ΄Ρƒ, Ρ‡Ρ‚ΠΎ вмСсто ΠΏΡ€ΠΈΠ½Ρ‚Π΅Ρ€Π° ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ ΠΏΠ»ΠΎΡ‚Ρ‚Π΅Ρ€, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ…ΠΎΡ€ΠΎΡˆΠΎ рисуСт Π»ΠΈΠ½ΠΈΠΈ, Π½ΠΎ ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒ растровых ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ, Π»ΠΈΠ±ΠΎ АЦПУ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ способно Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠ΅Ρ‡Π°Ρ‚Π°Ρ‚ΡŒ тСкст.

ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎΠ± ΡƒΡΡ‚ройствС

ΠšΠΎΠ½Ρ‚Π΅ΠΊΡΡ‚ устройства содСрТит Π΄Π²Π° Π²ΠΈΠ΄Π° Π΄Π°Π½Π½Ρ‹Ρ… — ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎΠ± ΡƒΡΡ‚ройствС ΠΈ Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹Π΅ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ контСкста. Π˜Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡ ΠΎΠ± ΡƒΡΡ‚ройствС Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π² ΡΠ΅Π±Ρ описаниС нСпосрСдствСнно Ρ‚ΠΎΠ³ΠΎ графичСского устройства, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡ‚ΡŒΡΡ Π²Ρ‹Π²ΠΎΠ΄ ΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΠΈ этого устройства ΠΏΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡŽ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Π½Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ GDI. Π­Ρ‚ΠΈ Π΄Π°Π½Π½Ρ‹Π΅ спСцифичны для Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚ΡƒΡ€Ρ‹.

Для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Π±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎΠ± ΡƒΡΡ‚ройствС Π² GDI прСдусмотрСна функция int GetDeviceCaps (hDC, nIndex);

Π­Ρ‚Π° функция Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Ρ†Π΅Π»ΠΎΠ΅ число, ΡΠ²Π»ΡΡŽΡ‰Π΅Π΅ΡΡ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΌ nIndex ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° устройства. Π’ windows. h ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ количСство символичСских ΠΈΠΌΠ΅Π½, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‰ΠΈΡ… Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ GetDeviceCaps Π΄Π°Π½Π½Ρ‹Π΅. Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ΅ число ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ собой ΠΊΠ°ΠΊ нСпосрСдствСнноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°Π΅ΠΌΠΎΠ³ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΡˆΠΈΡ€ΠΈΠ½Ρƒ устройства Π² ΠΌΠΈΠ»Π»ΠΈΠΌΠ΅Ρ‚Ρ€Π°Ρ…), Π»ΠΈΠ±ΠΎ Π±ΠΈΡ‚ΠΎΠ²ΠΎΠΉ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒΡŽ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ Π±ΠΈΡ‚Ρ‹ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Ρ„Π»Π°Π³Π°ΠΌΠΈ (см., Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ RASTERCAPS). ΠŸΠΎΠ»Π½Ρ‹ΠΉ список всСх Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… характСристик устройства вСсьма ΠΎΠ±ΡˆΠΈΡ€Π΅Π½, поэтому ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ΡŒ Π΅Π³ΠΎ здСсь Π½Π΅ Π±ΡƒΠ΄Π΅ΠΌ; ΠΏΡ€ΠΈ нСобходимости ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ ΠΊ Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎΠΌΡƒ описанию Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ GetDeviceCaps Π² Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ. НСкоторыС ΠΈΠ· Π½ΠΈΡ…:

DRIVERVERSION

ВСрсия Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π°. 0×0100 ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ Π²Π΅Ρ€ΡΠΈΡŽ 1.0

HORZSIZE, VERTSIZE

Ρ€Π°Π·ΠΌΠ΅Ρ€ устройства Π²Ρ‹Π²ΠΎΠ΄Π° Π² ΠΌΠΈΠ»Π»ΠΈΠΌΠ΅Ρ‚Ρ€Π°Ρ…

HORZRES, VERTRES

Ρ€Π°Π·ΠΌΠ΅Ρ€ устройства Π²Ρ‹Π²ΠΎΠ΄Π° Π² Π΅Π΄ΠΈΠ½ΠΈΡ†Π°Ρ… устройства Π²Ρ‹Π²ΠΎΠ΄Π° (пиксСлях)

LOGPIXELSX,

LOGPIXELSY

число Π΅Π΄ΠΈΠ½ΠΈΡ† устройства (пиксСлСй), приходящССся Π½Π° ΠΎΠ΄ΠΈΠ½ логичСский дюйм ЛогичСский дюйм часто Ρ€Π°Π²Π΅Π½ физичСскому. ΠŸΡ€ΠΈ Π²Ρ‹Π²ΠΎΠ΄Π΅ Π½Π° ΡΠΊΡ€Π°Π½ Ρ€Π°Π·Ρ€Π΅ΡˆΠ°ΡŽΡ‰Π°Ρ ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ‚ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ чСрСсчур Π½ΠΈΠ·ΠΊΠΎΠΉ, ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с Ρ€Π°Π·Ρ€Π΅ΡˆΠ°ΡŽΡ‰Π΅ΠΉ ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ‚ΡŒΡŽ ΠΏΡ€ΠΈΠ½Ρ‚Π΅Ρ€Π°. ΠŸΡ€ΠΈ этом становится цСлСсообразным нСсколько ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Ρ‚ΡŒ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ΅ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Π±Ρ‹ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΏΡ€ΠΈΠ΅ΠΌΠ»Π΅ΠΌΠΎΠ΅ восприятиС изобраТСния. Π’Π°ΠΊ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΡˆΡ€ΠΈΡ„Ρ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ 8 ΠΏΡƒΠ½ΠΊΡ‚ΠΎΠ² Π½Π° ΠΏΡ€ΠΈΠ½Ρ‚Π΅Ρ€Π΅ читаСтся ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ свободно, Π½ΠΎ ΠΏΡ€ΠΈ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ Π½Π° ΡΠΊΡ€Π°Π½Π΅ Π² Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΌ ΠΌΠ°ΡΡˆΡ‚Π°Π±Π΅ Π±ΡƒΠΊΠ²Ρ‹ часто становятся ΠΏΠ»ΠΎΡ…ΠΎ Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΠΌΡ‹ΠΌΠΈ. ЛогичСский дюйм это Π»ΠΈΠ±ΠΎ Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ дюйм — для устройств с Π²Ρ‹ΡΠΎΠΊΠΎΠΉ Ρ€Π°Π·Ρ€Π΅ΡˆΠ°ΡŽΡ‰Π΅ΠΉ ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ‚ΡŒΡŽ, Π»ΠΈΠ±ΠΎ большС — для устройств с Π½ΠΈΠ·ΠΊΠΎΠΉ Ρ€Π°Π·Ρ€Π΅ΡˆΠ°ΡŽΡ‰Π΅ΠΉ ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ‚ΡŒΡŽ.

BITSPERPIXEL

число Π±ΠΈΡ‚ Π½Π° 1 пиксСль

PLANES

число Π±ΠΈΡ‚ΠΎΠ²Ρ‹Ρ… ΠΏΠ»Π°Π½ΠΎΠ²

TECHNOLOGY

Ρ‚ΠΈΠΏ устройства, ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ значСния:

DT_PLOTTER Π²Π΅ΠΊΡ‚ΠΎΡ€Π½Ρ‹ΠΉ ΠΏΠ»ΠΎΡ‚Ρ‚Π΅Ρ€

DT_RASDISPLAY растровый дисплСй

DT_RASPRINTER растровый ΠΏΡ€ΠΈΠ½Ρ‚Π΅Ρ€

DT_RASCAMERA растровая ΠΊΠ°ΠΌΠ΅Ρ€Π°

DT_CHARSTREAM ΠΏΠΎΡ‚ΠΎΠΊ символов

DT_METAFILE ΠΌΠ΅Ρ‚Π°Ρ„Π°ΠΉΠ»

DT_DISPFILE дисплСйный Ρ„Π°ΠΉΠ»

NUMBRUSHES

Число встроСнных кистСй

NUMPENS

Число встроСнных ΠΏΠ΅Ρ€ΡŒΠ΅Π²

ASPECTX

ΠžΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ ΡˆΠΈΡ€ΠΈΠ½Π° пиксСля

ASPECTY

ΠžΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ высота пиксСля

ASPECTXY

ΠžΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ диагональ пиксСля

RASTERCAPS

Битовая маска, ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰Π°Ρ возмоТности устройства ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с Ρ€Π°ΡΡ‚Ρ€ΠΎΠ²Ρ‹ΠΌΠΈ опСрациями

RC_BANDING ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ пополосный Π²Ρ‹Π²ΠΎΠ΄

RC_BITBLT ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ Π±ΠΈΡ‚ΠΌΠ°ΠΏΡ‹

RC_BITMAP64 Π±ΠΈΡ‚ΠΌΠ°ΠΏΡ‹ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ большС 64К

RC_DI_BITMAP ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ нСзависимыС ΠΎΡ‚ ΡƒΡΡ‚ройства Π±ΠΈΡ‚ΠΌΠ°ΠΏΡ‹

RC_DIBTODEV ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ SetDIBitsToDevice

RC_FLOODFILL ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ Π·Π°Π»ΠΈΠ²ΠΊΡƒ Π·Π°ΠΌΠΊΠ½ΡƒΡ‚Ρ‹Ρ… ΠΊΠΎΠ½Ρ‚ΡƒΡ€ΠΎΠ²

RC_GDI20_OUTPUT ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ вСрсии 2.0 GDI

RC_PALETTE устройство ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΏΠ°Π»ΠΈΡ‚Ρ€Ρƒ

RC_SCALING устройство ΠΌΠΎΠΆΠ΅Ρ‚ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ

RC_STRETCHBLT устройство ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ StretchBlt

RC_STRETCHDIB устройство ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ StretchDIBits…

Одной ΠΈΠ· ΠΈΠ΄Π΅ΠΉ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ GDI Π±Ρ‹Π»ΠΎ обСспСчСниС Π΅Π΄ΠΈΠ½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ интСрфСйса со Π²ΡΠ΅ΠΌΠΈ устройствами, ΠΎΠ΄Π½Π°ΠΊΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π΅ Π² ΠΏΠΎΠ»Π½ΠΎΠΉ ΠΌΠ΅Ρ€Π΅ практичСски Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π²Π°ΠΌ ΠΈΠ½ΠΎΠ³Π΄Π° придСтся ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ характСристики устройства, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π²Ρ‹ ΠΎΡΡƒΡ‰Π΅ΡΡ‚вляСтС Π²Ρ‹Π²ΠΎΠ΄. НапримСр, Ссли Π²Ρ‹ ΡΠΎΠ±ΠΈΡ€Π°Π΅Ρ‚Π΅ΡΡŒ ΠΎΡ‚ΠΎΠ±Ρ€Π°Π·ΠΈΡ‚ΡŒ Π½Π° ΠΏΡ€ΠΈΠ½Ρ‚Π΅Ρ€Π΅ ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ Π±ΠΈΡ‚ΠΌΠ°ΠΏ, Ρ‚ΠΎ Π½Π°Π΄ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ Π±ΠΈΡ‚ RC_BITBLT Π² ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π΅ RASTERCAPS, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΏΠ»ΠΎΡ‚Ρ‚Π΅Ρ€Ρ‹ ΠΈ ΠΠ¦ΠŸΠ£ Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с Ρ€Π°ΡΡ‚Ρ€ΠΎΠ²Ρ‹ΠΌΠΈ изобраТСниями; ΠΈΠ»ΠΈ Π²Π°ΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ ΡƒΠ·Π½Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊΠΎΠ΅ число Ρ†Π²Π΅Ρ‚ΠΎΠ² ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΎ Π½Π° Π΄ΠΈΡΠΏΠ»Π΅Π΅ ΠΈΠ»ΠΈ Ρ†Π²Π΅Ρ‚Π½ΠΎΠΌ ΠΏΡ€ΠΈΠ½Ρ‚Π΅Ρ€Π΅ ΠΈ Ρ‚. Π΄.

Атрибуты контСкста устройства

Атрибуты контСкста ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ ΡƒΠΆΠ΅ Π½Π΅ ΡΠ°ΠΌΠΎ устройство, Π° Ρ‚Π΅ «ΠΈΠ½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚Ρ‹» ΠΈ ΠΏΡ€Π°Π²ΠΈΠ»Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ ΠΈ ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡ‚ΡŒΡΡ Π²Ρ‹Π²ΠΎΠ΄ Π½Π° ΡΡ‚ΠΎ устройство. Атрибуты контСкста ΡΠ²Π»ΡΡŽΡ‚ΡΡ нСзависимыми ΠΎΡ‚ Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚ΡƒΡ€Ρ‹.

ΠšΠΎΠ½Ρ‚Π΅ΠΊΡΡ‚ устройства содСрТит, ΠΏΠΎΠΌΠΈΠΌΠΎ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎΠ± ΡƒΡΡ‚ройствС, Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹Π΅ «Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹» контСкста. Π’Π°ΠΊ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌ тСкст, Ρ‚ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΠ΅ΠΌ Ρ‚ΠΎΡ‚ ΠΈΠ»ΠΈ ΠΈΠ½ΠΎΠΉ ΡˆΡ€ΠΈΡ„Ρ‚. Π’Π΅ΠΊΡƒΡ‰ΠΈΠΉ ΡˆΡ€ΠΈΡ„Ρ‚ — это ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ² контСкста устройства. Аналогично ΠΏΠ΅Ρ€ΡŒΡ, кисти, Ρ†Π²Π΅Ρ‚Π° ΠΈ Π΄Ρ€. Ρ‚ΠΎΠΆΠ΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°ΠΌΠΈ контСкста устройства. ΠŸΡ€ΠΈΠ²Π΅Π΄Π΅ΠΌ ΠΏΠΎΠ»Π½ΡƒΡŽ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ²:

НазваниС Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°

Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅

Π£ΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ

ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ

Mapping mode

БистСма ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚

MM_TEXT

SetMapMode

GetMapMode

Window origin

Начало отсчСта Π² Π»ΠΎΠ³ΠΈΡ‡Π΅ΡΠΊΠΈΡ… ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π°Ρ…

0,0

SetWindowOrg 0

SetWindowOrgEx

OffsetWindowOrg 0

OffsetWindowOrgEx

GetWindowOrg 0

GetWindowOrgEx

Viewport origin

Начало отсчСта Π² ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π°Ρ… устройства

0,0

SetViewportOrg 0

SetViewportOrgEx

OffsetViewportOrg 0

OffsetViewportOrgEx

GetViewportOrg 0

GetViewportOrgEx

Window extents

ΠœΠ°ΡΡˆΡ‚Π°Π±Π½Ρ‹Π΅ коэффициСнты систСмы ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚

1,1

SetWindowExt 0

SetWindowExtEx

SetMapMode

ScaleWindowExt 0

ScaleWindowExtEx

GetWindowExt 0

GetWindowExtEx

Viewport extents

ΠœΠ°ΡΡˆΡ‚Π°Π±Π½Ρ‹Π΅ коэффициСнты систСмы ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚

1,1

SetViewportExt 0

SetViewportExtEx

SetMapMode

ScaleViewportExt 0

ScaleViewportExtEx

GetViewportExt 0

GetViewportExtEx

Pen

ΠŸΠ΅Ρ€ΠΎ (ΠΊΠ°Ρ€Π°Π½Π΄Π°Ρˆ)

BLACK_PEN

SelectObject

SelectPen 2

SelectObject

SelectPen 2

Current pen position

ВСкущая позиция ΠΏΠ΅Ρ€Π°

0,0

MoveTo 0

MoveToEx

LineTo

GetCurrentPosition 0

GetCurrentPositionEx

Brush

ΠšΠΈΡΡ‚ΡŒ

WHITE_BRUSH

SelectObject

SelectBrush 2

SelectObject

SelectBrush 2

Brush origin

ΠΠ°Ρ‡Π°Π»ΡŒΠ½Π°Ρ Ρ‚ΠΎΡ‡ΠΊΠ° кисти

0,0 (screen)

SetBrushOrg 0

SetBrushOrgEx

GetBrushOrg 0

GetBrushOrgEx

Font

Π¨Ρ€ΠΈΡ„Ρ‚

SYSTEM_FONT

SelectObject

SelectFont 2

SelectObjectSelectFont 2

Bitmap

АссоциируСмый Π±ΠΈΡ‚ΠΌΠ°ΠΏ

отсутствуСт

SelectObject

SelectBitmap 2

SelectObject

SelectBitmap 2

Background mode

Π Π΅ΠΆΠΈΠΌ заполнСния Ρ„ΠΎΠ½Π°

OPAQUE

SetBkMode

GetBkMode

Background color

Π¦Π²Π΅Ρ‚ Ρ„ΠΎΠ½Π°

White

SetBkColor

GetBkColor

Text color

Π¦Π²Π΅Ρ‚ тСкста

BLACK

SetTextColor

GetTextColor

Drawing mode

Π Π΅ΠΆΠΈΠΌ рисования

R2_COPYPEN

SetROP2

GetROP2

Stretching mode

Π Π΅ΠΆΠΈΠΌ сТатия изобраТСния

BLACKONWHITE

SetStretchBltMode

GetStretchBltMode

Polygon filling mode

Π Π΅ΠΆΠΈΠΌ заполнСния ΠΌΠ½ΠΎΠ³ΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠΎΠ²

ALTERNATE

SetPolyFillMode

GetPolyFillMode

Text Alignment

ΠŸΡ€ΠΈΠ²ΡΠ·ΠΊΠ° тСкста

TA_LEFT|TA_TOP

SetTextAlign

GetTextAlign

Intercharacter spacing

ΠœΠ΅ΠΆΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹ΠΉ ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΠΊ

SetTextCharacterExtra

GetTextCharacterExtra

Text Justification

Π’Ρ‹Ρ€Π°Π²Π½ΠΈΠ²Π°Π½ΠΈΠ΅ строки

0,0

SetTextJustification

SetTextJustification

Clipping region

ΠžΠ±Π»Π°ΡΡ‚ΡŒ отобраТСния

отсутствуСт

SelectObject

SelectClipRgn

IntersectClipRect

OffsetClipRect

ExcludeClipRect

SelectObject

GetClipBox

Arc direction

НаправлСниС рисования Π΄ΡƒΠ³

AD_COUNTERCLOCKWISE

SetArcDirection

GetArcDirection

Π’ ΡΠ»ΡƒΡ‡Π°Π΅ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ Win32

Miter Limit

Π’Π΅Π»ΠΈΡ‡ΠΈΠ½Π° спрямлСния сопрягаСмых Π»ΠΈΠ½ΠΈΠΉ

10.0

SetMiterLimit 1

GetMiterLimit 1

Graphics Mode

Π Π΅ΠΆΠΈΠΌ задания ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚

GM_COMPATIBLE

SetGraphicsMode 1

GetGraphicsMode 1

World Transformation Matrix

ΠœΠ°Ρ‚Ρ€ΠΈΡ†Π° прСобразования Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚

1.0,0.0,0.0

0.0,1.0,0.0

SetWorldTransform 1

GetWorldTransform 1

Π’ ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… Ρ€Π°Π·Π΄Π΅Π»Π°Ρ… всС эти Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ Π±ΡƒΠ΄ΡƒΡ‚ рассмотрСны ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΊ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΡŽ Ρ‚Π΅Ρ… ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²ΠΎΠ², Π½Π° ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΎΠ½ΠΈ Π²Π»ΠΈΡΡŽΡ‚.

Если Π²Ρ‹ Π² ΠΏΡ€ΠΎΡ†Π΅ΡΡΠ΅ рисования измСняли ΠΊΠ°ΠΊΠΈΠ΅-Π»ΠΈΠ±ΠΎ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹, Ρ‚ΠΎ ΠΏΠΎΡΠ»Π΅ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ контСкст Π±Ρ‹Π» освобоТдСн (ΡƒΠ΄Π°Π»Π΅Π½) всС ваши измСнСния Ρ‚Π΅Ρ€ΡΡŽΡ‚ΡΡ, Π° ΡΡ€Π°Π·Ρƒ послС получСния ΠΈΠ»ΠΈ создания контСкста устройства всС Π΅Π³ΠΎ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°ΡŽΡ‚ΡΡ Π² ΡΡ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½ΠΎΠ΅ состояниС, ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠ΅ Π² ΡΡ‚ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Π΅. Из ΡΡ‚ΠΎΠ³ΠΎ ΠΏΡ€Π°Π²ΠΈΠ»Π° Π΅ΡΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½ΠΎ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ — Ссли Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ сохранСниС контСкста устройства. Об ΡΡ‚ΠΎΠΌ — Π½ΠΈΠΆΠ΅.

ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ Ρ…Π΅Π½Π΄Π»Π° контСкста устройства

Как Π±Ρ‹Π»ΠΎ ΠΎΡ‚ΠΌΠ΅Ρ‡Π΅Π½ΠΎ Π²Ρ‹ΡˆΠ΅, сущСствуСт Π΄Π²Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π° получСния контСкста устройства — созданиС ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ контСкста устройства. Π Π°Π·Π½ΠΈΡ†Π° связана с Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ созданиС ΠΈ, ΠΏΠΎΠ·ΠΆΠ΅, ΡƒΠ½ΠΈΡ‡Ρ‚ΠΎΠΆΠ΅Π½ΠΈΠ΅ контСкста устройства Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ врСмя. Если Π²Ρ‹ ΡΠΎΠ±ΠΈΡ€Π°Π΅Ρ‚Π΅ΡΡŒ ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡ‚ΡŒ Π²Ρ‹Π²ΠΎΠ΄ Π½Π° ΠΏΡ€ΠΈΠ½Ρ‚Π΅Ρ€, Ρ‚ΠΎ ΡΡ‚ΠΈ Π·Π°Ρ‚Ρ€Π°Ρ‚Ρ‹ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π½ΠΈΡ‡Ρ‚ΠΎΠΆΠ½ΠΎ ΠΌΠ°Π»Ρ‹, ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ со Π²ΡΠ΅ΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ ΠΏΠ΅Ρ‡Π°Ρ‚ΠΈ. Однако, Ссли Π²Ρ‹ ΡΠΎΠ±ΠΈΡ€Π°Π΅Ρ‚Π΅ΡΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡ‚ΡŒ рисованиС Π² ΠΎΠΊΠ½Π΅ (ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠ±Π½ΠΎΠ²Π»ΡΡ‚ΡŒΡΡ ΠΎΡ‡Π΅Π½ΡŒ часто), Ρ‚ΠΎ Π΄Π°ΠΆΠ΅ ΡΡ€Π°Π²Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ быстрая опСрация создания контСкста, повторСнная ΠΌΠ½ΠΎΠ³ΠΎΠΊΡ€Π°Ρ‚Π½ΠΎ, Π·Π°ΠΉΠΌΠ΅Ρ‚ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ врСмя. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π² Windows сущСствуСт нСсколько Π·Π°Ρ€Π°Π½Π΅Π΅ созданных контСкстов, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… дисплСю. ΠŸΡ€ΠΈ Π²Ρ‹Π²ΠΎΠ΄Π΅ Π² ΠΎΠΊΠ½ΠΎ контСкст ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Π½Π΅ Π½Π°Π΄ΠΎ, Π½Π°Π΄ΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰ΠΈΡ… Ρ‚Π°ΠΊΠΎΠΉ Π·Π°Ρ€Π°Π½Π΅Π΅ Π·Π°Π³ΠΎΡ‚ΠΎΠ²Π»Π΅Π½Π½Ρ‹ΠΉ контСкст устройства.

Π‘ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΠ³ΠΎ, Π² Windows ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, ΡΠΎΠ·Π΄Π°ΡŽΡ‰ΠΈΠ΅ контСкст, ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Ρ‹ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΡƒΡΡ‚ройством Ρ†Π΅Π»ΠΈΠΊΠΎΠΌ, Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰ΠΈΠ΅ ΡƒΠΆΠ΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ — с ΠΎΠΊΠ½ΠΎΠΌ. Π Π°Π·Π½ΠΈΡ†Π° Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠΈ систСмы ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚, связанной с ΠΊΠΎΠ½Ρ‚Скстом. Π’ ΠΏΠ΅Ρ€Π²ΠΎΠΌ случаС систСма ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ связана с Π²Π΅Ρ€Ρ…Π½ΠΈΠΌ Π»Π΅Π²Ρ‹ΠΌ ΡƒΠ³Π»ΠΎΠΌ устройства, Π° Π²ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΌ случаС — с Π²Π΅Ρ€Ρ…Π½ΠΈΠΌ Π»Π΅Π²Ρ‹ΠΌ ΡƒΠ³Π»ΠΎΠΌ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΉ (Π»ΠΈΠ±ΠΎ внСшнСй) области ΠΎΠΊΠ½Π°.

Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅! ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌΡ‹Π΅ контСксты Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Ρ‹ ΠΈ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π΅Π½Ρ‹ Π² ΠΏΡ€ΠΎΡ†Π΅ΡΡΠ΅ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ сообщСния, Π² Ρ‚ΠΎ Π²Ρ€Π΅ΠΌΡ ΠΊΠ°ΠΊ создаваСмыС контСксты устройства ΠΌΠΎΠ³ΡƒΡ‚ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ врСмя.

БущСствуСт 7 основных ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² получСния ΠΈ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π΅Π½ΠΈΡ контСкста устройства; ΠΏΡ€ΠΈΡ‡Π΅ΠΌ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ создаСт спСцифичный контСкст устройства, ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½Ρ‹ΠΉ для выполнСния ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… дСйствий. Надо Ρ…ΠΎΡ€ΠΎΡˆΠΎ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ, Π² ΠΊΠ°ΠΊΠΎΠΌ случаС ΠΊΠ°ΠΊΠΈΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ Π½Π°Π΄ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ. Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ BeginPaint, GetDC, GetWindowDC Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ Π·Π°Ρ€Π°Π½Π΅Π΅ Π·Π°Π³ΠΎΡ‚ΠΎΠ²Π»Π΅Π½Π½Ρ‹ΠΉ контСкст устройства, Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ CreateDC, CreateIC, CreateCompatibleDC ΠΈ CreateMetaFile ΡΠΎΠ·Π΄Π°ΡŽΡ‚ Π½ΠΎΠ²Ρ‹ΠΉ контСкст.

1) ΠŸΡ€ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ сообщСния WM_PAINT рСкомСндуСтся ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ способ:

PAINTSTRUCT ps;

BeginPaint (hWnd, &ps);

EndPaint (hWnd, &ps);

Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° PAINTSTRUCT содСрТит ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Π΅:

typedef struct tagPAINTSTRUCT {

HDC hdc; // Ρ…Π΅Π½Π΄Π» контСкста, ΠΎΠ½ ΠΆΠ΅ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ся Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ BeginPaint

BOOL fErase; // TRUE, Ссли Ρ„ΠΎΠ½ Π½Π΅Π²Π΅Ρ€Π½ΠΎΠ³ΠΎ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠ° Π½Π°Π΄ΠΎ ΠΎΡ‡ΠΈΡ‰Π°Ρ‚ΡŒ

RECT rcPaint; // Π½Π΅Π²Π΅Ρ€Π½Ρ‹ΠΉ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ, ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ пустым!

// ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ поля ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Windows:

BOOL fRestore;

BOOL fIncUpdate;

BYTE rgbReserved[ 16 ];

} PAINTSTRUCT;

ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹ΠΉ контСкст устройства Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π΅Π²Π΅Ρ€Π½ΠΎΠΉ области. БистСма ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ остаСтся связана с Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΉ ΠΎΠ±Π»Π°ΡΡ‚ΡŒΡŽ ΠΎΠΊΠ½Π°, Π° Π½Π΅Π²Π΅Ρ€Π½Π°Ρ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ Ρ‚Ρƒ Π·ΠΎΠ½Ρƒ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ осущСствляСтся Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ΅ рисованиС; рисованиС Π²Π½Π΅ этой области просто Π½Π΅ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ Π½ΠΈ ΠΊ ΠΊΠ°ΠΊΠΎΠΌΡƒ эффСкту.

Начиная с Windows 3. x Π΄Π»Ρ задания областСй, Π½ΡƒΠΆΠ΄Π°ΡŽΡ‰ΠΈΡ…ΡΡ Π² ΠΏΠ΅Ρ€Π΅Ρ€ΠΈΡΠΎΠ²ΠΊΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π½Π΅ Π½Π΅Π²Π΅Ρ€Π½Ρ‹Π΅ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠΈ, Π° Π½Π΅Π²Π΅Ρ€Π½Ρ‹Π΅ области (region), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ слоТной Ρ„ΠΎΡ€ΠΌΡ‹. Π’ ΡΡ‚ΠΎΠΌ случаС ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ rcPaint ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΡƒΠΊΠ°Π·Π°Π½ пустым, Π² Ρ‚ΠΎ Π²Ρ€Π΅ΠΌΡ ΠΊΠ°ΠΊ нСвСрная ΠΎΠ±Π»Π°ΡΡ‚ΡŒ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎ сущСствуСт.

ΠšΡ€ΠΎΠΌΠ΅ этого, функция BeginPaint выполняСт Π΅Ρ‰Π΅ нСсколько ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ:

Ссли fErase Ρ€Π°Π²Π΅Π½ TRUE, Ρ‚ΠΎΠ³Π΄Π° функция BeginPaint Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ сообщСния WM_ERASEBKGND с ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ wParam= hDC, lParam= 0

Π½Π΅Π²Π΅Ρ€Π½Ρ‹ΠΉ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ маркируСтся Π²Π΅Ρ€Π½Ρ‹ΠΌ. Для этого BeginPaint Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ValidateRect.

Если Π²Π°ΠΌ Π½Π°Π΄ΠΎ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Ρ€ΠΈΡΠΎΠ²Π°Ρ‚ΡŒ Π½Π° Π²ΡΠ΅ΠΌ устройствС (ΠΎΠΊΠ½Π΅), Π° Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Π·ΠΎΠ½Π΅ Π½Π΅Π²Π΅Ρ€Π½ΠΎΠ³ΠΎ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠ°, Ρ‚ΠΎ ΠΏΠ΅Ρ€Π΅Π΄ Π²Ρ‹Π·ΠΎΠ²ΠΎΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ BeginPaint, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΌΠ°Ρ€ΠΊΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½ΡƒΠΆΠ½Ρ‹ΠΉ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ ΠΈΠ»ΠΈ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ ΠΊΠ°ΠΊ Π½ΡƒΠΆΠ΄Π°ΡŽΡ‰ΡƒΡŽΡΡ Π² ΠΏΠ΅Ρ€Π΅Ρ€ΠΈΡΠΎΠ²ΠΊΠ΅.

2) Иногда Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Ρ…Π΅Π½Π΄Π» контСкста для всСй Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΉ области ΠΎΠΊΠ½Π°. Для этого Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ способом:

HDC hDC;

hDC = GetDC (hWnd);

ReleaseDC (hWnd, hDC);

Π­Ρ‚ΠΎΡ‚ способ часто примСняСтся для рисования Π²ΠΎ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΉ области ΠΎΠΊΠ½Π° ΠΏΡ€ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ ΠΈΠ½Ρ‹Ρ… сообщСний, Ρ‡Π΅ΠΌ WM_PAINT. Если Π²Ρ‹ ΡΠΎΠ±ΠΈΡ€Π°Π΅Ρ‚Π΅ΡΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ ΠΏΡ€ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ сообщСния WM_PAINT, Ρ‚ΠΎ ΠΏΠΎΠΌΠ½ΠΈΡ‚Π΅ ΠΏΡ€ΠΎ:

восстановлСниС Ρ„ΠΎΠ½Π° ΠΎΠΊΠ½Π° (Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ это Π΄Π΅Π»Π°Π΅Ρ‚ BeginPaint)

ΡƒΠ΄Π°Π»ΠΈΡ‚Π΅ Π½Π΅Π²Π΅Ρ€Π½Ρ‹Π΅ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠΈ послС рисования (Ρ‚Π°ΠΊ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ValidateRect (hWnd, NULL); для маркирования всСго ΠΎΠΊΠ½Π° Π²Π΅Ρ€Π½Ρ‹ΠΌ).

3) Π•Ρ‰Π΅ Ρ€Π΅ΠΆΠ΅ приходится Ρ€ΠΈΡΠΎΠ²Π°Ρ‚ΡŒ Π²ΠΎ внСшнСй (Π½Π΅ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π½ΠΎΠΉ, non-client) части ΠΎΠΊΠ½Π°, Ρ‚ΠΎΠ³Π΄Π° Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Ρ‚Π°ΠΊΠΈΠΌ способом:

HDC hDC;

hDC = GetWindowDC (hWnd);

ReleaseDC (hWnd, hDC);

ΠŸΡ€ΠΈΠΌΠ΅Π½ΡΡ Ρ‚Π°ΠΊΠΎΠΉ контСкст устройства Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Ρ€ΠΈΡΠΎΠ²Π°Ρ‚ΡŒ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π½Π° ΠΈΠΊΠΎΠ½ΠΊΠ΅, ΠΊΠΎΠ³Π΄Π° вашС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½ΠΎ.

Π˜Π½Ρ‚Π΅Ρ€Π΅ΡΠ½Π°Ρ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΡŒ этой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ — Ссли Π² ΠΊΠ°Ρ‡Π΅ΡΡ‚Π²Π΅ Ρ…Π΅Π½Π΄Π»Π° ΠΎΠΊΠ½Π° Π΅ΠΉ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ NULL, Ρ‚ΠΎ Ρ„ункция Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ΠΈΡ‚ Ρ…Π΅Π½Π΄Π» контСкста, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ всСму дисплСю.

4) Π’ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… случаях Π½Π°Π΄ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊΠΎ Π²ΡΠ΅ΠΌΡƒ устройству, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΡ€ΠΈΠ½Ρ‚Π΅Ρ€Ρƒ. Для этого Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ°Ρ€Ρƒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ CreateDC… DeleteDC ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

HDC hDC;

hDC = CreateDC (lpszDriver, lpszDevice, lpszOutput, lpData);

DeleteDC (hDC);

НапримСр, для рисования нСпосрСдствСнно Π½Π° ΠΏΠΎΠ²Π΅Ρ€Ρ…ности дисплСя:

hDC = CreateDC («DISPLAY», NULL, NULL, NULL);

ΠΈΠ»ΠΈ ΠΏΡ€ΠΈΠ½Ρ‚Π΅Ρ€Π°:

hDC = CreateDC («IBMGRX», «IBM Graphics», «LPT1:», NULL);

ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΈΠΌΠ΅ΡŽΡ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ значСния:

lpszDriver

— ΠΈΠΌΡ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π° (имя Ρ„Π°ΠΉΠ»Π° Π±Π΅Π· Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ)

lpszDevice

— ΠΈΠΌΡ устройства (Ссли ΠΎΠ΄ΠΈΠ½ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ нСсколько устройств)

lpszOutput

— ΠΈΠΌΡ устройства Π²Ρ‹Π²ΠΎΠ΄Π°

lpData

— ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° Π΄Π°Π½Π½Ρ‹Π΅, ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Π΅ΠΌΡ‹Π΅ Π²ΠΎ Π²Ρ€Π΅ΠΌΡ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ.

Ѐункция CreateDC примСняСтся ΡΡ€Π°Π²Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ€Π΅Π΄ΠΊΠΎ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΏΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ ΠΎΠ½Π° Π±Ρ‹Π»Π° ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π° Π½Π° Ρ€Π°Π±ΠΎΡ‚Ρƒ с ΡƒΡΡ‚ройствами Ρ‚ΠΈΠΏΠ° ΠΏΡ€ΠΈΠ½Ρ‚Π΅Ρ€Π° ΠΈΠ»ΠΈ ΠΏΠ»ΠΎΡ‚Ρ‚Π΅Ρ€Π°. Однако, для примСнСния этой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π½Π°Π΄ΠΎ Π±Ρ‹Π»ΠΎ Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎΠ± ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠΌ ΠΏΡ€ΠΈΠ½Ρ‚Π΅Ρ€Π΅ (Π°Ρ…), ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‰ΡƒΡŽΡΡ Π² Ρ„Π°ΠΉΠ»Π΅ win.ini. Начиная с Windows 3. x ΠΏΠΎΡΠ²ΠΈΠ»ΠΈΡΡŒ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Π°Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰Π°Ρ стандартныС Π΄ΠΈΠ°Π»ΠΎΠ³ΠΈ ΠΈ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ распространСнныС дСйствия, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ процСсс получСния контСкста ΠΏΡ€ΠΈΠ½Ρ‚Π΅Ρ€Π°. Π‘ΠΌ., Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ChoosePrinter.

5) Иногда ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌΡ‹ΠΉ контСкст Π½ΡƒΠΆΠ΅Π½ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Π±Ρ‹ ΡƒΠ·Π½Π°Ρ‚ΡŒ характСристики устройства. Π’ΠΎΠ³Π΄Π° создаСтся нСсколько ΡƒΠΏΡ€ΠΎΡ‰Π΅Π½Π½Ρ‹ΠΉ, Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΎΠ½Π½Ρ‹ΠΉ контСкст:

HDC hDC;

hDC = CreateIC (lpszDriver, lpszDevice, lpszOutput, lpData);

DeleteDC (hDC);

ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ‚Π°ΠΊΠΈΠ΅ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌ случаС.

Π’ ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ Π³Ρ€ΡƒΠΏΠΏΡƒ Π½Π°Π΄ΠΎ Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚ΡŒ Π΅Ρ‰Π΅ Π΄Π²Π° способа: ΠΎΠ±Π° ΠΎΠ½ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ контСкст Ρ€Π΅Π°Π»ΡŒΠ½ΠΎ Π½Π΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ устройства. Один ΠΈΠ· Π½ΠΈΡ… создаСт контСкст устройства, ΠΏΠΎΡ…ΠΎΠΆΠ΅Π³ΠΎ Π½Π° Ρ€Π΅Π°Π»ΡŒΠ½ΠΎ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π΅, Π½ΠΎ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½Π½ΠΎΠ΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² ΠΏΠ°ΠΌΡΡ‚ΠΈ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π°, Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ создаСт устройство, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π·Π°ΠΏΠΎΠΌΠΈΠ½Π°Π΅Ρ‚ всС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΠΏΠΎ Ρ€ΠΈΡΠΎΠ²Π°Π½ΠΈΡŽ ΠΊΠ°ΠΊ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹, Π° Π·Π°Ρ‚Π΅ΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡ… Π²ΠΎΡΠΏΡ€ΠΎΠΈΠ·Π²Π΅ΡΡ‚ΠΈ Π½Π° Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΌ устройствС.

6) Π­Ρ‚ΠΎΡ‚ способ создаСт контСкст Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠ³ΠΎ совмСстимого устройства, ΠΎΠ½ΠΎ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎ Π½Π΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΠ΅Ρ‚, Π½ΠΎ ΠΎΠ±Π»Π°Π΄Π°Π΅Ρ‚ характСристиками Ρ€Π΅Π°Π»ΡŒΠ½ΠΎ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ.

HDC hCompatDC;

HDC hRealDC;

// для получСния контСкста Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ устройства годится любой

// ΠΈΠ· ΡΠΏΠΎΡΠΎΠ±ΠΎΠ² 1.5

hRealDC= GetDC (hWnd);

// ΠΏΠΎ Ρ…Π΅Π½Π΄Π»Ρƒ контСкста Ρ€Π΅Π°Π»ΡŒΠ½ΠΎ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ устройства создаСтся

// контСкст совмСстимого устройства.

hCompatDC= CreateCompatibleDC (hRealDC);

// созданный Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ совмСстимый контСкст описываСт устройство

// Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ Π² 1 пиксСл. Для Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΡΡ‚ΠΈΠΌ устройством

// Π΅Π³ΠΎ Π½Π°Π΄ΠΎ Π°ΡΡΠΎΡ†ΠΈΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ с Π±ΠΈΡ‚ΠΌΠ°ΠΏΠΎΠΌ, ΠΎΠ± ΡΡ‚ΠΎΠΌ — ΠΏΠΎΠ·ΠΆΠ΅

// Ссли контСкст Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ устройства Π½Π°ΠΌ большС Π½Π΅ Π½ΡƒΠΆΠ΅Π½, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ

// Π΅Π³ΠΎ ΠΎΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΡ‚ΡŒ

ReleaseDC (hWnd, hRealDC);

//. здСсь ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ созданный совмСстимый контСкст

// для освобоТдСния совмСстимого контСкста примСняСтсяфункция

DeleteDC (hCompatDC);

БовмСстимыС контСксты (compatible DC, memory DC) ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Ρ‹ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π±ΠΈΡ‚ΠΌΠ°ΠΏΠ°ΠΌΠΈ. Для этого созданный совмСстимый контСкст ассоциируСтся с ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΌ Π±ΠΈΡ‚ΠΌΠ°ΠΏΠΎΠΌ, послС Ρ‡Π΅Π³ΠΎ появляСтся Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ рисованиС Π½Π° ΡΡ‚ΠΎΠΌ Π±ΠΈΡ‚ΠΌΠ°ΠΏΠ΅, Π»ΠΈΠ±ΠΎ ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Ρƒ изобраТСния ΠΌΠ΅ΠΆΠ΄Ρƒ Π±ΠΈΡ‚ΠΌΠ°ΠΏΠΎΠΌ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠΌ контСкстом устройства. ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠΈ совмСстимых контСкстов устройства см. Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ «Π Π°Π±ΠΎΡ‚Π° с Π·Π°Π²ΠΈΡΠΈΠΌΡ‹ΠΌ ΠΎΡ‚ ΡƒΡΡ‚ройства Π±ΠΈΡ‚ΠΌΠ°ΠΏΠΎΠΌ».

7) ПослСдний способ создаСт Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΉ ΠΌΠ΅Ρ‚Π°Ρ„Π°ΠΉΠ». Π­Ρ‚ΠΎ устройство Ρ‚ΠΎΠ»ΡŒΠΊΠΎ лишь Π·Π°ΠΏΠΎΠΌΠΈΠ½Π°Π΅Ρ‚ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ GDI Π² ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΌ Ρ„Π°ΠΉΠ»Π΅, Π° Π·Π°Ρ‚Π΅ΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ воспроизвСсти Π·Π°Π΄Π°Π½Π½ΠΎΠ΅ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π½Π° Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΌ устройствС, «ΠΏΡ€ΠΎΠΈΠ³Ρ€Ρ‹Π²Π°Ρ» Π·Π°ΠΏΠΎΠΌΠ½Π΅Π½Π½Ρ‹Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹. ΠšΠΎΠ½Ρ‚Π΅ΠΊΡΡ‚ ΠΌΠ΅Ρ‚Π°Ρ„Π°ΠΉΠ»Π° сущСствСнно отличаСтся ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΈΡ… контСкстов ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠ΅ΠΉ ΠΎΠ± ΡƒΡΡ‚ройствС, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π½ΠΈ ΠΊ ΠΊΠ°ΠΊΠΎΠΌΡƒ устройству ΠΎΠ½ Π½Π΅ ΠΏΡ€ΠΈΠ²ΡΠ·Π°Π½ ΠΈ Π½Π΅ Π½Π° ΠΊΠΎΠ³ΠΎ Π½Π΅ ΠΏΠΎΡ…ΠΎΠΆ. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Ρ‚Π°ΠΊΠΈΠ΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹, ΠΊΠ°ΠΊ число Π±ΠΈΡ‚ Π½Π° ΠΏΠΈΠΊΡΠ΅Π»ΡŒ, число встроСнных ΡˆΡ€ΠΈΡ„Ρ‚ΠΎΠ² ΠΈ ΠΏΡ€. Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ для Π½Π΅Π³ΠΎ Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ смысла.

HDC hDC;

HANDLE hMF;

hDC = CreateMetaFile (lpszFilename);

hMF = CloseMetaFile (hDC);

DeleteMetaFile (hMF);

ΠΈΠ»ΠΈ

HDC hEnhDC;

HENHMETAFILE hEnhMF;

hEnhDC = CreateEnhMetaFile (lpszFilename);

hEnhMF = CloseEnhMetaFile (hDC);

DeleteEnhMetaFile (hEnhMF);

Как ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹ΠΉ Ρ…Π΅Π½Π΄Π» ΠΌΠ΅Ρ‚Π°Ρ„Π°ΠΉΠ»Π° ΠΌΡ‹ Ρ€Π°ΡΡΠΌΠΎΡ‚Ρ€ΠΈΠΌ ΠΏΠΎΠ·ΠΆΠ΅.

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌΡ‹ΠΉ контСкст устройства. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ, послС получСния Ρ…Π΅Π½Π΄Π»Π° контСкста устройства, производятся Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌΡ‹Π΅ настройки — Π²Ρ‹Π±ΠΎΡ€ ΠΏΠ΅Ρ€Π°, ΡˆΡ€ΠΈΡ„Ρ‚Π° ΠΈ ΠΏΡ€. ΠΏΡ€ΠΈ этом Ρ‚Π°ΠΊΠΈΠ΅ настройки приходится Π΄Π΅Π»Π°Ρ‚ΡŒ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π· ΠΏΡ€ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠΈ Ρ…Π΅Π½Π΄Π»Π° контСкста устройства. Π’ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… случаях, Ссли настройки ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ ΠΎΡ‚ ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΠΌΡ‹Ρ… ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΈ Ρ€Π΅Π΄ΠΊΠΎ ΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ, ΠΌΠΎΠΆΠ½ΠΎ ΡƒΡΠΊΠΎΡ€ΠΈΡ‚ΡŒ рисованиС, сохраняя ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½Π½Ρ‹Π΅ измСнСния.

Π’ ΠΏΡ€ΠΎΡ†Π΅ΡΡΠ΅ рисования Π²Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚Π΅ постоянно ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ контСкста — Π²Ρ‹Π±ΠΈΡ€Π°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹Π΅ кисти, ΠΏΠ΅Ρ€ΡŒΡ, ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ Ρ†Π²Π΅Ρ‚Π° ΠΈ Ρ€Π΅ΠΆΠΈΠΌΡ‹ рисования ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅. ВсС эти измСнСния Π΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Ρ‚ΠΎ Π²Ρ€Π΅ΠΌΡ, ΠΏΠΎΠΊΠ° контСкст сущСствуСт. Как Ρ‚ΠΎΠ»ΡŒΠΊΠΎ контСкст освобоТдаСтся (ΠΈΠ»ΠΈ уничтоТаСтся, Ссли ΠΎΠ½ Π±Ρ‹Π» создан), Ρ‚ΠΎ Π²ΡΠ΅ измСнСния, сдСланныС Π² Π΅Π³ΠΎ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°Ρ…, ΠΏΡ€ΠΎΠΏΠ°Π΄Π°ΡŽΡ‚. ΠšΠΎΠ½Ρ‚Π΅ΠΊΡΡ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚Π΅, практичСски всСгда настроСн стандартным ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ.

Π‘ΠΎΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ контСкста устройства

ΠŸΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с ΠΊΠΎΠ½Ρ‚Скстом устройства часто оказываСтся Π½Π΅ΡƒΠ΄ΠΎΠ±Π½ΠΎ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π· ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ контСкст ΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ΡŒ Π΅Π³ΠΎ настройку. Π’ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… случаях ΡƒΠ΄ΠΎΠ±Π½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠ΅ сохранСниС контСкста устройства. На ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ Ρ‚Π°ΠΊΠΎΠΉ ΠΏΡ€ΠΈΠ΅ΠΌ примСняСтся ΡΡ€Π°Π²Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ€Π΅Π΄ΠΊΠΎ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΏΡ€ΠΈ сколько-Π½ΠΈΠ±ΡƒΠ΄ΡŒ слоТном рисункС количСство измСняСмых Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ² контСкста устройства достаточно Π²Π΅Π»ΠΈΠΊΠΎ, ΠΏΡ€ΠΈΡ‡Π΅ΠΌ ΠΈΡ… ΡΠΌΠ΅Π½Π° ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΎΠΈΡΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎΠΊΡ€Π°Ρ‚Π½ΠΎ.

Π‘ΠΎΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ контСкста ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ двумя сущСствСнно Ρ€Π°Π·Π»ΠΈΡ‡Π°ΡŽΡ‰ΠΈΠΌΠΈΡΡ путями. Π’Π°ΠΊ, Ссли Π²Π°ΠΌ Π½Π°Π΄ΠΎ для выполнСния ΠΊΠ°ΠΊΠΎΠ³ΠΎ-Ρ‚ΠΎ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π° рисунка ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ большоС число Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ² контСкста, Π° Π΄Π»Ρ продолТСния рисования ΠΈΡ… Π½Π°Π΄ΠΎ Π²ΠΎΡΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ, Ρ‚ΠΎ ΡƒΠ΄ΠΎΠ±Π½ΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΏΠ°Ρ€ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ SaveDC ΠΈ RestoreDC для сохранСния ΠΈ Π²ΠΎΡΡΡ‚ановлСния контСкста.

HDC SaveDC (hDC);

BOOL RestoreDC (hDC, hSavedDC);

Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ RestoreDC (hDC, -1) — Π²ΠΎΡΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π² Ρ‚ΠΎΠΌ Π²ΠΈΠ΄Π΅, ΠΊΠ°ΠΊΠΎΠΉ Π±Ρ‹Π» ΠΏΠ΅Ρ€Π΅Π΄ послСдним Π²Ρ‹Π·ΠΎΠ²ΠΎΠΌ SaveDC.

Однако простым ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ порядка рисования ΠΌΠΎΠΆΠ½ΠΎ Π² Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ случаСв ΠΎΠ±ΠΎΠΉΡ‚ΠΈΡΡŒ Π±Π΅Π· примСнСния этих Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ.

Π’Ρ‚ΠΎΡ€ΠΎΠΉ способ сохранСния контСкста основан Π½Π° ΠΎΠΏΠΈΡΠ°Π½ΠΈΠΈ ΠΎΠΊΠ½Π°, ΠΊΠ°ΠΊ ΠΎΠΊΠ½Π°, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰Π΅Π³ΠΎ сохранСниС контСкста устройства. Π’ ΡΡ‚ΠΎΠΌ случаС для ΠΎΠΊΠ½Π° (ΠΈΠ»ΠΈ для всСго класса ΠΎΠΊΠΎΠ½) создаСтся ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ контСкст, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ сохраняСтся ΠΌΠ΅ΠΆΠ΄Ρƒ опСрациями Π΅Π³ΠΎ освобоТдСния ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΡ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ появляСтся Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΡΠΎΡ…Ρ€Π°Π½ΡΡ‚ΡŒ всС сдСланныС измСнСния Π² Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°Ρ… контСкста.

Для этого Π½Π°Π΄ΠΎ, рСгистрируя класс ΠΎΠΊΠ½Π°, ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ ΡΡ‚ΠΈΠ»ΡŒ CS_OWNDC. Π­Ρ‚ΠΎΡ‚ ΡΡ‚ΠΈΠ»ΡŒ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ этого класса ΠΈΠΌΠ΅Π΅Ρ‚ свой собствСнный контСкст устройства. Π’ ΡΡ‚ΠΎΠΌ контСкстС ΡΠΎΡ…Ρ€Π°Π½ΡΡŽΡ‚ΡΡ всС Π΅Π³ΠΎ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹. Π”Π°Π»Π΅Π΅ Π²Ρ‹ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΌ способом ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚Π΅ ΠΈ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°Π΅Ρ‚Π΅ контСкст устройства, Π½ΠΎ Π΅Π³ΠΎ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ Π½Π΅ Π½Π°Π΄ΠΎ ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π· Π·Π°Π½ΠΎΠ²ΠΎ.

ΠŸΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с ΠΎΠΊΠ½Π°ΠΌΠΈ, ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠΌΠΈ ΡΡ‚ΠΈΠ»ΡŒ CS_OWNDC ΡƒΠ΄ΠΎΠ±Π½ΠΎ Π½Π°ΡΡ‚Ρ€Π°ΠΈΠ²Π°Ρ‚ΡŒ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ контСкста ΠΏΡ€ΠΈ создании ΠΎΠΊΠ½Π°, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ‚Π°ΠΊ:

int PASCAL WinMain (HANDLE hInstance, HANDLE hPrevInstance, LPSTR lpszCmdLine, int nCmdShow)

{WNDCLASS wc;

// ΠΏΡ€ΠΈ рСгистрации класса ΠΎΠΊΠ½Π° Π·Π°Π΄Π°Ρ‚ΡŒ ΡΡ‚ΠΈΠ»ΡŒ CS_OWNDC:

wc.style= CS_OWNDC;…

RegisterClass (&wc);…}

// ΠΏΡ€ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ сообщСний Π² ΠΎΠΊΠΎΠ½Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ:

LRESULT WINAPI _export WinProc (HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)

{HDC hDC;

PAINTSTRUCT ps;

switch (wMsg) {

case WM_CREATE:…

hDC= GetDC (hWnd);

// … ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ ΠΏΡ€ΠΈ создании ΠΎΠΊΠ½Π°

ReleaseDC (hWnd, hDC);…

break;

case WM_PAINT:

hDC= BeginPaint (hWnd, &ps);

// ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ получСния Ρ…Π΅Π½Π΄Π»Π° контСкста устройства Π±ΡƒΠ΄ΡƒΡ‚ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ

// Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ Ρ…Π΅Π½Π΄Π» сохранСнного контСкста.

// здСсь ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹, установлСнныС Ρ€Π°Π½Π΅Π΅…

EndPaint (hWnd, &ps); // контСкст ΠΏΠΎ-ΠΏΡ€Π΅ΠΆΠ½Π΅ΠΌΡƒ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ освобоТдСн

break;

case …:…}

…}

НСдостатком этого способа считаСтся Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ этого класса постоянно ΡƒΠ΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ созданный контСкст Π² ΠΏΠ°ΠΌΡΡ‚ΠΈ, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ быстро привСсти ΠΊ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½ΠΈΡŽ всСх рСсурсов ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π°.

Π’ Ρ‡Π°ΡΡ‚Π½ΠΎΠΌ случаС всС ΠΎΠΊΠ½Π° ΠΎΠ΄Π½ΠΎΠ³ΠΎ класса ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹Π΅ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹. Π’ΠΎΠ³Π΄Π° ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ ΡΡ‚ΠΈΠ»ΡŒ Π½Π΅ CS_OWNDC, Π° CS_CLASSDC. Π­Ρ‚ΠΎΡ‚ ΡΡ‚ΠΈΠ»ΡŒ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½Π° сохранСнная копия контСкста Π² ΠΏΠ°ΠΌΡΡ‚ΠΈ, которая ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ всСми ΠΎΠΊΠ½Π°ΠΌΠΈ Π΄Π°Π½Π½ΠΎΠ³ΠΎ класса. Π’ ΡΡ‚ΠΎΠΌ случаС ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΡΡ‚Ρ€Π°ΠΈΠ²Π°Ρ‚ΡŒ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ контСкста Π΅Ρ‰Π΅ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ WinMain, сразу послС создания ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π° этого класса.

БистСмы ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ GDI

Для Π½Π°Ρ‡Π°Π»Π° Π½Π°Π΄ΠΎ ΡƒΡ‚ΠΎΡ‡Π½ΠΈΡ‚ΡŒ Ρ‚ΠΎ ΠΌΠ΅ΡΡ‚ΠΎ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ систСма ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ GDI Π² Windows. Как ΠΎΡ‚ΠΌΠ΅Ρ‡Π°Π»ΠΎΡΡŒ ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠΌ знакомствС, Π² Windows ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ нСсколько Ρ€Π°Π·Π½Ρ‹Ρ… систСм ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚. Π‘Ρ€Π΅Π΄ΠΈ Π½ΠΈΡ… Π½Π°Π΄ΠΎ Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅:

БистСма ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€Π° ΠΎΠΊΠΎΠ½; Π² Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ Π½ΠΈΠΊΠ°ΠΊ особо Π½Π΅ ΠΎΠ³ΠΎΠ²Π°Ρ€ΠΈΠ²Π°Π΅Ρ‚ся, Ρ‡Ρ‚ΠΎ примСняСтся ΠΈΠΌΠ΅Π½Π½ΠΎ эта систСма ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚.

БистСма ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ ΠΏΠ°Π½Π΅Π»ΠΈ Π΄ΠΈΠ°Π»ΠΎΠ³Π°; примСняСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ собствСнных Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ². Π’ Ρ‚СкстС часто ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ½ΡΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Ρ€Π΅Ρ‡ΡŒ ΠΈΠ΄Π΅Ρ‚ ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΎ Π½Π΅ΠΉ, Ссли оговариваСтся, Ρ‡Ρ‚ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π΅Π΄ΠΈΠ½ΠΈΡ†Ρ‹ Π΄ΠΈΠ°Π»ΠΎΠ³Π° (dialog units). Если Π½Π΅ ΠΎΠ³ΠΎΠ²Π°Ρ€ΠΈΠ²Π°Π΅Ρ‚ся, Ρ‚ΠΎ ΠΏΠΎ ΠΊΠΎΠ½Ρ‚Сксту — всС, связанноС с ΡˆΠ°Π±Π»ΠΎΠ½Π°ΠΌΠΈ ΠΈ Ρ€Π΅ΡΡƒΡ€ΡΠ°ΠΌΠΈ описания Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ² ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΈΠΌΠ΅Π½Π½ΠΎ эту систСму отсчСта.

БистСма ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ GDI; Π² Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ Π² ΡΠΈΡΡ‚Π΅ΠΌΠ΅ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ GDI часто Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ логичСскими ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π°ΠΌΠΈ (logical coordinates). Π’Π°ΠΌ ΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΡΡ‚Ρ€Π΅Ρ‚ΠΈΡ‚ΡŒΡΡ понятиС ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ устройства (device coordinates).

БистСма ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ GDI примСняСтся ΠΏΡ€ΠΈ осущСствлСнии графичСского Π²Ρ‹Π²ΠΎΠ΄Π° Π½Π° ΡƒΡΡ‚ройство ΠΈ, СстСствСнно, эта систСма ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ опрСдСляСтся Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°ΠΌΠΈ контСкста устройства. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ контСкста, ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ Π² Π½Π°ΡΡ‚оящий ΠΌΠΎΠΌΠ΅Π½Ρ‚, опрСдСляСтся собствСнная систСма ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚.

ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ понятия

Π’ΠΎΠΎΠ±Ρ‰Π΅ говоря, для задания любой систСмы ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΊΠ°ΠΊ-Ρ‚ΠΎ Π΅Π΅ ΠΏΡ€ΠΈΠ²ΡΠ·Π°Ρ‚ΡŒ ΠΊ ΡΠΈΡΡ‚Π΅ΠΌΠ΅ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ устройства (Ρ€Π΅Ρ‡ΡŒ ΠΈΠ΄Π΅Ρ‚ ΠΎ ΡΠΈΡΡ‚Π΅ΠΌΠ°Ρ… ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚, примСняСмых Π² Windows, Π° Π½Π΅ ΠΎ ΠΌΠ°Ρ‚СматичСском понятии). Π’Π°ΠΊ, скаТСм, систСма ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€Π° ΠΎΠΊΠΎΠ½ отличаСтся ΠΎΡ‚ ΡΠΈΡΡ‚Π΅ΠΌΡ‹ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ устройства Ρ‚ΠΎΠ»ΡŒΠΊΠΎ лишь смСщСнным (Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΈ Π½Π΅Ρ‚) Π½Π°Ρ‡Π°Π»ΠΎΠΌ отсчСта — Π² Π²Π΅Ρ€Ρ…Π½ΠΈΠΉ Π»Π΅Π²Ρ‹ΠΉ ΡƒΠ³ΠΎΠ» Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΉ области ΠΎΠΊΠ½Π°.

Аналогично, систСма ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ GDI Ρ‚ΠΎΠΆΠ΅ Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ привязана ΠΊ ΡΠΈΡΡ‚Π΅ΠΌΠ΅ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ устройства. Π’ΠΎΡ‡Π½Π΅Π΅, ΠΎΠ½Π° ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ привязана Π»ΠΈΠ±ΠΎ ΠΊ ΡΠΈΡΡ‚Π΅ΠΌΠ΅ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ устройства, Ссли контСкст соотвСтствуСт всСму устройству, Π»ΠΈΠ±ΠΎ ΠΊ ΡΠΈΡΡ‚Π΅ΠΌΠ΅ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€Π° ΠΎΠΊΠΎΠ½, Ссли контСкст соотвСтствуСт ΠΎΠΊΠ½Ρƒ.

Π’ Π»ΡŽΠ±ΠΎΠΌ случаС Π² Windows Ρ‚Ρƒ ΡΠΈΡΡ‚Π΅ΠΌΡƒ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚, ΠΏΠΎ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡŽ ΠΊ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ задаСтся систСма ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ GDI, Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ систСмой ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ устройства (device coordinates, viewport coordinates). А ΡΠ°ΠΌΡƒ систСму ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ GDI Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ логичСской систСмой ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ (logical coordinates, window coordinates).

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ английская тСрминология Π² ΡΡ‚ΠΎΠΉ области ΠΎΡ‡Π΅Π½ΡŒ путаная, ΠΎΠ΄Π½ΠΎ ΠΈ Ρ‚ΠΎ ΠΆΠ΅ понятиС ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°Ρ‚ΡŒΡΡ Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°ΠΌΠΈ Π΄Π°ΠΆΠ΅ Π² ΠΏΡ€Π΅Π΄Π΅Π»Π°Ρ… ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π°Π±Π·Π°Ρ†Π°. Π’Π°ΠΊ, Ρ‚Π΅Ρ€ΠΌΠΈΠ½Ρ‹ viewport ΠΈ device относятся ΠΊ ΡΠΈΡΡ‚Π΅ΠΌΠ΅ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ устройства, Π° Ρ‚Π΅Ρ€ΠΌΠΈΠ½Ρ‹ logical ΠΈ window ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ Π»ΠΎΠ³ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ систСму ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚. Π­Ρ‚ΠΎ нСсколько странно, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΏΡ€ΠΈ Π²Ρ‹Π²ΠΎΠ΄Π΅ Π² ΠΎΠΊΠ½ΠΎ систСма ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ ΠΎΠΊΠ½Π° Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π°ΠΌ устройства, Π° Π»ΠΎΠ³ΠΈΡ‡Π΅ΡΠΊΠΈΠ΅ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ GDI, ΠΏΠΎΡ‡Π΅ΠΌΡƒ-Ρ‚ΠΎ Π±ΡƒΠ΄ΡƒΡ‚ ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°Ρ‚ΡŒΡΡ Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΎΠΌ window.

Когда систСма прСдоставляСт Π²Π°ΠΌ контСкст устройства, Ρ‚ΠΎ Π΅Π³ΠΎ систСма ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ совпадаСт с ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π°ΠΌΠΈ устройства (ΠΎΠΊΠ½Π°), Π½ΠΎ Ρƒ Π²Π°Ρ Π΅ΡΡ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ эту систСму ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π²ΠΎ Π²Ρ€Π΅ΠΌΡ рисования Π½Π° ΠΊΠΎΠ½Ρ‚СкстС.

ЀактичСски логичСская систСма ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ опрСдСляСтся Ρ„ΠΎΡ€ΠΌΡƒΠ»Π°ΠΌΠΈ, ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ происходит пСрСсчСт ΠΈΠ· Π»ΠΎΠ³ΠΈΡ‡Π΅ΡΠΊΠΈΡ… ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ Π² ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ устройства. ΠŸΡ€ΠΈ осущСствлСнии Π²Ρ‹Π²ΠΎΠ΄Π° Π½Π° ΠΊΠΎΠ½Ρ‚Скст всС ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ ΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ ΡΡ‡ΠΈΡ‚Π°ΡŽΡ‚ΡΡ Π·Π°Π΄Π°Π½Π½Ρ‹ΠΌΠΈ Π² Π»ΠΎΠ³ΠΈΡ‡Π΅ΡΠΊΠΎΠΉ систСмС ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ Ρ‚ΠΎΠ»Ρ‰ΠΈΠ½Ρƒ ΠΏΡ€ΠΎΠ²ΠΎΠ΄ΠΈΠΌΡ‹Ρ… Π»ΠΈΠ½ΠΈΠΉ, Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ ΡˆΡ€ΠΈΡ„Ρ‚Π°, ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»Ρ‹ ΠΌΠ΅ΠΆΠ΄Ρƒ символами, ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ Ρ‚ΠΎΡ‡Π΅ΠΊ ΠΈ ΠΏΡ€ΠΎΡ‡Π΅Π΅.

Π’ ΡΡ‚ΠΈΡ… Ρ„ΠΎΡ€ΠΌΡƒΠ»Π°Ρ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π½ΠΈΠΆΠ½ΠΈΠ΅ индСксы Π² Π²ΠΈΠ΄Π΅ view ΠΈ win, Π² ΡΠΎΠΎΡ‚вСтствии с ΠΏΡ€ΠΈΠ½ΡΡ‚Ρ‹ΠΌΠΈ названиями Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ² контСкста устройства. ИндСкс view относится ΠΊ ΡΠΈΡΡ‚Π΅ΠΌΠ΅ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ устройства, Π° ΠΈΠ½Π΄Π΅ΠΊΡ win — ΠΊ Π»ΠΎΠ³ΠΈΡ‡Π΅ΡΠΊΠΎΠΉ систСмС ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚. Π’ΠΎ Π΅ΡΡ‚ΡŒ xview ΠΈ yview — ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ Ρ‚ΠΎΡ‡ΠΊΠΈ Π² ΡΠΈΡΡ‚Π΅ΠΌΠ΅ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ устройства, Xview.org ΠΈ Yview.org— ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ смСщСниС Π½Π°Ρ‡Π°Π» отсчСта систСм ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚, Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½Π½ΠΎΠ΅ Π² Π΅Π΄ΠΈΠ½ΠΈΡ†Π°Ρ… устройства (viewport origin), Xwin.org ΠΈ Ywin.org — Ρ‚ΠΎ ΠΆΠ΅ ΡΠ°ΠΌΠΎΠ΅ смСщСниС, Π½ΠΎ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½Π½ΠΎΠ΅ Π² Π»ΠΎΠ³ΠΈΡ‡Π΅ΡΠΊΠΈΡ… Π΅Π΄ΠΈΠ½ΠΈΡ†Π°Ρ… (window origin), Π° Xview.ext, Yview.ext ΠΈ Xwin.ext, Ywin.ext— ΠΌΠ°ΡΡˆΡ‚Π°Π±Π½Ρ‹Π΅ коэффициСнты (viewport extents, window extents).

ЕстСствСнно, Ρ‡Ρ‚ΠΎ Π² ΡΡ‚ΠΈΡ… Ρ„ΠΎΡ€ΠΌΡƒΠ»Π°Ρ… смСщСниС Π½Π°Ρ‡Π°Π»Π° отсчСта Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π·Π°Π΄Π°Π²Π°Ρ‚ΡŒΡΡ лишь Π΅Π΄ΠΈΠ½ΠΎΠΆΠ΄Ρ‹ — Π»ΠΈΠ±ΠΎ для логичСской систСмы ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚, Π»ΠΈΠ±ΠΎ для систСмы ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ устройства. Π’ ΠΊΠ°ΠΊΠΎΠΌ ΠΈΠΌΠ΅Π½Π½ΠΎ Π²ΠΈΠ΄Π΅ — зависит ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΎΡ‚ ΡƒΠ΄ΠΎΠ±ΡΡ‚Π²Π°. НапримСр, Ссли Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π½Π°Ρ‡Π°Π»ΠΎ отсчСта логичСской систСмы ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ ΠΏΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ Ρ‚ΠΎΡ‡Π½ΠΎ Π² Ρ†Π΅Π½Ρ‚Ρ€Π΅ ΠΎΠΊΠ½Π° (листа Π±ΡƒΠΌΠ°Π³ΠΈ ΠΈ ΠΏΡ€.), Ρ‚ΠΎ Ρ„актичСски Π²Ρ‹ Π·Π½Π°Π΅Ρ‚Π΅ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Ρ‚ΠΎΡ‡ΠΊΠΈ Π½Π°Ρ‡Π°Π»Π° отсчСта Π² ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π°Ρ… устройства — Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ контСкста устройства, Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ ΠΏΠΎΠΏΠΎΠ»Π°ΠΌ — Ρ‚ΠΎΠ³Π΄Π° ΡƒΠ΄ΠΎΠ±Π½Π΅Π΅ Π·Π°Π΄Π°Ρ‚ΡŒ Π²Π΅Π»ΠΈΡ‡ΠΈΠ½Ρ‹ Xview.org ΠΈ Yview.org, Π° Xwin.org ΠΈ Ywin.org ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Ρ€Π°Π²Π½Ρ‹ΠΌΠΈ Π½ΡƒΠ»ΡŽ.

Рисунок 2. БистСма ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ устройства ΠΈ Π»ΠΎΠ³ΠΈΡ‡Π΅ΡΠΊΠ°Ρ систСма ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ Для ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ прСобразования (ΠΈΠ· ΡΠΈΡΡ‚Π΅ΠΌΡ‹ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ устройства Π² Π»ΠΎΠ³ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ систСму ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚), Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ Ρ‚Π°ΠΊΠΈΠ΅ ΠΆΠ΅ Ρ„ΠΎΡ€ΠΌΡƒΠ»Ρ‹, Π½ΠΎ Ρ ΠΏΠ΅Ρ€Π΅ΡΡ‚Π°Π²Π»Π΅Π½Π½Ρ‹ΠΌΠΈ индСксами win ΠΈ view:

Иногда Π²Π°ΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ самим ΠΏΠ΅Ρ€Π΅ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ ΠΈΠ»ΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΈΠ· ΠΎΠ΄Π½ΠΎΠΉ систСмы ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ Π² Π΄Ρ€ΡƒΠ³ΡƒΡŽ. ВмСсто Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Π±Ρ‹ ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹Π΅ Ρ„ΠΎΡ€ΠΌΡƒΠ»Ρ‹, ΡƒΠ΄ΠΎΠ±Π½Π΅Π΅ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌΠΈ функциями:

BOOL DPtoLP (hDC, lpPoints, nCount);

BOOL LPtoDP (hDC, lpPoints, nCount);

Ѐункция DPtoLP ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅Ρ‚ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ Ρ‚ΠΎΡ‡Π΅ΠΊ, Π·Π°Π΄Π°Π½Π½Ρ‹Ρ… массивом lpPoints ΠΈΠ· nCount ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Ρ‚ΠΈΠΏΠ° POINT, Π·Π°Π΄Π°Π½Π½Ρ‹Π΅ Π² ΡΠΈΡΡ‚Π΅ΠΌΠ΅ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ устройства Π² Π»ΠΎΠ³ΠΈΡ‡Π΅ΡΠΊΠΈΠ΅ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ (DPtoLP — Device Point to Logical Point), Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΈΠ· «view» Π² «win», Π° Ρ„ункция LPtoDP — выполняСт ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ΅ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅.

Под ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π°ΠΌΠΈ устройства ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°Ρ‚ΡŒΡΡ Π»ΠΈΠ±ΠΎ нСпосрСдствСнно систСма ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ устройства, Ссли контСкст соотвСтствуСт всСму устройству, Π»ΠΈΠ±ΠΎ систСма ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚, связанная с ΠΎΠΊΠ½ΠΎΠΌ, Ссли контСкст соотвСтствуСт Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΉ ΠΈΠ»ΠΈ внСшнСй области ΠΎΠΊΠ½Π°. Π’Π°ΠΊ, ΠΏΡ€ΠΈ Π²Ρ‹Π²ΠΎΠ΄Π΅ Π² ΠΎΠΊΠ½ΠΎ, Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ΅ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ Ρ‚ΠΎΡ‡ΠΊΠΈ ΠΎΠΊΠ½Π° Π½Π° ΡΠΊΡ€Π°Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ вычислСно Π² Π΄Π²Π° этапа — сначала с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ LPtoDP Π½Π°Π΄ΠΎ ΠΏΠ΅Ρ€Π΅ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ логичСскиС ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ Π² ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹, связанныС с ΠΎΠΊΠ½ΠΎΠΌ, Π° Π·Π°Ρ‚Π΅ΠΌ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ClientToScreen ΠΏΠ΅Ρ€Π΅ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΈΠ· ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ ΠΎΠΊΠ½Π° Π² ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ экрана. ΠŸΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с ΡƒΡΡ‚ройством Π² Ρ†Π΅Π»ΠΎΠΌ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΡ€ΠΈ Π²Ρ‹Π²ΠΎΠ΄Π΅ Π½Π° ΠΏΡ€ΠΈΠ½Ρ‚Π΅Ρ€, достаточно ΠΎΠ΄Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ LPtoDP.

ΠŸΡ€ΠΈ использовании Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ DPtoLP ΠΈ LPtoDP Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΠ΅ интСрСсных ошибок. ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΠΌ сСбС, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ‡Ρ‚ΠΎ Π²Π°ΠΌ Π½Π°Π΄ΠΎ Π½Π°Ρ€ΠΈΡΠΎΠ²Π°Ρ‚ΡŒ линию ΡˆΠΈΡ€ΠΈΠ½ΠΎΠΉ 10 пиксСль. Π’Π°ΠΊ ΠΊΠ°ΠΊ логичСская систСма ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π΅ ΡΠΎΠ²ΠΏΠ°Π΄Π°Ρ‚ΡŒ с ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π°ΠΌΠΈ устройства, Ρ‚ΠΎ Π»ΠΈΠ½ΠΈΡ ΡˆΠΈΡ€ΠΈΠ½ΠΎΠΉ 10 логичСских Π΅Π΄ΠΈΠ½ΠΈΡ† вовсС Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΡˆΠΈΡ€ΠΈΠ½ΠΎΠΉ 10 пиксСль. Π‘Π°ΠΌΠΎ собой Π½Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°Π΅Ρ‚ΡΡ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Ρ‚Π°ΠΊΠΎΠΉ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ для вычислСния ΡˆΠΈΡ€ΠΈΠ½Ρ‹ Π»ΠΈΠ½ΠΈΠΈ:

POINT pt;

pt.x = 10; pt. y = 0;

DPtoLP (hdc, &pt, 1); // пСрСсчитаСм 10 пиксСль (Π΅Π΄. устройства) Π² Π»ΠΎΠ³ΠΈΡ‡Π΅ΡΠΊΠΈΠ΅

// Π΅Π΄ΠΈΠ½ΠΈΡ†Ρ‹. Π”Π°Π»Π΅Π΅ считаСм, Ρ‡Ρ‚ΠΎ Π² ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π΅ pt. x Π·Π°ΠΏΠΈΡΠ°Π½Π° нуТная Π½Π°ΠΌ Π²Π΅Π»ΠΈΡ‡ΠΈΠ½Π° Ошибка, которая присутствуСт Π² ΡΡ‚ΠΎΠΌ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π°, сразу ΠΈ Π½Π΅ Π²ΠΈΠ΄Π½Π°. Π‘ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΠ³ΠΎ, Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ… случаях Π²Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ Π²ΠΏΠΎΠ»Π½Π΅ ΠΏΡ€ΠΈΠ΅ΠΌΠ»Π΅ΠΌΡ‹ΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ ΠΈ Π΄Π°ΠΆΠ΅ Π½Π΅ Π·Π°ΠΏΠΎΠ΄ΠΎΠ·Ρ€ΠΈΡ‚Π΅ ΠΎΠ± ΠΎΡˆΠΈΠ±ΠΊΠ΅ — Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° Ρƒ Π²Π°ΡˆΠ΅ΠΉ логичСской систСмы ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ Π½Π΅ ΠΎΠΊΠ°ΠΆΠ΅Ρ‚ся смСщСнным Π½Π°Ρ‡Π°Π»ΠΎ отсчСта ΠΏΠΎ ΠΎΡΠΈ x ΠΎΡ‚ Π»Π΅Π²ΠΎΠΉ Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ контСкста. Π’ ΡΡ‚ΠΎΠΌ случаС Π²Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ ΡˆΠΈΡ€ΠΈΠ½Ρƒ 10 пиксСль, ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½Π½ΡƒΡŽ Π² Π»ΠΎΠ³ΠΈΡ‡Π΅ΡΠΊΠΈΠ΅ Π΅Π΄ΠΈΠ½ΠΈΡ†Ρ‹ плюс смСщСниС Π½Π°Ρ‡Π°Π»Π° отсчСта:

Рисунок 3. Из-Π·Π° смСщСния Π½Π°Ρ‡Π°Π»Π° отсчСта Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΠ΅ ошибок.

Π§Ρ‚ΠΎ Π±Ρ‹ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠΉ ошибки Π»ΡƒΡ‡ΡˆΠ΅ Π±Ρ€Π°Ρ‚ΡŒ Π½Π΅ ΠΎΠ΄Π½Ρƒ Ρ‚ΠΎΡ‡ΠΊΡƒ, Π° Π²Π΅ΠΊΡ‚ΠΎΡ€ Π½ΡƒΠΆΠ½ΠΎΠΉ Π΄Π»ΠΈΠ½Ρ‹:

POINT vector[ 2 ];

vector[0].x = 0; vector[0]. y = 0;

vector[1]. x = 10; vector[1]. y = 0;

DPtoLP (hdc, &vector, 2);

vector[1]. x -= vector[0]. x;

// Π”Π°Π»Π΅Π΅ считаСм, Ρ‡Ρ‚ΠΎ Π² ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π΅ vector[1]. x Π·Π°ΠΏΠΈΡΠ°Π½Π° нуТная Π½Π°ΠΌ Π²Π΅Π»ΠΈΡ‡ΠΈΠ½Π°

Π’Ρ‹Π±ΠΎΡ€ систСмы ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚

Для описания ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠΉ систСмы ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΎ ΠΏΡΡ‚ΡŒ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ² контСкста устройства. Π§Π΅Ρ‚Ρ‹Ρ€Π΅ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π° ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ смСщСниС Π½Π°Ρ‡Π°Π»Π° отсчСта ΠΈ ΠΌΠ°ΡΡˆΡ‚Π°Π±Π½Ρ‹Π΅ коэффициСнты. ΠŸΡΡ‚Ρ‹ΠΉ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ — собствСнно выбранная Π² Π½Π°ΡΡ‚оящий ΠΌΠΎΠΌΠ΅Π½Ρ‚ систСма ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚.

НазваниС Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°

Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ

ΠžΠ±ΠΎΠ·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π² Ρ„ΠΎΡ€ΠΌΡƒΠ»Π°Ρ…

Mapping mode

БистСма ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚

MM_TEXT

Window origin

Начало отсчСта Π² Π»ΠΎΠ³ΠΈΡ‡Π΅ΡΠΊΠΈΡ… ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π°Ρ…

0,0

Xwin.org, Ywin.org

Viewport origin

Начало отсчСта Π² ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π°Ρ… устройства

0,0

Xview.org, Yview.org

Window extents

ΠœΠ°ΡΡˆΡ‚Π°Π±Π½Ρ‹Π΅ коэффициСнты систСмы ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚

1,1

Xwin.ext, Ywin.ext

Viewport extents

ΠœΠ°ΡΡˆΡ‚Π°Π±Π½Ρ‹Π΅ коэффициСнты систСмы ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚

1,1

Xview.ext, Yview.ext

Бтандартная систСма ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ GDI, выбираСмая Π² ΠΊΠΎΠ½Ρ‚Скст устройства ΠΏΡ€ΠΈ Π΅Π³ΠΎ создании совпадаСт с ΡΠΈΡΡ‚Π΅ΠΌΠΎΠΉ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ самого устройства (ΠΈΠ»ΠΈ ΠΎΠΊΠ½Π°). Вакая систСма ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»Π° Π½Π°Π·Π²Π°Π½ΠΈΠ΅ тСкстовой (MM_TEXT). Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΡ‚ΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ ΠΎΡ‚ ΡΡ‚ΠΎΠΉ систСмы ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ ΠΈ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΡΠΎΠ±ΡΡ‚Π²Π΅Π½Π½ΡƒΡŽ систСму, Ρƒ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ориСнтация осСй ΠΈΠ»ΠΈ ΠΌΠ°ΡΡˆΡ‚Π°Π±Π½Ρ‹Π΅ коэффициСнты ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ ΠΎΡ‚ ΡΡ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½ΠΎΠΉ. ΠžΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ, Ρ‡Ρ‚ΠΎ Ρ‡Π°Ρ‰Π΅ всСго придСтся ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΠΈΠ΅-Π»ΠΈΠ±ΠΎ систСмы ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚, Π±Π°Π·ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠ΅ΡΡ Π½Π° ΠΌΠ΅Ρ‚ричСской ΠΈΠ»ΠΈ английской систСмах ΠΌΠ΅Ρ€. Π Π°Π· Ρ‚Π°ΠΊ, Ρ‚ΠΎ Microsoft прСдоставляСт нСсколько Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… систСм ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ… случаях Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ просто Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΡΡ‰ΡƒΡŽ Π²Π°ΠΌ ΠΌΠ΅Ρ‚Ρ€ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ (MM_LOMETRIC, MM_HIMETRIC), Π°Π½Π³Π»ΠΈΠΉΡΠΊΡƒΡŽ систСму (MM_LOENGLISH, MM_HIENGLISH) ΠΈΠ»ΠΈ ΠΏΠΎΠ»ΠΈΠ³Ρ€Π°Ρ„ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ (MM_TWIPS), Π½Π΅ Π·Π°Π±ΠΎΡ‚ΡΡΡŒ ΠΎ Ρ‚ΠΎΡ‡Π½ΠΎΠΌ вычислСнии ΠΌΠ°ΡΡˆΡ‚Π°Π±Π½Ρ‹Ρ… коэффициСнтов. Π‘ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΠ³ΠΎ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΊΠ°ΠΊΡƒΡŽ-Π»ΠΈΠ±ΠΎ ΠΈΠ· Π²Ρ‹ΡˆΠ΅Π½Π°Π·Π²Π°Π½Π½Ρ‹Ρ… систСм Π²Ρ‹ Π²ΠΎΠΎΠ±Ρ‰Π΅ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΌΠ°ΡΡˆΡ‚Π°Π±Π½Ρ‹Π΅ коэффициСнты, хотя ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Ρ‚ΡŒ Ρ‚ΠΎΡ‡ΠΊΡƒ Π½Π°Ρ‡Π°Π»Π° отсчСта.

Π’ Ρ‚Π΅Ρ… ΠΆΠ΅ случаях, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ Π½Π°ΡΡ‚Ρ€Π°ΠΈΠ²Π°Ρ‚ΡŒ ΠΌΠ°ΡΡˆΡ‚Π°Π±Π½Ρ‹Π΅ коэффициСнты, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ систСмой ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ MM_ANISOTROPIC, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π²Ρ‹ ΡΠ²ΠΎΠ±ΠΎΠ΄Π½ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΌΠ΅Π½ΡΡ‚ΡŒ всС коэффициСнты, Π»ΠΈΠ±ΠΎ MM_ISOTROPIC, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ GDI ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ Π²Π°ΠΌ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎ Π½Π°Π·Π½Π°Ρ‡Π°Ρ‚ΡŒ ΠΌΠ°ΡΡˆΡ‚Π°Π±Π½Ρ‹Π΅ коэффициСнты, Π½ΠΎ ΠΏΡ€ΠΈ этом сам ΠΈΡ… ΡΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚ΠΈΡ€ΡƒΠ΅Ρ‚, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ ΠΌΠ°ΡΡˆΡ‚Π°Π± ΠΏΠΎ ΠΎΠ±Π΅ΠΈΠΌ осям окаТСтся Ρ€Π°Π²Π½Ρ‹ΠΌ. Π’ΠΎ Π΅ΡΡ‚ΡŒ Ссли Π²Ρ‹ Π½Π°Ρ€ΠΈΡΡƒΠ΅Ρ‚Π΅ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ с Ρ€Π°Π²Π½Ρ‹ΠΌ логичСским Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ сторон, Ρ‚ΠΎ Π½Π° Ρ€ΠΈΡΡƒΠ½ΠΊΠ΅ ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚ΠΎΠΌ.

НазваниС

Π•Π΄ΠΈΠ½ΠΈΡ†Π°

ΠžΡ€ΠΈΠ΅Π½Ρ‚Π°Ρ†ΠΈΡ осСй

MM_TEXT

1 пиксСль

MM_LOMETRIC

0.1 ΠΌΠΌ

MM_HIMETRIC

0.01 ΠΌΠΌ

MM_LOENGLISH

0.01″

MM_HIENGLISH

0.001″

MM_TWIPS

1/20 полиграфичСской Ρ‚ΠΎΡ‡ΠΊΠΈ = 1/1440″

(прСдполагаСтся, Ρ‡Ρ‚ΠΎ полиграфичСская Ρ‚ΠΎΡ‡ΠΊΠ° = 1/72″) По ΠΊΡ€Π°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅Ρ€Π΅ Ρ‚Π°ΠΊ считаСт Microsoft. Π’ΠΎΠΎΠ±Ρ‰Π΅ говоря, сущСствуСт нСсколько Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… полиграфичСских систСм с ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ Ρ€Π°Π·Π½Ρ‹Ρ… Π΅Π΄ΠΈΠ½ΠΈΡ† отсчСта, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Ρ€Π°Π·ΠΌΠ΅Ρ€ Ρ‚ΠΎΡ‡ΠΊΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ нСсколько Π²Π°Ρ€ΡŒΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ.

MM_ISOTROPIC

x=y Ρ†Π΅Π½Π° Π΅Π΄ΠΈΠ½ΠΈΡ†Ρ‹ опрСдСляСтся ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ

MM_ANISOTROPIC

x≠y Ρ†Π΅Π½Π° Π΅Π΄ΠΈΠ½ΠΈΡ†Ρ‹ опрСдСляСтся ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ Π²Ρ‹Π±ΠΎΡ€Π΅ любой систСмы ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ Π½Π°Ρ‡Π°Π»ΠΎ отсчСта размСщаСтся Π² Π²Π΅Ρ€Ρ…Π½Π΅ΠΌ Π»Π΅Π²ΠΎΠΌ ΡƒΠ³Π»Ρƒ контСкста, Π΄Π°ΠΆΠ΅ Ссли ось Y Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½Π° Π²Π²Π΅Ρ€Ρ… (!). ΠŸΡ€ΠΈ этом получаСтся, Ρ‡Ρ‚ΠΎ вСсь рисунок располагаСтся Π² ΠΎΠ±Π»Π°ΡΡ‚ΠΈ ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ Y. На ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ это Π·Π½Π°Ρ‡ΠΈΡ‚, Ρ‡Ρ‚ΠΎ для Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π° систСм ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ (ΠΊΡ€ΠΎΠΌΠ΅ MM_TEXT ΠΈ MM_TWIPS) Π²Ρ‹ ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π·Π°Π΄Π°Ρ‚ΡŒ Π½ΠΎΠ²ΠΎΠ΅ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π°Ρ‡Π°Π»Π° отсчСта.

Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅! На 16Ρ‚ΠΈ разрядных ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ… ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ Π·Π°Π΄Π°ΡŽΡ‚ΡΡ Ρ†Π΅Π»Ρ‹ΠΌ 16Ρ‚ΠΈ разрядным числом со Π·Π½Π°ΠΊΠΎΠΌ, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ минимальноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ -32 768, Π° ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½ΠΎΠ΅ +32 767.

Для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Π±Ρ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΈΠ»ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Ρ‚Π΅ΠΊΡƒΡ‰ΡƒΡŽ систСму ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ функциями GetMapMode, которая Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ индСкс ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠΉ систСмы ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚, ΠΈΠ»ΠΈ SetMapMode, которая устанавливаСт Π½ΠΎΠ²ΡƒΡŽ систСму ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚:

UINT GetMapMode (hDC);

UINT SetMapMode (hDC, nIndex);

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΈΠ·ΠΌΠ΅Π½ΡΡŽΡ‰ΠΈΠ΅ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Ρ‚ΠΎΡ‡ΠΊΠΈ Π½Π°Ρ‡Π°Π»Π° отсчСта ΠΈ ΠΌΠ°ΡΡˆΡ‚Π°Π±Π½Ρ‹Π΅ коэффициСнты, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΡ… ΠΈΠ»ΠΈ Π½Ρ‹Π½Π΅ Π΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… значСниях Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ² Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ. БущСствуСт Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ «ΡΡ‚Π°Ρ€Ρ‹ΠΉ» Π½Π°Π±ΠΎΡ€ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Π½Π° 16Ρ‚ΠΈ Ρ€Π°Π·Ρ€ΡΠ΄Π½ΡƒΡŽ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡƒ. Π­Ρ‚ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ ΠΎΠ±Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π° (ΠΌΠ°ΡΡˆΡ‚Π°Π±Π½Ρ‹Π΅ коэффициСнты ΠΏΠΎ ΠΎΡΡΠΌ X ΠΈ Y), ΡƒΠΏΠ°ΠΊΠΎΠ²Π°Π½Π½Ρ‹Π΅ Π² Π΄Π²ΠΎΠΉΠ½ΠΎΠ΅ слово; младшСС слово содСрТит ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ X, Π° ΡΡ‚Π°Ρ€ΡˆΠ΅Π΅ — ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ Y. Для получСния этих ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ ΠΏΠΎ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ макросами LOWORD (dw) ΠΈ HIWORD (dw).

Π’Π°ΠΊ ΠΊΠ°ΠΊ Π² Win32 API ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ Π·Π°Π΄Π°ΡŽΡ‚ΡΡ Ρ†Π΅Π»Ρ‹ΠΌ числом, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ 32Ρ… разрядным, Ρ‚ΠΎ ΡƒΠΏΠ°ΠΊΠΎΠ²Π°Ρ‚ΡŒ Π΄Π²Π° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° Π² ΠΎΠ΄Π½ΠΎ Π΄Π²ΠΎΠΉΠ½ΠΎΠ΅ 32Ρ… разрядноС слово стало Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ. Π’ ΡΠ²ΡΠ·ΠΈ с ΡΡ‚ΠΈΠΌ GDI прСдоставляСт Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰ΠΈΠ΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ Π² ΡΡ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π΅ Ρ‚ΠΈΠΏΠ° SIZE ΠΈΠ»ΠΈ POINT. По ΡΡ‡Π°ΡΡ‚ΡŒΡŽ, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ измСнСния Π±Ρ‹Π»ΠΈ внСсСны Π² Windows API Π΅Ρ‰Π΅ Π²ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½Π° Windows 3.1, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ использованиС Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, Ρ‚ΠΈΠΏΠΈΡ‡Π½Ρ‹Ρ… для Win32 API Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΈ Π² Windows API.

typedef struct tagSIZE {

int cx;

int cy;

} SIZE;

typedef struct tagPOINT {

int x;

int y;

} POINT;

ΠŸΡ€ΠΈ использовании любой стандартной систСмы ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π°Ρ‡Π°Π»Π° отсчСта логичСской систСмы ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚, Π·Π°Π΄Π°Π² Π΅Π³ΠΎ Π»ΠΈΠ±ΠΎ Π² Π»ΠΎΠ³ΠΈΡ‡Π΅ΡΠΊΠΈΡ… Π΅Π΄ΠΈΠ½ΠΈΡ†Π°Ρ… (window origin), Π»ΠΈΠ±ΠΎ Π² Π΅Π΄ΠΈΠ½ΠΈΡ†Π°Ρ… устройства (viewport origin) с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ:

// Π Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Windows API

DWORD GetWindowOrg (hDC); 0

DWORD GetViewportOrg (hDC); 0

DWORD SetWindowOrg (hDC, nX, nY); 0

DWORD SetViewportOrg (hDC, nX, nY); 0

// Π Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹ Π² Windows API (начиная с Windows 3.1) ΠΈ Π² Win32 API

BOOL GetWindowOrgEx (hDC, lpPoint);

BOOL GetViewportOrgEx (hDC, lpPoint);

BOOL SetWindowOrgEx (hDC, nX, nY, lpPrevPoint);

BOOL SetViewportOrgEx (hDC, nX, nY, lpPrevPoint);

Для задания ΠΌΠ°ΡΡˆΡ‚Π°Π±Π½Ρ‹Ρ… коэффициСнтов Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ функциями

// Π Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Windows API

DWORD GetWindowExt (hDC); 0

DWORD GetViewportExt (hDC); 0

DWORD SetWindowExt (hDC, nX, nY); 0

DWORD SetViewportExt (hDC, nX, nY); 0

DWORD ScaleWindowExt (hDC, xMul, xDiv, yMul, yDiv); 0

DWORD ScaleViewportExt (hDC, xMul, xDiv, yMul, yDiv); 0

// Π Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹ Π² Windows API (начиная с Windows 3.1) ΠΈ Π² Win32 API

BOOL GetWindowExtEx (hDC, lpSize);

BOOL GetViewportExtEx (hDC, lpSize);

BOOL SetWindowExtEx (hDC, nX, nY, lpPrevSize);

BOOL SetViewportExtEx (hDC, nX, nY, lpPrevSize);

BOOL ScaleWindowExtEx (hDC, xMul, xDiv, yMul, yDiv, lpPrevSize);

BOOL ScaleViewportExtEx (hDC, xMul, xDiv, yMul, yDiv, lpPrevSize);

ΠŸΡ€ΠΈ использовании Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Scale… Ext… систСма осущСствляСт ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ†ΠΈΡŽ ΠΌΠ°ΡΡˆΡ‚Π°Π±Π½Ρ‹Ρ… коэффициСнтов с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… Ρ„ΠΎΡ€ΠΌΡƒΠ»:

Xnew.ext = (Xold.ext * xMul) / xDiv

Ynew.ext = (Yold.ext * yMul) / yDix

Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ рассмотрСнных Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ сами ΡΠΊΠΎΠ½ΡΡ‚Ρ€ΡƒΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌΡƒΡŽ систСму ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚, ΠΈΠ»ΠΈ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΡƒΡŽ-Π»ΠΈΠ±ΠΎ Π·Π°Ρ€Π°Π½Π΅Π΅ ΠΎΠΏΠΈΡΠ°Π½Π½ΡƒΡŽ. Однако Π² Ρ€Π°Π·Π½Ρ‹Ρ… систСмах ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ Π½Π°Π»ΠΎΠΆΠ΅Π½Ρ‹ Ρ€Π°Π·Π½Ρ‹Π΅ ограничСния Π½Π° ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ². БовсСм свободно ΠΌΠ°Π½ΠΈΠΏΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ с ΡΡ‚ΠΈΠΌΠΈ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°ΠΌΠΈ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² ΡΠΈΡΡ‚Π΅ΠΌΠ΅ MM_ANISOTROPIC. Она позволяСт ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ с ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹ΠΌΠΈ значСниями Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ² ΠΏΠΎ ΠΎΠ±Π΅ΠΈΠΌ осям.

Однако такая полная свобода Π² Π²Ρ‹Π±ΠΎΡ€Π΅ ΠΌΠ°ΡΡˆΡ‚Π°Π±Π½Ρ‹Ρ… коэффициСнтов часто являСтся излишнСй. Π’ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… случаях Π²Π°ΠΌ Π½Π°Π΄ΠΎ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ Ρ€Π°Π²Π½ΡƒΡŽ Π²Π΅Π»ΠΈΡ‡ΠΈΠ½Ρƒ Π΅Π΄ΠΈΠ½ΠΈΡ†Ρ‹ ΠΏΠΎ ΠΎΠ±Π΅ΠΈΠΌ осям. Π’Π°ΠΊΠΈΠ΅ систСмы ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ ΡƒΠ΄ΠΎΠ±Π½Ρ‹ Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ с Ρ€Π°Π²Π½Ρ‹ΠΌΠΈ Π²Π΅Π»ΠΈΡ‡ΠΈΠ½Π°ΠΌΠΈ сторон Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡ‚ΡŒΡΡ ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚ΠΎΠΌ. ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ сами Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠ΅ΠΉ ΠΎΠ± ΡƒΡΡ‚ройствС ΠΈ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ Π½ΡƒΠΆΠ½Ρ‹Π΅ значСния Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ².

Но ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΈ ΠΏΡ€ΠΎΡ‰Π΅ — Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ систСмой ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ MM_ISOTROPIC. ΠŸΡ€ΠΈ установкС Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ² Π² Ρ‚Π°ΠΊΠΎΠΉ систСмС ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ GDI сам ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΈΡ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΡ, Ρ‡Ρ‚ΠΎ Π±Ρ‹ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ Ρ€Π°Π²Π½ΡƒΡŽ Ρ†Π΅Π½Ρƒ Π΅Π΄ΠΈΠ½ΠΈΡ†. ΠŸΡ€ΠΈ этом Π²Π°ΠΆΠ½ΠΎ ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒ сначала ΠΌΠ°ΡΡˆΡ‚Π°Π±Π½Ρ‹Π΅ коэффициСнты логичСской систСмы ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ (с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ SetWindowExt ΠΈΠ»ΠΈ SetWindowExtEx) ΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π·Π°Ρ‚Π΅ΠΌ коэффициСнты систСмы ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ устройства (с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ SetViewportExt ΠΈΠ»ΠΈ SetViewportExtEx).

Π’ΠΎ Π²ΡΠ΅Ρ… ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Ρ… систСмах ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ лишь ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π°Ρ‡Π°Π»Π° отсчСта, Π° ΠΌΠ°ΡΡˆΡ‚Π°Π±Π½Ρ‹Π΅ коэффициСнты останутся Π½Π΅ΠΈΠ·ΠΌΠ΅Π½Π½Ρ‹ΠΌΠΈ.

ΠŸΡ€Π°ΠΊΡ‚ΠΈΡ‡Π΅ΡΠΊΠΈΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹

Допустим, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎ Π±Ρ‹ логичСский Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΎΠΊΠ½Π° Π±Ρ‹Π» ΠΊΠ°ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ 1000×1000 Π΅Π΄ΠΈΠ½ΠΈΡ† нСзависимо ΠΎΡ‚ Π΅Π³ΠΎ физичСского Ρ€Π°Π·ΠΌΠ΅Ρ€Π°, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΌΠ°ΡΡˆΡ‚Π°Π± ΠΏΠΎ ΠΎΠ±Π΅ΠΈΠΌ осям Π±Ρ‹Π» ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΌ ΠΈ ΠΏΡ€ΠΈ этом ΠΏΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ Π½Π°Ρ‡Π°Π»ΠΎ отсчСта ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ Π² Ρ†Π΅Π½Ρ‚Ρ€ ΠΎΠΊΠ½Π°. Для этого Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Ρ‚Π°ΠΊΠΎΠΉ схСмой:

void Cls_OnPaint (HWND hwnd)

{PAINTSTRUCT ps;

RECT rc;

BeginPaint (hwnd, &ps);

// устанавливаСм ΡΠΎΠ±ΡΡ‚Π²Π΅Π½Π½ΡƒΡŽ систСму ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚

GetClientRect (hwnd, &rc); // rc. left ΠΈ rc. top всСгда Ρ€Π°Π²Π½Ρ‹ 0

SetMapMode (ps.hdc, MM_ISOTROPIC);

// Π·Π°Π΄Π°Π΅ΠΌ ΠΌΠ°ΡΡˆΡ‚Π°Π±Π½Ρ‹Π΅ коэффициСнты

SetWindowExtEx (ps.hdc, 1000, 1000, (LPSIZE)0L);

SetViewportExtEx (ps.hdc, rc. right, -rc.bottom, (LPSIZE)0L);

// ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Π΅ΠΌ Π½Π°Ρ‡Π°Π»ΠΎ отсчСта Π² Ρ†Π΅Π½Ρ‚Ρ€ контСкста

SetViewportOrgEx (ps.hdc, rc. right/2, rc. bottom/2, (LPPOINT)0L);

… // осущСствляСм рисованиС Π² Π²Ρ‹Π±Ρ€Π°Π½Π½ΠΎΠΉ систСмС ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚

EndPaint (hwnd, &ps);}

Π’ ΠΊΠ°Ρ‡Π΅ΡΡ‚Π²Π΅ Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° ΠΎΠ±Ρ€Π°Ρ‚ΠΈΠΌ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΡΠΈΡΡ‚Π΅ΠΌΡƒ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ MM_TWIPS. Π’ ΡΡ‚ΠΎΠΉ систСмС ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ Π·Π° Π΅Π΄ΠΈΠ½ΠΈΡ†Ρƒ принята 1/1440 доля дюйма. Если ΠΏΡ€ΠΈ ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠ΅ ΠΊΠ°ΠΊΠΎΠ³ΠΎ-Π»ΠΈΠ±ΠΎ полиграфичСского ΠΌΠ°ΠΊΠ΅Ρ‚Π° Π²Ρ‹ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΠ΅Ρ‚Π΅ эту систСму ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ для Π²Ρ‹Π²ΠΎΠ΄Π° Π½Π° ΠΏΡ€ΠΈΠ½Ρ‚Π΅Ρ€, Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ цСлСсообразным ΠΏΡ€ΠΈ Π²Ρ‹Π²ΠΎΠ΄Π΅ Π½Π° ΡΠΊΡ€Π°Π½ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎΠΉ систСмой, Π½ΠΎ Π±Π°Π·ΠΈΡ€ΡƒΡŽΡ‰Π΅ΠΉΡΡ Π½Π° Π»ΠΎΠ³ΠΈΡ‡Π΅ΡΠΊΠΎΠΌ дюймС:

void Cls_OnPaint (HWND hwnd)

{PAINTSTRUCT ps;

BeginPaint (hwnd, &ps);

// устанавливаСм ΡΠΎΠ±ΡΡ‚Π²Π΅Π½Π½ΡƒΡŽ систСму ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚

SetMapMode (ps.hdc, MM_ANISOTROPIC);

SetWindowExtEx (ps.hdc, 1440, 1440, (LPSIZE)0L);

SetViewportExtEx (

ps.hdc,

GetDeviceCaps (ps.hdc, LOGPIXELSX),

GetDeviceCaps (ps.hdc, LOGPIXELSY),

(LPSIZE)0L);

… // осущСствляСм рисованиС Π² Π²Ρ‹Π±Ρ€Π°Π½Π½ΠΎΠΉ систСмС ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚

EndPaint (hwnd, &ps);}

Π’ Π΄Ρ€ΡƒΠ³ΠΈΡ… случаях ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡƒΡ‚ΡŒ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΌΠ°ΡΡˆΡ‚Π°Π±Π½Ρ‹Π΅ коэффициСнты, ΠΎΡ‚Ρ‚Π°Π»ΠΊΠΈΠ²Π°ΡΡΡŒ ΠΎΡ‚ ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ стандартной систСмы ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚. Ну, ΠΊ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ, Π²Π°ΠΌ Π½Π°Π΄ΠΎ ΠΎΡ‚ΠΎΠ±Ρ€Π°Π·ΠΈΡ‚ΡŒ Π½Π° ΡΠΊΡ€Π°Π½Π΅ Ρ‡Π΅Ρ€Ρ‚Π΅ΠΆ ΠΊΠ°ΠΊΠΎΠ³ΠΎ-Π»ΠΈΠ±ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π·Π°Π΄Π°Π½Ρ‹ Π² ΠΌΠ΅Ρ‚ричСской систСмС ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚, Π½ΠΎ ΠΏΡ€ΠΈ этом ΠΎΡ‚ΠΎΠ±Ρ€Π°Π·ΠΈΡ‚ΡŒ Π΅Π³ΠΎ Π² Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠΌ ΠΌΠ°ΡΡˆΡ‚Π°Π±Π΅. НапримСр, Ρ‡Π΅Ρ€Ρ‚Π΅ΠΆ микродвигатСля ΡƒΠ΄ΠΎΠ±Π½ΠΎ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΡ‚ΡŒ Ρ€Π°Π· Π² 10, Π° Ρ‡Π΅Ρ€Ρ‚Π΅ΠΆ автомобиля — ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚ΡŒ Ρ€Π°Π· Π² 50. Π’ Ρ‚ΠΎ ΠΆΠ΅ врСмя ΡƒΠ΄ΠΎΠ±Π½ΠΎ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΏΡ€Π΅ΠΆΠ½ΡŽΡŽ Π΅Π΄ΠΈΠ½ΡƒΡŽ ΠΌΠ΅Ρ‚Ρ€ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ систСму задания Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠ². Для этого ΡƒΠ΄ΠΎΠ±Π΅Π½ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΡ€ΠΈΠ΅ΠΌ — ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ сначала Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡƒΡŽ ΠΌΠ΅Ρ‚Ρ€ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ систСму ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚, Π·Π°Ρ‚Π΅ΠΌ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒΡΡ Π² Π°Π½ΠΈΠ·ΠΎΡ‚Ρ€ΠΎΠΏΠ½Ρ‹Π΅ (ΠΈΠ»ΠΈ ΠΈΠ·ΠΎΡ‚Ρ€ΠΎΠΏΠ½Ρ‹Π΅) ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ ΠΈ ΠΏΠΎΡ‚ΠΎΠΌ ΡΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ°ΡΡˆΡ‚Π°Π±Π½Ρ‹Π΅ коэффициСнты.

void Cls_OnPaint (HWND hwnd)

{PAINTSTRUCT ps;

SIZE sz;

RECT rc;

BeginPaint (hwnd, &ps);

GetClientRect (hwnd, &rc);

// устанавливаСм ΡΠΎΠ±ΡΡ‚Π²Π΅Π½Π½ΡƒΡŽ систСму ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚

SetMapMode (ps.hdc, MM_HIMETRIC);

SetMapMode (ps.hdc, MM_ANISOTROPIC);

// Ρ€ΠΈΡΠΎΠ²Π°Ρ‚ΡŒ Π±ΡƒΠ΄Π΅ΠΌ Π°Π²Ρ‚ΠΎΠΌΠΎΠ±ΠΈΠ»ΡŒ — ΠΌΠ°ΡΡˆΡ‚Π°Π± 50:1

ScaleWindowExtEx (ps.hdc, 50,1, 50,1, &sz);

// ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Π΅ΠΌ Π½Π°Ρ‡Π°Π»ΠΎ отсчСта Π² Π½ΠΈΠΆΠ½ΠΈΠΉ Π»Π΅Π²Ρ‹ΠΉ ΡƒΠ³ΠΎΠ» листа

SetViewportOrgEx (ps.hdc, 0, rc. bottom, (LPPOINT)0L);

… // осущСствляСм рисованиС Π² Π²Ρ‹Π±Ρ€Π°Π½Π½ΠΎΠΉ систСмС ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚

EndPaint (hwnd, &ps);}

Π­Ρ‚ΠΎΡ‚-ΠΆΠ΅ ΠΏΡ€ΠΈΠ΅ΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ для «ΠΏΠ΅Ρ€Π΅Π²ΠΎΡ€ΠΎΡ‚Π°» осСй ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚. НапримСр, ΠΌΠΎΠΆΠ½ΠΎ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΌΠ΅Ρ‚Ρ€ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ систСму, Π½ΠΎ ΠΎΡΡŒ Y Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ Π²Π½ΠΈΠ·, ΠΊΠ°ΠΊ Π² MM_TEXT.

Π“Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Π΅ систСмы ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ GDI (Win32 API)

Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅! Π’ Π΄Π°Π½Π½ΠΎΠΌ Ρ€Π°Π·Π΄Π΅Π»Π΅ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°ΡŽΡ‚ΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ возмоТности ΠΏΠΎ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΡŽ систСм ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΡ‹Π΅ 32Ρ… разрядными подсистСмами Π² Windows NT. ΠžΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Win32 API ΠΈ Π²ΡΠ΅ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Windows API Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ этих возмоТностСй.

Π’ Win32 API прСдусмотрСн Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ, Π±ΠΎΠ»Π΅Π΅ ΠΌΠ΅Π΄Π»Π΅Π½Π½Ρ‹ΠΉ, Π½ΠΎ ΡΡƒΡ‰Π΅ΡΡ‚Π²Π΅Π½Π½ΠΎ Π±ΠΎΠ»Π΅Π΅ ΠΌΠΎΡ‰Π½Ρ‹ΠΉ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ для опрСдСлСния собствСнных систСм ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚. К ΡΠΎΠΆΠ°Π»Π΅Π½ΠΈΡŽ, Π² Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ ΠΏΡ€ΠΈ описании Π½ΠΎΠ²Ρ‹Ρ… возмоТностСй Win32 API Π² ΠΎΡ‡Π΅Ρ€Π΅Π΄Π½ΠΎΠΉ Ρ€Π°Π· ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»Π° смСна Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΎΠ»ΠΎΠ³ΠΈΠΈ (английской). ΠŸΡ€ΠΈ рассмотрСнии Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Ρ… систСм ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ Π²Ρ‹Π΄Π΅Π»ΡΡŽΡ‚ Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ понятия:

систСма ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ физичСского устройства (physical device coordinate space)

систСма ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ устройства (device coordinate space)

логичСская систСма ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ (page coordinate space)

глобальная систСма ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ (world coordinate space)

(Русскоязычная тСрминология приводится с ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ измСнСниями ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΌ Ρ€Π°Π·Π΄Π΅Π»ΠΎΠΌ, англоязычная — Π² ΡΠΎΠΎΡ‚вСтствии с Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠ΅ΠΉ).

БистСма ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ физичСского устройства соотвСтствуСт ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π°ΠΌ ΠΈ Π΅Π΄ΠΈΠ½ΠΈΡ†Π°ΠΌ устройства; для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Π±Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ ΡƒΠ΄ΠΎΠ±Π½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с ΡΠ°ΠΌΡ‹ΠΌΠΈ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ устройством вводится систСма ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ устройства, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰Π°Ρ ΠΊΠ°ΠΊΠΈΠ΅—Π»ΠΈΠ±ΠΎ нСзависимыС ΠΎΡ‚ ΡƒΡΡ‚ройства Π΅Π΄ΠΈΠ½ΠΈΡ†Ρ‹ отсчСта — Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π΄ΡŽΠΉΠΌΡ‹ ΠΈ ΠΌΠΈΠ»Π»ΠΈΠΌΠ΅Ρ‚Ρ€Ρ‹. ЛогичСская систСма ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ соотвСтствуСт логичСским ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π°ΠΌ Π² ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠΈ Windows API ΠΈ Π½Π° Π½Π΅Π΅ Ρ€Π°ΡΠΏΡ€ΠΎΡΡ‚Ρ€Π°Π½ΡΡŽΡ‚ΡΡ всС рассмотрСнныС Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΡ… Ρ€Π°Π·Π΄Π΅Π»Π°Ρ… прСобразования. Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ абстракции — глобальная систСма ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ — добавляСт Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ пСрСсчСта ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚, ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‰ΠΈΠΉ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΠΎΠ²ΠΎΡ€ΠΎΡ‚Π°, пСрСкоса, отраТСния ΠΈ ΠΌΠ°ΡΡˆΡ‚абирования ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚.

ВсС эти систСмы ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ 2Ρ… ΠΌΠ΅Ρ€Π½Ρ‹Π΅, Ρ€Π°Π·Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΡ€ΠΈΠ΅Π½Ρ‚Π°Ρ†ΠΈΠ΅ΠΉ осСй, Ρ†Π΅Π½ΠΎΠΉ дСлСния ΠΈ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ΠΎΠΌ измСнСния ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚. Π’Π°ΠΊ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ физичСского устройства ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Ρ‹, СстСствСнно, Ρ€Π°Π·ΠΌΠ΅Ρ€Π°ΠΌΠΈ самого устройства (ΠΈΠ»ΠΈ ΠΎΠΊΠ½Π°), ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ устройства ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ Π² Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅ 227 Π΅Π΄ΠΈΠ½ΠΈΡ† ΠΊΠ°ΠΊ ΠΏΠΎ Π³ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»ΠΈ, Ρ‚Π°ΠΊ ΠΈ ΠΏΠΎ Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΠΈ, Π° Π»ΠΎΠ³ΠΈΡ‡Π΅ΡΠΊΠΈΠ΅ ΠΈ Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ —Π² Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅ ±231 Π΅Π΄ΠΈΠ½ΠΈΡ†.

По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ, ΠΏΠ΅Ρ€Π΅ΡˆΠ΅Π΄ΡˆΠΈΠΉ ΠΏΠΎ Π½Π°ΡΠ»Π΅Π΄ΡΡ‚Π²Ρƒ ΠΈΠ· Windows API Π² Win32 API, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ заданию логичСских ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ GDI ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅Ρ‚ Π² ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ устройства ΠΈ Π·Π°Ρ‚Π΅ΠΌ Π² Ρ„изичСскиС ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹. Однако Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π² Π»ΡŽΠ±ΠΎΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΠΏΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ Π½Π° Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ способ, ΠΏΡ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π²Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚Π΅ Π·Π°Π΄Π°Π²Π°Ρ‚ΡŒ ΡƒΠΆΠ΅ Π½Π΅ Π»ΠΎΠ³ΠΈΡ‡Π΅ΡΠΊΠΈΠ΅, Π° Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹. ΠŸΡ€ΠΈ этом Π½Π°Π΄ΠΎ ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΡƒΡŽ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ, которая Π·Π°Π΄Π°Π΅Ρ‚ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ прСобразования:

x' = M11 * x + M21 * y + Dx

y' = M12 * x + M22 * y + Dy

ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹Π΅ Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ Ρ‚Π°ΠΊΠΎΠ³ΠΎ прСобразования ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ x' ΠΈ y' Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°ΡŽΡ‚ΡΡ ΠΊΠ°ΠΊ логичСскиС ΠΈ Π·Π°Ρ‚Π΅ΠΌ ΠΏΠΎΠ΄Π²Π΅Ρ€Π³Π°ΡŽΡ‚ΡΡ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΡŽ, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΌΡƒ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Ρƒ ΠΎΡ‚ Π»ΠΎΠ³ΠΈΡ‡Π΅ΡΠΊΠΎΠΉ систСмы ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ ΠΊ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π°ΠΌ устройства (см. Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ SetMapMode).

ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ, ΠΊΠ°ΠΊΠΎΠΉ Ρ€Π΅ΠΆΠΈΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ, ΠΈΠ»ΠΈ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π½ΡƒΠΆΠ½Ρ‹ΠΉ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ

int GetGraphicsMode (hDC);

int SetGraphicsMode (hDC, nIndex);

Для задания индСкса Ρ€Π΅ΠΆΠΈΠΌΠ° ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ΄Π½ΠΎ ΠΈΠ· Π΄Π²ΡƒΡ… символичСских ΠΈΠΌΠ΅Π½:

GM_COMPATIBLE — Ρ€Π΅ΠΆΠΈΠΌ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, соотвСтствуСт ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠΌΡƒ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΡŽ логичСских ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ Π² ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ устройства, принятому Π² Windows API.

GM_ADVANCED — Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Π½Ρ‹ΠΉ Ρ€Π΅ΠΆΠΈΠΌ Win32 API. Π’ ΡΡ‚ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ ΠΈΠ»ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ прСобразования Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚. Π’ΠΎΡ‡Π½Π΅Π΅ говоря, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ для задания ΠΈΠ»ΠΈ измСнСния ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ прСобразования ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚. Если такая ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π° ΡƒΠΆΠ΅ Π·Π°Π΄Π°Π½Π° ΠΈ ΠΎΡ‚личаСтся ΠΎΡ‚ ΡΡ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½ΠΎΠΉ, Ρ‚ΠΎ Π΄Π°ΠΆΠ΅ ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π΅ Π² GM_COMPATIBLE ΠΎΠ½Π° Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΏΠΎ-ΠΏΡ€Π΅ΠΆΠ½Π΅ΠΌΡƒ. Для ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠΉ Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΡΡ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½ΡƒΡŽ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠΉ (M11 ΠΈ M22 Ρ€Π°Π²Π½Ρ‹ 1.0, ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ коэффициСнты M21, M12, Dx ΠΈ Dy Ρ€Π°Π²Π½Ρ‹ 0.0) с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ SetWorldTransform, Π»ΠΈΠ±ΠΎ, воспользовавшись Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ ModifyWorldTransform ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΈΡΡ…ΠΎΠ΄Π½ΡƒΡŽ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ.

BOOL GetWorldTransform (hDC, lpxformMatrix);

BOOL SetWorldTransform (hDC, lpxformMatrix);

BOOL ModifyWorldTransform (hDC, lpxformMatrix, dwMode);

BOOL CombineTransform (lpxformResult, lpxformA, lpxformB);

typedef struct tagXFORM {

FLOAT eM11;

FLOAT eM12;

FLOAT eM21;

FLOAT eM22;

FLOAT eDx;

ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ вСсь тСкст
Π—Π°ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Ρ„ΠΎΡ€ΠΌΡƒ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Ρ€Π°Π±ΠΎΡ‚ΠΎΠΉ