Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«DirectX 8. НачинаСм Ρ€Π°Π±ΠΎΡ‚Ρƒ с DirectX GraphicsΒ». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 13

Автор Π‘Π΅Ρ€Π³Π΅ΠΉ Π’Π°Ρ‚ΠΊΠΈΠ½

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

ΠžΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΠ΅Ρ‚ΡΡ отслСТиваниС ошибок. ΠŸΡ€ΠΈΡ‡Π΅ΠΌ, сдСлана Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ стандартная ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ³ΠΎ значСния, Π½ΠΎ ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° глобального Ρ„Π»Π°Π³Π° (схоТая с GetLastError() ΠΈΠ· Win32 API). Π­Ρ‚ΠΎ позволяСт Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ ошибки ΠΈΠ· Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰ΠΈΡ… события. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, провСряСтся, выставлСн Π»ΠΈ Ρ„Π»Π°Π³ (m_dwError) Π²ΠΎ всСх критичСских мСстах прилоТСния. Π’ΠΎ Π΅ΡΡ‚ΡŒ любая ошибка Π²Π΅Π΄Π΅Ρ‚ ΠΊ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΠΌΡƒ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ с Π²Ρ‹Π΄Π°ΡŽΡ‰ΠΈΠΌΡΡ послС Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ Ρ€Π°Π±ΠΎΡ‚Ρ‹ прилоТСния сообщСниСм.

А Ρ‚Π°ΠΊΠΆΠ΅, я посчитал Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ΠΌ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π² каркас ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ:

РисованиС ΠšΡƒΡ€ΡΠΎΡ€Π° (CCursor). Π­Ρ‚ΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΠ»ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ каркас Π·Π°ΠΊΠΎΠ½Ρ‡Π΅Π½Π½Ρ‹ΠΌ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ. ВсС Ρ€Π°Π²Π½ΠΎ практичСски всСгда трСбуСтся Ρ€ΠΈΡΠΎΠ²Π°Ρ‚ΡŒ собствСнный курсор. Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ рСализация, которая прСдлагаСтся спорна ΠΈ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Π΄ΠΎΡ€Π°Π±ΠΎΡ‚ΠΊΠΈ, Π½ΠΎ Ρƒ мСня ΠΎΠ½Π° Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π±Π΅Π· ошибок ΠΊΠ°ΠΊ Π² ΠΎΠΊΠΎΠ½Π½ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅, Ρ‚Π°ΠΊ ΠΈ Π² полноэкранном Ρ€Π΅ΠΆΠΈΠΌΠ΅, ΠΊΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΡŒΡŽ (Π½ΠΎ Π½Π΅ нСдостатком) этого класса ΠΌΠΎΠΆΠ½ΠΎ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ инициализация курсора происходит ΠΈΠ·Π½ΡƒΡ‚Ρ€ΠΈ класса, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π½Π΅ опрСдСляСтся нСобходимая Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ для смСны Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½Π½ΠΎΠ³ΠΎ курсора Π½Π° Π»Π΅Ρ‚Ρƒ. Но это, Π² ΠΎΠ±Ρ‰Π΅ΠΌ, Π½Π΅ слоТная Π·Π°Π΄Π°Ρ‡Π°, Π° здСсь я Π΅Π΅ Π½Π΅ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π» Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎΡ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ Π½Π΅ посчитал Π½ΡƒΠΆΠ½Ρ‹ΠΌ. Π Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° анимация курсора ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° смСна стадий курсора, Π² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½ΠΎΠΌ Ρ„Π°ΠΉΠ»Π΅ описан ΠΏΡ€ΠΈΠΌΠ΅Ρ€ добавлСния Π½ΠΎΠ²Ρ‹Ρ… стадий (кстати, ΠΊΠ°ΠΊ Π²Π°ΠΌ ΠΌΠΎΠΉ английский :)), Π° Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Create() β€” создания Π°Π½ΠΈΠΌΠ°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… Ρ†Π΅ΠΏΠΎΡ‡Π΅ΠΊ.

Распаковка рСсурсов ΠΈΠ· Ρ„Π°ΠΉΠ»Π° рСсурсов (ResourceManager). Π― прСкрасно понимаю, Ρ‡Ρ‚ΠΎ рСализация, которая Π΅ΡΡ‚ΡŒ Π² этом классС, нСидСальна, Π½ΠΎ это Π»ΡƒΡ‡ΡˆΠ΅, Ρ‡Π΅ΠΌ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ Π»Π΅ΠΆΠ°Ρ‰ΠΈΠ΅ рСсурсы, ΠΏΡƒΡΡ‚ΡŒ Π΄Π°ΠΆΠ΅ записанныС Π½Π΅ Π² общСдоступном Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅. А ΠΏΡ€ΠΈ нСобходимости Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΈΠ»ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π΅Π»Π°Ρ‚ΡŒ β€” Π±Ρ‹Π»ΠΎ Π±Ρ‹ ΠΆΠ΅Π»Π°Π½ΠΈΠ΅. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ CFolder класс, основанный Π½Π° Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· ΠΎΠ»ΠΈΠΌΠΏΠΈΠ°Π΄Π½Ρ‹Ρ… Π·Π°Π΄Π°Ρ‡Π΅ΠΊ (Π·Π°Π΄Π°Ρ‡Π° ΠΏΡ€ΠΎ Ρ…Π°ΠΊΠ΅Ρ€Π° Π‘ΠΈΠ»Π»Π° Ρƒ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ накрылся ТСсткий диск). Он создаСт ΠΈ удаляСт Π΄Π΅Ρ€Π΅Π²ΠΎ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΎΠ² ΠΏΠΎ названию Ρ„Π°ΠΉΠ»Π°, начиная с ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΠΏΡƒΡ‚ΠΈ (названия Ρ„Π°ΠΉΠ»ΠΎΠ² Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ). ОписаниС использования класса Π΅ΡΡ‚ΡŒ Π² main.cpp ΠΈ ΠΌΠ½Π΅ каТСтся достаточно Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹ΠΌ.

Π‘ΠΎΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ ΠΈ восстановлСниС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² прилоТСния ΠΈΠ· Ρ„Π°ΠΉΠ»Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ (CConfigFile). Π­Ρ‚Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π±Ρ‹Π»Π° ΠΎΠ·Π½Π°Ρ‡Π΅Π½Π° ΠΊΠ°ΠΊ нСобходимая для качСствСнного графичСского прилоТСния. Класс простой, использованиС Ρ‚ΠΎΠΆΠ΅ нСслоТноС. ЕдинствСнноС ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ - Π½ΡƒΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅ΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ класса CConfigFile::restore() - ΠΎΠ½Π° Π΄ΠΎΠ»ΠΆΠ½Π° Π²ΠΎΡΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒ сбойный ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» ΠΊ ΠΏΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠΌΡƒ ΡΠΎΡΡ‚ΠΎΡΠ½ΠΈΡŽ. Π­Ρ‚Π° спСцифичная Π·Π°Π΄Π°Ρ‡Π° Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ спСцифичной Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ прилоТСния, ΠΈ поэтому здСсь я Π΅Π΅ Π½Π΅ ΠΏΡ€ΠΎΠ²Π΅Π», Π½ΠΎ ΠΏΡ€ΠΈ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠΈ прилоТСния, я ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ занСсу Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ значСния Π² Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ этой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. ΠšΡΡ‚Π°Ρ‚ΠΈ, ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ разряда строк Π½Π΅ Π²Π²Π΅Π΄Π΅Π½ΠΎ, поэтому слСдитС, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ Π² Ρ„Π°ΠΉΠ»Π΅ ΠΈ строка, ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π²Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚Π΅ Π΅Π³ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€, Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ совпадали, Π½ΠΎ ΠΈ Π±Ρ‹Π»ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ разрядС.

Π‘ΠΎΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ прилоТСния Π² Ρ„Π°ΠΉΠ» ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π°. Π­Ρ‚Π° рСализация Π½Π΅ ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈΡ‚ ΠΌΠ½Π΅, Π°Π²Ρ‚ΠΎΡ€Π° я Π½Π΅ знаю, Π½ΠΎ всС Ρ€Π°Π²Π½ΠΎ хочСтся ΡΠΊΠ°Π·Π°Ρ‚ΡŒ Π΅ΠΌΡƒ спасибо. Бтандартная качСствСнная рСализация. Π˜ΡΡ…ΠΎΠ΄Π½ΠΈΠΊ поставлялся с ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² NVIDIA, поэтому, я Π΄ΡƒΠΌΠ°ΡŽ, Π΅Π³ΠΎ использованиС Π½Π΅ являСтся Π½Π°Ρ€ΡƒΡˆΠ΅Π½ΠΈΠ΅ΠΌ авторского Π·Π°ΠΊΠΎΠ½ΠΎΠ΄Π°Ρ‚Π΅Π»ΡŒΡΡ‚Π²Π°.

Π’ каркасС рисуСтся счСтчик FPS, для Π΅Π³ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π±Ρ‹Π»ΠΈ Π²Π²Π΅Π΄Π΅Π½Ρ‹ классы: ueFontD3D β€” это CD3DFont ΠΈΠ· DirectX SDK, ΠΏΠ΅Ρ€Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ ΠΎΠ½ Π±Ρ‹Π» просто ΠΈΠ· соглашСния ΠΎΠ± ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠΈ. Под Π½Π΅Π³ΠΎ написан класс Label, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π·Π°Π΄Π°Π½Π½Ρ‹ΠΌ ΡˆΡ€ΠΈΡ„Ρ‚ΠΎΠΌ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ Π½Π° экран. Π’Π°ΠΊΠΆΠ΅ строчку ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΡ€Ρ‹Ρ‚ΡŒ ΠΈΠ»ΠΈ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ сСрой (dimmed). Им выводится счСтчик FPS ΠΈ нСкоторая Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ информация.

Π’ каркасС Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ΠΎ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ ΠΏΠΎ сцСнС ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ направлСния взгляда (ΠΎΡ‚ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ Π»ΠΈΡ†Π°). Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ клавиши:

LEFT ARROW, A β€” стрСйф Π²Π»Π΅Π²ΠΎ.

RIGHT ARROW, D β€” стрСйф Π²ΠΏΡ€Π°Π²ΠΎ.

UP ARROW, W β€” Π²ΠΏΠ΅Ρ€Π΅Π΄.

DOWN ARROW, S β€” Π½Π°Π·Π°Π΄.

C β€” Π²Π²Π΅Ρ€Ρ….

V β€” Π²Π½ΠΈΠ·.

Для измСнСния Π½Π°ΠΊΠ»ΠΎΠ½ΠΎΠ² Π³ΠΎΠ»ΠΎΠ²Ρ‹ достаточно ΠΏΡ€ΠΈΠΆΠ°Ρ‚ΡŒ ΠΏΡ€Π°Π²ΡƒΡŽ ΠΊΠ»Π°Π²ΠΈΡˆΡƒ ΠΌΡ‹ΡˆΠΈ ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π²ΠΈΠ³Π°Ρ‚ΡŒ Π΅ΠΉ β€” ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ вдоль оси Y β€” Π³ΠΎΠ»ΠΎΠ²Ρƒ Π²Π²Π΅Ρ€Ρ…/Π²Π½ΠΈΠ·, ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ вдоль оси X β€” Π³ΠΎΠ»ΠΎΠ²Ρƒ Π²Π»Π΅Π²ΠΎ/Π²ΠΏΡ€Π°Π²ΠΎ. НаправлСниС вдоль оси Y ΠΈΠ½Π²Π΅Ρ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΎ. Если Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ввСсти Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΈΠ½Π²Π΅Ρ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΡ‹ΡˆΠΊΡƒ, Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ввСсти Π² ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ inverty, которая Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 1 ΠΈΠ»ΠΈ -1, ΠΈ Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ Π΅Π΅ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅. А Π² мСстС измСнСния ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° m_iFi Π½Π° Π½Π΅Π΅ просто ΡƒΠΌΠ½ΠΎΠΆΠ°Ρ‚ΡŒ.

БоглашСния ΠΏΠΎ использованию каркаса:

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ MFC, статично ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½Π½Π°Ρ ΠΊ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡŽ. Π§Π°ΡΡ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΉ занСсСна Π² Ρ„Π°ΠΉΠ» STDAFX.h, Π° ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΉ Π² Ρ„Π°ΠΉΠ» STDAFX.cpp. Они Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ всСми классами, поэтому ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ ΠΈΠΌΠ΅Π½Π½ΠΎ Ρ‚Π°ΠΌ. ВсС ΠΎΠ±Ρ‰ΠΈΠ΅ опрСдСлСния Ρ‚ΠΈΠΏΠΎΠ² сдСланы Π² common.h β€” Ρ„Π°ΠΉΠ»Π΅ с Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹ΠΌΠΈ опрСдСлСниями, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΌΠΈ каркасом ΠΈ графичСскими классами. Π’ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ классы Π² Π½Π΅ΠΌ Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ хранят. Для имСнования Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ систСма, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π³Π»Π°Π²Π½ΠΎΠ΅ слово, ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ ΠΏΠΎΠ΄Ρ€Π°Π·Π΄Π΅Π»ΡΡŽΡ‚ΡΡ классы Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, ставится ΠΏΠ΅Ρ€Π΅Π΄ ΠΎΡΡ‚Π°Π»ΡŒΠ½ΠΎΠΉ Ρ‡Π°ΡΡ‚ΡŒΡŽ. НапримСр, Ссли функция относится ΠΊ Π΄Π²ΠΈΠΆΠΊΡƒ (каркасу), Ρ‚ΠΎ ΠΎΠ½Π° ΠΈΠΌΠ΅Π΅Ρ‚ прСфикс ueEngine*, Ссли ΠΊ событиям β€” ueAction* ΠΈ Ρ‚. Π΄.

Π’ Ρ„ΠΎΠ½ΠΎΠ²ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅ инициализируСтся устройство DInput для получСния ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎΡ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ. Им ΠΌΡ‹ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅ΠΌ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρƒ. Для ΠΌΡ‹ΡˆΠΊΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ сообщСний β€” поэтому, ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° вСдСтся Π² ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ΅ WM_MOUSEMOVE, кстати, Ρ‚Π°ΠΌ ΠΆΠ΅ ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Ρ€ΠΈΡΠΎΠ²Π°Ρ‚ΡŒ курсор (Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ рисованиС курсора пСрСнСсти Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Ρ€Π΅Π½Π΄Π΅Ρ€ΠΈΠ½Π³Π° β€” масса ΠΎΡ‰ΡƒΡ‰Π΅Π½ΠΈΠΉ Π² ΠΎΠΊΠΎΠ½Π½ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅.).

Если какая-Ρ‚ΠΎ рСализация Π²Π°ΠΌ Π½Π΅ понятна β€” ΠΎΡ‚ΠΏΡ€Π°Π²ΡŒΡ‚Π΅ ΠΌΠ½Π΅ письмо: Ссли Ρ‚Π°ΠΊΠΈΡ… "нСпонятностСй" набСрСтся ΠΌΠ½ΠΎΠ³ΠΎ, Ρ‚ΠΎ я посвящу ΠΈΠΌ Π΅Ρ‰Π΅ ΠΎΠ΄Π½Ρƒ ΡΡ‚Π°Ρ‚ΡŒΡŽ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Ρ€Π°ΡΡΠΌΠΎΡ‚Ρ€ΡŽ каркас Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ, начиная ΠΎΡ‚ назначСния ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ заканчивая обоснованиСм использованного Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ. Но ΠΌΠ½Π΅ ΠΏΠΎΡ‡Π΅ΠΌΡƒ-Ρ‚ΠΎ каТСтся, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΌ всС понятно (ΠΈΠ»ΠΈ я Π½Π΅ ΠΏΡ€Π°Π²? :) ).

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ ΡΡ‚Π°Ρ‚ΡŒΡ Π±ΡƒΠ΄Π΅Ρ‚ посвящСна созданию Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… стадий Ρ€Π΅Π½Π΄Π΅Ρ€ΠΈΠ½Π³Π° (Π² Π½Π΅ΠΉ ΠΌΡ‹ сдСлаСм Π³Π»Π°Π²Π½ΠΎΠ΅ мСню). ΠŸΠΎΠΌΠ΅ΡΡ‚ΠΈΠΌ насколько экранных ΠΊΠ½ΠΎΠΏΠΎΠΊ Π½Π° экран Π² Π³Π»Π°Π²Π½ΠΎΠΌ Ρ†ΠΈΠΊΠ»Π΅ Ρ€Π΅Π½Π΄Π΅Ρ€ΠΈΠ½Π³Π°. И сдСлаСм Π»Π°Π½Π΄ΡˆΠ°Ρ„Ρ‚ (self-shadowing height-map based textured landscape with colored light map :) ). ΠŸΠΎΠΏΡ€ΠΎΠ±ΡƒΠ΅ΠΌ Π΅Π³ΠΎ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ.

А сСйчас ΠΎ FeedBack'Π΅: МнС ΠΎΡ‡Π΅Π½ΡŒ интСрСсно, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Π΄ΡƒΠΌΠ°Π΅Ρ‚Π΅ ΠΎΠ±ΠΎ ΠΌΠ½Π΅ ΠΈ ΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ Π² Ρ†Π΅Π»ΠΎΠΌ, поэтому ΠΌΠ½Π΅ Π±Ρ‹ Ρ…ΠΎΡ‚Π΅Π»ΠΎΡΡŒ ΠΎΡ‚ всСх вас ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ письмо ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ содСрТания (это ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅): ΠΌΠΎΠΉ Π»ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΡƒΡ€Π½Ρ‹ΠΉ Ρ‚Π°Π»Π°Π½Ρ‚ (катСгория L, 0-10, 0 β€” Π° ΠΌΠΎΠΆΠ΅Ρ‚ Ρ‚Π΅Π±Π΅ Ρ‡Π΅ΠΌ Π΄Ρ€ΡƒΠ³ΠΈΠΌ Π·Π°Π½ΡΡ‚ΡŒΡΡ, 10 β€” Π½Π΅ΠΏΠ»ΠΎΡ…ΠΎ), ΠΌΠΎΠ΅ искусство программирования (катСгория P, 0-10, 0 β€” Π·Π° Ρ‚Π°ΠΊΠΎΠΉ ΠΊΠΎΠ΄ΠΈΠ½Π³ Π² коляскС ΡƒΠ±ΠΈΠ²Π°Ρ‚ΡŒ Π½Π°Π΄ΠΎ, 10 β€” Π½Π΅ΠΏΠ»ΠΎΡ…ΠΎ ), Π·Π°ΠΈΠ½Ρ‚Π΅Ρ€Π΅ΡΠΎΠ²Π°Π½Π½ΠΎΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠΌ (катСгория I, 0-10, 0 β€” Π΄Π° я это Π΄Π°ΠΆΠ΅ Π½Π΅ Ρ‡ΠΈΡ‚Π°Π», 10 β€” ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π±ΡƒΠ΄Ρƒ ΡΠ»Π΅Π΄ΠΈΡ‚ΡŒ Π·Π° Ρ€Π°Π·Π²ΠΈΡ‚ΠΈΠ΅ΠΌ, ΠΎΡ‡Π΅Π½ΡŒ интСрСсно). Π’Π°Ρˆ Возраст, ΠΎΠΏΡ‹Ρ‚ программирования Π½Π° C/C++, ΠΎΠΏΡ‹Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π³Ρ€Π°Ρ„ΠΈΠΊΠΎΠΉ, ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° (DX/OGL/Π”Ρ€ΡƒΠ³ΠΎΠ΅).

Автор: ΠšΠΎΠ½ΡΡ‚Π°Π½Ρ‚ΠΈΠ½ "DreaDdog" Поздняков

#4: Π›Π°Π½Π΄ΡˆΠ°Ρ„Ρ‚ ΠΈ интСрфСйс

Автор: ΠšΠΎΠ½ΡΡ‚Π°Π½Ρ‚ΠΈΠ½ "DreadDog" Поздняков

Как ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ вступлСния: (ΠΎ Ρ€Π΅Π°ΠΊΡ†ΠΈΠΈ Ρ‡ΠΈΡ‚Π°Ρ‚Π΅Π»Π΅ΠΉ).

НСмного ΠΏΠΎ измСнСниям Π² исходниках.

Π‘Ρ‹Π»ΠΈ исправлСны ΠΊΡƒΡ‡Π° ошибок ΠΈ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π°Ρ‡Π°Π»ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ устойчивСй. ΠŸΡ€Π΅Π΄Π²ΠΈΠ΄Ρ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ с инициализация "ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ³ΠΎ" графичСского прилоТСния, я создал ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρƒ, которая позволяСт Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ графичСский Ρ€Π΅ΠΆΠΈΠΌ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΈΠ· списка доступных для Π΄Π°Π½Π½ΠΎΠΉ Π²ΠΈΠ΄Π΅ΠΎΠΊΠ°Ρ€Ρ‚Ρ‹ ΠΈ Π² Π½Π΅ΠΌ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ прилоТСния. Π’Π°ΠΌ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°ΠΊ Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ (Π½Ρƒ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈ Π½Π΅ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ, Π½ΠΎ Π²Ρ€ΠΎΠ΄Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚), ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ доступныС Ρ€Π΅ΠΆΠΈΠΌΡ‹ Π½Π° ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ Π²ΠΈΠ΄Π΅ΠΎΠΊΠ°Ρ€Ρ‚Π΅. НС Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹ Π² ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Π΅, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ограничСния самого прилоТСния, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π² Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Ρ… каркаса "Validate" устройства Π½Π΅ происходит, Π½ΠΎ ΠΎΠ±Π° прилоТСния Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Ρ€Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒΡΡ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎ. Π‘Ρ‹Π»ΠΈ исправлСны ошибки, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ Warning's ΠΏΡ€ΠΈ компиляции, излишнСС использованиС Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ MFC, ΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π»ΠΈΡˆΠ½ΠΈΡ… Header'ΠΎΠ² (Π² частности, DX) Π²ΠΎ Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ классы. Π‘Ρ‹Π» Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ Ρ„Π°ΠΉΠ» common.cpp, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠ΅Ρ€Π΅ΠΊΠΎΡ‡Π΅Π²Π°Π»ΠΈ всС графичСскиС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΠ· stdafx.cpp. Благодаря АртСму ΠšΠΈΡ€ΠΈΠ»Π»ΠΎΠ²ΡΠΊΠΎΠΌΡƒ, я исправил ΠΌΠ΅Π»ΠΊΠΈΠ΅ ошибки, ΠΏΠΎΡ€Ρ‚ΠΈΠ²ΡˆΠΈΠ΅ Π²ΠΏΠ΅Ρ‡Π°Ρ‚Π»Π΅Π½ΠΈΠ΅ ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅. ΠšΡΡ‚Π°Ρ‚ΠΈ, Π² этой вСрсии Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰ΠΈΠΉΡΡ ΠΊΡƒΠ±ΠΈΠΊ Π±Ρ‹Π» ΡƒΠ±Ρ€Π°Π½, поэтому Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΡ‹ Π½Π°Ρ‡ΠΈΠ½Π°Π΅ΠΌ Ρ€Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ чисто графичСскоС, Π½ΠΎ ΠΏΠΎΠ»Π½ΠΎΡ†Π΅Π½Π½ΠΎΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. На ΠΊΠ½ΠΎΠΏΠΊΡƒ <H> Π±Ρ‹Π»Π° повСшСна справка ΠΏΠΎ ΠΊΠ½ΠΎΠΏΠΊΠ°ΠΌ, ΠΏΡ€Π°Π²Π΄Π° ΠΎΠ½Π° доступна Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² сцСнС ΠΈ Π² Π³Π»Π°Π²Π½ΠΎΠΌ мСню Π΅Π΅ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ нСльзя. Π’ класс Font Π±Ρ‹Π»ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Ρ‹ Π΄Π²Π° массива, содСрТащиС Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ символа ΡˆΡ€ΠΈΡ„Ρ‚Π°, Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΡƒΡŽ Ρ€Π°Π±ΠΎΡ‚Ρƒ класса Edit (ΠΎ Π½Π΅ΠΌ Ρ‡ΡƒΡ‚ΡŒ ΠΏΠΎΠ·Π΄Π½Π΅Π΅). Π’ каркас Π±Ρ‹Π»ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ для измСнСния Π³Π°ΠΌΠΌΡ‹ (gamma), контрастности (contrast) ΠΈ яркости (brightness), Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ для создания ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠΉ тСкстуры ΠΈ тСкстуры ΠΊΠ°ΠΊ повСрхности для Ρ€Π΅Π½Π΄Π΅Ρ€ΠΈΠ½Π³Π° (Render Target). ΠŸΠ΅Ρ€Π΅Π³Ρ€ΡƒΠΆΠ΅Π½Π° функция для Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ тСкстуры (мСстонахоТдСниС тСкстуры Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊΠ°ΠΊ TCHAR*, Π½ΠΎ ΠΈ ΠΊΠ°ΠΊ CString, ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ для удобства). Π”ΠΎΠ±Π°Π²Π»Π΅Π½Π° функция для записи ΡΠΊΡ€ΠΈΠ½ΡˆΠΎΡ‚Π° (ΠΏΠΎΠΊΠ° Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ Windows Bitmap, Π½ΠΎ это вСдь Π½Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°, ΠΏΡ€Π°Π²Π΄Π°?). Она повСшСна Π½Π° ΠΊΠ»Π°Π²ΠΈΡˆΡƒ Print Screen (Ρ‡Π΅Ρ€Π΅Π· DINPUT). И послСднСС, Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Ρ‹ Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, ΠΎΡ‚Π²Π΅Ρ‡Π°ΡŽΡ‰ΠΈΠ΅ Π·Π° состояниС клавиш <SHIFT> ΠΈ <CAPS LOCK> (ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ, ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ способ: