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

Окна ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π² срСдС Windows

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

ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ слоТности Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‚ ΠΏΡ€ΠΈ использовании ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½Ρ‹Ρ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Win32 API — Ρ‚Π°ΠΌ принято, Ρ‡Ρ‚ΠΎ сообщСния, Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½Π½Ρ‹Π΅ ΠΎΠΊΠ½Ρƒ, ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ΡΡ Ρ‚Π΅ΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ это ΠΎΠΊΠ½ΠΎ создал. Π­Ρ‚ΠΎ сущСствСнно услоТняСт процСсс ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ (Π½Π΅ ΠΏΠΎΡΡ‹Π»ΠΊΠΈ) сообщСний ΠΎΠΊΠ½Ρƒ, созданному Π΄Ρ€ΡƒΠ³ΠΈΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠΌ — ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‰ΠΈΠΉ сообщСниС ΠΏΠΎΡ‚ΠΎΠΊ ΠΏΠΎΠΌΠ΅Ρ‰Π°Π΅Ρ‚ это сообщСниС Π² ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‰Π΅Π³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ° с Ρ„Π»Π°Π³ΠΎΠΌ `ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½ΠΎΠ΅… Π§ΠΈΡ‚Π°Ρ‚ΡŒ Π΅Ρ‰Ρ‘ >

Окна ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π² срСдС Windows (Ρ€Π΅Ρ„Π΅Ρ€Π°Ρ‚, курсовая, Π΄ΠΈΠΏΠ»ΠΎΠΌ, ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Π°Ρ)

ΠžΡΠ½ΠΎΠ²Ρ‹ ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ прилоТСния Π² ΡΡ€Π΅Π΄Π΅ Windows

Π˜Ρ‚Π°ΠΊ, ΠΌΡ‹ Ρ€Π°ΡΡΠΌΠΎΡ‚Ρ€ΠΈΠΌ основы ΠΎΡ€Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ прилоТСния Π² ΡΡ€Π΅Π΄Π΅ Windows ΠΈ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΠΌ нСсколько нюансов:

ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π² ΡΡ€Π΅Π΄Π΅ Windows, ΠΊΠ°ΠΊ ΠΈ Π² ΡΡ€Π΅Π΄Π΅ DOS, содСрТит Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡƒΡŽ «Π³Π»Π°Π²Π½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ» (WinMain), Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌΡƒΡŽ ΠΏΡ€ΠΈ запускС прилоТСния. ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ практичСски ΠΏΡ€ΠΈ ΠΎΠΊΠΎΠ½Ρ‡Π°Π½ΠΈΠΈ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ WinMain.

ΠžΠ±Ρ‹Ρ‡Π½ΠΎ, хотя это ΠΈ Π½Π΅ ΠΎΠ±ΡΠ·ΡΡ‚Π΅Π»ΡŒΠ½ΠΎ, функция WinMain Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ схСму:

1) Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌΡ‹Π΅ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Π΅ дСйствия

2) создаСтся Π³Π»Π°Π²Π½ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ прилоТСния, для Ρ‡Π΅Π³ΠΎ часто рСгистрируСтся Π½ΠΎΠ²Ρ‹ΠΉ класс ΠΎΠΊΠΎΠ½ (оконная функция);

3) организуСтся Ρ†ΠΈΠΊΠ» ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ сообщСний прилоТСния. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ Ρ†ΠΈΠΊΠ» Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ ΠΏΡ€ΠΈ Π·Π°ΠΊΡ€Ρ‹Ρ‚ΠΈΠΈ Π³Π»Π°Π²Π½ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π° прилоТСния (Π½Π΅ Π²ΡΠ΅Π³Π΄Π°)

4) послС Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ Ρ†ΠΈΠΊΠ»Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ сообщСний выполняСтся «Π΄Π΅ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡ» Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ занятых рСсурсов, послС Ρ‡Π΅Π³ΠΎ функция WinMain () закнчиваСтся.

НСсколько Π·Π°ΠΌΠ΅Ρ‡Π°Π½ΠΈΠΉ:

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

Π—Π°ΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅ 2. Π’ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… случаях ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠ±ΠΎΠΉΡ‚ΠΈΡΡŒ Π±Π΅Π· рСгистрации класса ΠΎΠΊΠΎΠ½ ΠΈ ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ†ΠΈΠΊΠ»Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ сообщСний, примСняя Π² ΠΊΠ°Ρ‡Π΅ΡΡ‚Π²Π΅ Π³Π»Π°Π²Π½ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π° ΠΌΠΎΠ΄Π°Π»ΡŒΠ½Ρ‹ΠΉ Π΄ΠΈΠ°Π»ΠΎΠ³.

Π—Π°ΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅ 3. Π’ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π²Ρ‹Π·ΠΎΠ²Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ WinMain () Π΅ΠΉ, Ρ‡Π΅Ρ€Π΅Π· Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹, пСрСдаСтся нСсколько ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ², Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ…Π΅Π½Π΄Π» ΠΊΠΎΠΏΠΈΠΈ прилоТСния (hInstance). Π”ΠΎ Π²Ρ‹Π·ΠΎΠ²Π° WinMain () ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ «Π½Π΅ Π·Π½Π°Π΅Ρ‚» этих Π΄Π°Π½Π½Ρ‹Ρ…. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΌΠΎΠ³ΡƒΡ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Ρ‚ΡŒ слоТности с ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ статичСских конструкторов ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚Ρ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… языков (C++).

Π­Ρ‚Π° ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΡŒ, Π²ΠΎΠΎΠ±Ρ‰Π΅ говоря ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ нССстСствСнна. Π”Π΅Π»ΠΎ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ функция WinMain () вызываСтся Π½Π΅ Π½Π΅ΠΏΠΎΡΡ€Π΅Π΄ΡΡ‚Π²Π΅Π½Π½ΠΎ срСдой Windows, Π° ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹ΠΌ startup-ΠΊΠΎΠ΄ΠΎΠΌ, ΡΠ²Π»ΡΡŽΡ‰ΠΈΠΌΡΡ Ρ‡Π°ΡΡ‚ΡŒΡŽ run-time Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ (ΠΊΠ°ΠΊ ΠΈ Π² DOS-прилоТСниях). Π­Ρ‚ΠΎΡ‚ ΠΊΠΎΠ΄ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ стандартныС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, ΠΊΡƒΡ‡Ρƒ, стСк, обнуляСт Π½Π΅ΠΈΠ½ΠΈΡ†ΠΈΠ°ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ статичСскиС Π΄Π°Π½Π½Ρ‹Π΅ ΠΈ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ конструкторы статичСских ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π΄ΠΎ Π²Ρ‹Π·ΠΎΠ²Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ WinMain ().

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

Π—Π°ΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅ 4. Π¦ΠΈΠΊΠ» ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ сообщСний, Π² Ρ‚ΠΎΠΌ Π²ΠΈΠ΄Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΠΎΠ²Π°Π½ руководствами, Π½Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΠ΅Ρ‚ Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΠΊΠΎΠ½ Ρƒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ. Для Π΅Π³ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ сообщСниС WM_QUIT, ΠΈΠ·Π²Π»Π΅Ρ‡Π΅Π½ΠΈΠ΅ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΈΠ· ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡŽ Ρ†ΠΈΠΊΠ»Π°.

ΠŸΡ€ΠΈ этом трСбуСтся, Ρ‡Ρ‚ΠΎ Π±Ρ‹ сообщСниС WM_QUIT ΠΏΠΎΡΡ‹Π»Π°Π»ΠΎΡΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ PostMessage (), PostAppMessage () ΠΈΠ»ΠΈ PostQuitMessage () (Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚ΠΎΠ³Π΄Π° ΠΎΠ½ΠΎ ΠΏΠΎΠΏΠ°Π΄Π°Π΅Ρ‚ Π² ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ прилоТСния). ΠžΠ±Ρ‹Ρ‡Π½ΠΎ это сообщСниС посылаСтся ΠΏΡ€ΠΈ ΡƒΠ½ΠΈΡ‡Ρ‚ΠΎΠΆΠ΅Π½ΠΈΠΈ Π³Π»Π°Π²Π½ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π° прилоТСния (ΠΏΡ€ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ сообщСния WM_DESTROY Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½Π½ΠΎΠ³ΠΎ этому ΠΎΠΊΠ½Ρƒ). Π’ Π±ΠΎΠ»Π΅Π΅ ΠΎΠ±Ρ‰Π΅ΠΌ случаС подразумСваСтся послСднСС ΠΎΠΊΠ½ΠΎ прилоТСния.

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

while (IsWindow (hMainWnd)) {

if (!GetMessage (&msg, NULL, NULL, NULL)) break;

TranslateMessage (&msg);

DispatchMessage (&msg);

}

Если Ρ†ΠΈΠΊΠ» ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ сообщСний Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€Π΅Ρ€Π²Π°Π½ ΠΏΡ€ΠΈ ΡƒΠ½ΠΈΡ‡Ρ‚ΠΎΠΆΠ΅Π½ΠΈΠΈ послСднСго ΠΎΠΊΠ½Π° прилоТСния, Ρ‚ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ останСтся Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹ΠΌ, Π° Ρƒ Π’ас ΡƒΠΆΠ΅ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ срСдств для Π΅Π³ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ, ΠΊΡ€ΠΎΠΌΠ΅ Π²Ρ‹Ρ…ΠΎΠ΄Π° ΠΈΠ· Windows. ΠŸΡ€ΠΈ этом Π’Π°ΡˆΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ исчСзнСт ΠΈΠ· ΡΠΏΠΈΡΠΊΠ° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Task Manager (этот список, Π²ΠΎΠΎΠ±Ρ‰Π΅ говоря, содСрТит Π½Π΅ Π·Π°Π΄Π°Ρ‡ΠΈ, Π° Π³Π»Π°Π²Π½Ρ‹Π΅ ΠΎΠΊΠ½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ).

Π—Π°ΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅ 5. Windows Π½Π΅ ΡΠ²Π»ΡΠ΅Ρ‚ся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΉ срСдой. Π₯отя ΠΎΠΊΠ½ΠΎ ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π½Π°Π·Π²Π°Π½ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ ООП, Π½ΠΎ Π»ΠΈΡˆΡŒ с Π΄ΠΎΡΡ‚Π°Ρ‚ΠΎΡ‡Π½ΠΎΠΉ натяТкой. Π‘Π°ΠΌΠΎΠ΅ сущСствСнноС ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΠΊΠ½Π° Π² Windows ΠΎΡ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ООП Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ сообщСниС, ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅ΠΌΠΎΠ΅ ΠΎΠΊΠΎΠ½Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ, Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ… случаях Π½Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΠ΅Ρ‚ дСйствий, Π° ΡΠ²Π»ΡΠ΅Ρ‚ся «ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠ²Π½Ρ‹ΠΌ», указывая Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π½Π°Π΄ ΠΎΠΊΠ½ΠΎΠΌ выполняСтся Ρ‚Π° ΠΈΠ»ΠΈ иная опСрация ΠΊΠ°ΠΊΠΈΠΎΠΉ-Π»ΠΈΠ±ΠΎ внСшнСй Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ.

Поясним это Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ создания ΠΎΠΊΠ½Π°. Π’ ΡΠ»ΡƒΡ‡Π°Π΅ «Ρ‡ΠΈΡΡ‚ΠΎΠ³ΠΎ» ООП для создания ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ сообщСниС «create», ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ Π΅Π³ΠΎ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ. Π’ Windows сообщСниС WM_CREATE Π½Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΠ΅Ρ‚ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΏΠΎ ΡΠΎΠ·Π΄Π°Π½ΠΈΡŽ ΠΎΠΊΠ½Π°. Оно Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΠ΅Ρ‚ ΠΎΠΊΠ½ΠΎ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π² ΡΡ‚ΠΎ врСмя ΠΎΠΊΠ½ΠΎ создаСтся срСдствами ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ посрСдством Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ CreateWindowEx (). Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²ΠΎΠΎΠ±Ρ‰Π΅ ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ это сообщСниС, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ любой Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚, Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΈΠ»ΠΈ Π½Π΅ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ — ΠΎΠΊΠ½ΠΎ всС Ρ€Π°Π²Π½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ создано.

Если Π±Ρ‹ всС сообщСния, ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌΡ‹Π΅ ΠΎΠΊΠ½ΠΎΠΌ Π±Ρ‹Π»ΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΎΠ½Π½Ρ‹ΠΌΠΈ, Ρ‚ΠΎ ΠΊ ΡΡ‚ΠΎΠΌΡƒ Π»Π΅Π³ΠΊΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π±Ρ‹ ΠΏΡ€ΠΈΡΠΏΠΎΡΠΎΠ±ΠΈΡ‚ΡŒΡΡ. Однако для Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… сообщСний Π΄ΠΎΠ»ΠΆΠ½Π° Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, Ссли Π’Ρ‹ Π΅Π΅ Π½Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠ»ΠΈ сами, Π° Π΄Π»Ρ Π΄Ρ€ΡƒΠ³ΠΈΡ… такая ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π΄ΠΎΠ»ΠΆΠ½Π° Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, Π΄Π°ΠΆΠ΅ Ссли Π’Ρ‹ ΡƒΠΆΠ΅ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π»ΠΈ это сообщСниС. ВсС это Π·Π°ΠΌΠ΅Ρ‚Π½ΠΎ услоТняСт написаниС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π² ΡΡ€Π΅Π΄Π΅ Windows.

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

Для ΠΎΠΊΠΎΠ½, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΡ… Π² ΠΊΠ°Ρ‡Π΅ΡΡ‚Π²Π΅ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ сообщСний ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π½Π΅ DefWindowProc (), Π° ΠΈΠ½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, DefMDIChildProc ()), ΠΌΠΎΠΆΠ½ΠΎ ΡƒΡ‚ΠΎΡ‡Π½ΠΈΡ‚ΡŒ список сообщСний ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΠΎΠ΄Π»Π΅ΠΆΠ°Ρ‰ΠΈΡ… ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ. Однако это ΡƒΡ‚ΠΎΡ‡Π½Π΅Π½ΠΈΠ΅ касаСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚Π΅Ρ… сообщСний, ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… для DefWindowProc () ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, Π° Π΄Π»Ρ ΠΈΠ½Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ нСльзя, список ΠΆΠ΅ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ для DefWindowProc (), Π° Ρ‡Ρ‚ΠΎ нСльзя остаСтся нСизвСстным.

Π—Π°ΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅ 6. Π’ Windows сущСствуСт опрСдСлСнная ΠΏΡƒΡ‚Π°Π½ΠΈΡ†Π° Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΎΠ². ΠŸΠΎΠΏΡ€ΠΎΠ±ΡƒΠ΅ΠΌ Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ с Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ ΠΈΠ· Π½ΠΈΡ…. Как извСстно, ΠΎΠΊΠ½ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Π² Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… состояниях:

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

Для максимизации ΠΎΠΊΠ½Π° ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ ShowWindow со ΡΠ»Π΅Π΄ΡƒΡ‰ΠΈΠΌΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ΠΌΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ:

ShowWindow (hWnd, SHOW_FULLSCREEN);

ShowWindow (hWnd, SW_SHOWMAXIMIZED);

ShowWindow (hWnd, SW_MAXIMIZE);

максимизированоС ΠΎΠΊΠ½ΠΎ всСгда Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎ ΠΈ ΠΈΠΌΠ΅Π΅Ρ‚ фокус Π²Π²ΠΎΠ΄Π°. Когда ΠΊΠ°ΠΊΠΎΠ΅-Π»ΠΈΠ±ΠΎ ΠΎΠΊΠ½ΠΎ максимизируСтся, всС ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ Π²Π΅Ρ€Ρ…Π½ΠΈΠ΅ ΠΎΠΊΠ½Π° ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‚ сообщСниС WM_SIZE, ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΡŽΡ‰Π΅Π΅ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ «Π·Π°ΠΊΡ€Ρ‹Ρ‚Ρ‹» максимизированным ΠΎΠΊΠ½ΠΎΠΌ.

ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡƒΠ·Π½Π°Ρ‚ΡŒ, являСтся Π»ΠΈ нашС ΠΎΠΊΠ½ΠΎ максимизированным с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

BOOL IsZoomed (hWnd);

ΠŸΡ€ΠΈ использовании систСмного мСню ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ максимизации ΠΎΠΊΠ½Π° соотвСтствуСт ΠΏΡƒΠ½ΠΊΡ‚ Maximize, Π²Ρ‹Π±ΠΎΡ€ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΏΠΎΡ€ΠΎΠΆΠ΄Π°Π΅Ρ‚ ΡΠΈΡΡ‚Π΅ΠΌΠ½ΡƒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ SC_MAXIMIZE (ΠΈΠ»ΠΈ синоним SC_ZOOM). (см. ΡΠΎΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ WM_SYSCOMMAND)

Π—Π΄Π΅ΡΡŒ вмСсто Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π° maximize ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ zoom.

ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ прСдставлСнным Π² Π²ΠΈΠ΄Π΅ ΠΈΠΊΠΎΠ½ΠΊΠΈ. Для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ ΠΏΡ€Π΅Π²Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ ΠΎΠΊΠ½ΠΎ Π² ΠΈΠΊΠΎΠ½ΠΊΡƒ ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· ΡΠΏΠΎΡΠΎΠ±ΠΎΠ²:

ShowWindow (hWnd, SHOW_ICONWINDOW);

ShowWindow (hWnd, SW_SHOWMINIMIZED);

ShowWindow (hWnd, SW_SHOWMINNOACTIVE);

ShowWindow (hWnd, SW_MINIMIZE);

CloseWindow (hWnd);

Π Π°Π·Π½Ρ‹Π΅ способы, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΠ΅ ShowWindow, ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌΠΈ Π°ΠΊΡ‚ΠΈΠ²Π°Ρ†ΠΈΠΈ ΠΎΠΊΠ½Π°. SW_SHOWMINIMIZED ΠΈ SHOW_ICONWINDOW ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅Ρ‚ ΠΎΠΊΠ½ΠΎ Π² Π²ΠΈΠ΄Π΅ ΠΈΠΊΠΎΠ½ΠΊΠΈ, дСлая Π΅Π³ΠΎ Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹ΠΌ; SW_SHOWMINNOACTIVE Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅Ρ‚ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π°; SW_MINIMIZE (ΠΊΠ°ΠΊ ΠΈ Ρ„ункция CloseWindow ()) Π΄Π΅Π»Π°Π΅Ρ‚ Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹ΠΌ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ ΠΎΠΊΠ½ΠΎ Π² ΡΠΏΠΈΡΠΊΠ΅ Windows. ПослСдний способ эффСктивСн ΠΏΡ€ΠΈ ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ Π³Π»Π°Π²Π½ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π° прилоТСния — Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ Π³Π»Π°Π²Π½ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Ρƒ активности Π΄Ρ€ΡƒΠ³ΠΎΠΌΡƒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡŽ.

ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ состояниС ΠΎΠΊΠ½Π° ΠΌΠΎΠΆΠ½ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

BOOL IsIconic (hWnd);

ΠŸΡ€ΠΈ использовании систСмного мСню ΠΏΡ€Π΅Π²Ρ€Π°Ρ‰Π΅Π½ΠΈΡŽ ΠΎΠΊΠ½Π° Π² ΠΈΠΊΠΎΠ½ΠΊΡƒ соотвСтствуСт ΠΏΡƒΠ½ΠΊΡ‚ `Minimize', ΠΏΠΎΡ€ΠΎΠΆΠ΄Π°ΡŽΡ‰ΠΈΠΉ ΡΠΈΡΡ‚Π΅ΠΌΠ½ΡƒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ SC_MINIMIZE (ΠΈΠ»ΠΈ синоним SC_ICON). (см. ΡΠΎΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ WM_SYSCOMMAND)

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

Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌ, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΌΡ‹ Π²ΠΈΠ΄ΠΈΠΌ (ΠΈΠ»ΠΈ ΠΌΠΎΠΆΠ΅ΠΌ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ) Π΅Π³ΠΎ Ρ€Π°ΠΌΠΊΡƒ, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Ρ‚ΡŒ ΠΎΠΊΠ½ΠΎ ΠΏΠΎ ΡΠΊΡ€Π°Π½Ρƒ. Когда ΠΎΠΊΠ½ΠΎ находится Π² Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎΠΌ состоянии, Ρ‚ΠΎ Π΄Π»Ρ Π½Π΅Π³ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ максимально ΠΈ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½ΠΎ допустимый Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹. Π­Ρ‚ΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ нСльзя ΠΏΡƒΡ‚Π°Ρ‚ΡŒ с ΠΌΠ°ΠΊΡΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ ΠΈ ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ состояниями. ΠœΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π° ΠΌΠΎΠΆΠ΅Ρ‚ Π΄Π°ΠΆΠ΅ ΠΏΡ€Π΅Π²Ρ‹ΡˆΠ°Ρ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΎΠΊΠ½Π° Π² ΠΌΠ°ΠΊΡΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΌ состоянии, ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ это ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Ρ‚Π°ΠΊΠΎΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€, ΠΏΡ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΎΠΊΠ½ΠΎ Π΅Ρ‰Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ прСдставлСно Π² Π²ΠΈΠ΄Π΅ ΠΎΠΊΠ½Π°.

Для ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π° ΠΈΠ· ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½ΠΎΠ³ΠΎ состояния ΠΊ Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎΠΌΡƒ ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ OpenIcon (hWnd); ΠΈΠ»ΠΈ, ΠΊΠ°ΠΊ ΠΈΠ· ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½ΠΎΠ³ΠΎ, Ρ‚Π°ΠΊ ΠΈ ΠΈΠ· ΠΌΠ°ΠΊΡΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½ΠΎΠ³ΠΎ состояния ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ ShowWindow () с ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ:

ShowWindow (hWnd, SHOW_OPENWINDOW);

ShowWindow (hWnd, SW_SHOWNORMAL);

ShowWindow (hWnd, SW_RESTORE);

ShowWindow (hWnd, SW_SHOWNOACTIVATE);

Π’ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ (SDK Help) ΡƒΠΊΠ°Π·Π°Π½ΠΎ, Ρ‡Ρ‚ΠΎ SW_RESTORE ΠΈ SW_SHOWNORMAL эквивалСнтны, Π½ΠΎ ΡΡ‚ΠΎ Π΄Π°Π»Π΅ΠΊΠΎ Π½Π΅ Ρ‚Π°ΠΊ — SW_RESTORE восстанавливаСт ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅Π΅ состояниС, Π° Π½Π΅ Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎΠ΅. Π’ΠΎ Π΅ΡΡ‚ΡŒ, Ссли Π’Ρ‹ ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π»ΠΈ ΠΎΠΊΠ½ΠΎ ΠΈΠ· ΠΌΠ°ΠΊΡΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ, Ρ‚ΠΎ SW_RESTORE Π²Π΅Ρ€Π½Π΅Ρ‚ Вас ΠΊ ΠΌΠ°ΠΊΡΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΌΡƒ ΠΎΠΊΠ½Ρƒ, Π° SW_SHOWNORMAL — ΠΊ Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎΠΌΡƒ. SW_SHOWNORMAL ΠΈΠΌΠ΅Π΅Ρ‚ синоним SHOW_OPENWINDOW.

Если ΠΎΠΊΠ½ΠΎ восстанавливаСтся ΠΈΠ»ΠΈ максимизируСтся ΠΈΠ· ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ состояния, Ρ‚ΠΎ Π’Π°ΡˆΠ΅ ΠΎΠΊΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ сообщСниС WM_QUERYOPEN — обрабатывая ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΡ‚ΡŒ ΠΈΠ»ΠΈ Π·Π°ΠΏΡ€Π΅Ρ‚ΠΈΡ‚ΡŒ дальнСйшиС дСйствия. Если Π’Ρ‹ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚Π΅ TRUE, Ρ‚ΠΎ ΠΎΠΊΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ раскрыто, Π° Π΅ΡΠ»ΠΈ Π’Ρ‹ Π²Π΅Ρ€Π½Π΅Ρ‚Π΅ FALSE, Ρ‚ΠΎ ΠΎΠΊΠ½ΠΎ останСтся ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ.

Π—Π°ΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅ 7. Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π½Π°Π΄ΠΎ Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ с Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΠΌΠΈ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°ΠΌΠΈ Windows, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ постоянно ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ, Π½ΠΎ Π½ΠΈΠΊΠ°ΠΊ Π² Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ Π½Π΅ ΠΎΠΏΠΈΡΠ°Π½Ρ‹. Π Π΅Ρ‡ΡŒ ΠΈΠ΄Π΅Ρ‚ ΠΎ Ρ…Π΅Π½Π΄Π»Π°Ρ… ΠΊΠΎΠΏΠΈΠΈ прилоТСния (HINSTANCE), модуля (HMODULE) ΠΈ Π·Π°Π΄Π°Ρ‡ΠΈ (HTASK). ВсС эти Ρ…Π΅Π½Π΄Π»Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ функциями, ΠΏΡ€ΠΈΡ‡Π΅ΠΌ Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ Π½ΠΈΠΌΠΈ Π½ΠΈΠΊΠ°ΠΊ Π½Π΅ ΠΏΠΎΡΡΠ½ΡΠ΅Ρ‚ся. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π½Π°ΠΌ Π½Π°Π΄ΠΎ Ρ€Π°ΡΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ эти Ρ…Π΅Π½Π΄Π»Ρ‹ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ:

HTASK описываСт Π·Π°Π΄Π°Ρ‡Ρƒ.

Π’ Windows 3. x ΠΏΠΎΠ΄ Π·Π°Π΄Π°Ρ‡Π΅ΠΉ подразумСваСтся ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΉ Π·Π°ΠΏΡƒΡ‰Π΅Π½Ρ‹ΠΉ процСсс, для ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ командная строка, тСкущая выполняСмая инструкция, ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° ΡΡ‚Π΅ΠΊ, ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ окруТСния, PDB (эквивалСнт прСфикса Π·Π°Π΄Π°Ρ‡ΠΈ (PSP) Π² ΡΡ€Π΅Π΄Π΅ DOS) ΠΈ ΠΏΡ€. Π₯Π΅Π½Π΄Π» Π·Π°Π΄Π°Ρ‡ΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

HTASK GetCurrentTask (void);

Π’ Win32 Ρ…Π΅Π½Π΄Π» Π·Π°Π΄Π°Ρ‡ΠΈ Π½Π΅ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΠ΅Ρ‚ся, Π° Π²ΠΌΠ΅ΡΡ‚ΠΎ Π½Π΅Π³ΠΎ Π½Π°Π΄ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Ρ…Π΅Π½Π΄Π»Π°ΠΌΠΈ ΠΈ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π°ΠΌΠΈ процСсса ΠΈ ΠΏΠΎΡ‚ΠΎΠΊΠ°. Π˜Ρ… ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ:

HANDLE GetCurrentProcess (void);

HANDLE OpenProcess (fdwAccess, fInherit, dwIDProccess);

DWORD GetCurrentProcessId (void);

HANDLE GetCurrentThread (void);

DWORD GetCurrentThreadId (void);

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ GetCurrentProcess ΠΈ GetCurrentThread Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΉ псСвдодСскриптор процСсса (ΠΏΠΎΡ‚ΠΎΠΊΠ°). ΠŸΡΠ΅Π²Π΄ΠΎΠ΄Π΅ΡΠΊΡ€ΠΈΠΏΡ‚ΠΎΡ€ — это нСкоторая Π²Π΅Π»ΠΈΡ‡ΠΈΠ½Π°, рассматриваСмая Π² ΠΊΠ°Ρ‡Π΅ΡΡ‚Π²Π΅ дСскритора Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ процСсса (ΠΏΠΎΡ‚ΠΎΠΊΠ°). Π’ΠΎ Π΅ΡΡ‚ΡŒ эта Π²Π΅Π»ΠΈΡ‡ΠΈΠ½Π°, примСняСмая Π² ΠΊΠΎΠ½Ρ‚СкстС Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ процСсса (ΠΏΠΎΡ‚ΠΎΠΊΠ°), Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ Π΅Π³ΠΎ, Π° Π½Π΅ Π΄Π°Π½Π½Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΊ. Для получСния «Π½Π°ΡΡ‚оящСго» Ρ…Π΅Π½Π΄Π»Π° Π½Π°Π΄ΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ:

BOOL DuplicateHandle (

hSourceProcess, hSourceHandle, hTargetProcess, lphTargetHandle,

fdwAccess, fInherit, fdwOptions

);

HINSTANCE описываСт копию прилоТСния.

Π² Windows 3. x этот Ρ…Π΅Π½Π΄Π» ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° ΡΠ΅Π³ΠΌΠ΅Π½Ρ‚ Π΄Π°Π½Π½Ρ‹Ρ… прилоТСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ содСрТит стСк ΠΈ Π»ΠΎΠΊΠ°Π»ΡŒΠ½ΡƒΡŽ ΠΊΡƒΡ‡Ρƒ. Для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π·Π°ΠΏΡƒΡ‰Π΅Π½Π½ΠΎΠ³ΠΎ прилоТСния создаСтся свой собствСнный сСгмСнт Π΄Π°Π½Π½Ρ‹Ρ…, Ρ‡Ρ‚ΠΎ позволяСт ΠΎΠ΄Π½ΠΎΠ·Π½Π°Ρ‡Π½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΡƒΡŽ копию прилоТСния ΠΏΠΎ Π΅Π³ΠΎ сСгмСнту Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ»ΠΈ ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±ΠΌΠ΅Π½ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ ΠΌΠ΅ΠΆΠ΄Ρƒ двумя копиями ΠΎΠ΄Π½ΠΎΠ³ΠΎ прилоТСния. Π’Π°ΠΊ функция GetInstanceData позволяСт ΡΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅, ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ‰ΠΈΠ΅ сСгмСнту Π΄Π°Π½Π½Ρ‹Ρ… Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΊΠΎΠΏΠΈΠΈ, Π² Ρ‚ΠΎ-ΠΆΠ΅ самоС мСсто Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ ΠΊΠΎΠΏΠΈΠΈ.

int GetInstanceData (hInstance, pByte, cbData);

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

Π’ Win32 для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π·Π°ΠΏΡƒΡ‰Π΅Π½Π½ΠΎΠ³ΠΎ прилоТСния (Ρ‚.Π΅. процСсса) выдСляСтся Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠ΅ адрСсноС пространство Π² 4G Π² Π΅Π΄ΠΈΠ½ΠΎΠΌ сСгмСнтС. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π΄Π°Π½Π½Ρ‹ΠΉ Ρ…Π΅Π½Π΄Π» описываСт Π½Π΅ ΡΠ΅Π³ΠΌΠ΅Π½Ρ‚ Π΄Π°Π½Π½Ρ‹Ρ… (ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ описываСт вСсь 4G сСгмСнт), Π° Π°Π΄Ρ€Π΅Ρ Π² Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΌ пространствС, с ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π±Ρ‹Π» Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½ Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ. Π’ Π°Π΄Ρ€Π΅ΡΠ½ΠΎΠΌ пространствС ΠΎΠ΄Π½ΠΎΠ³ΠΎ процСсса Π½ΠΈΠΊΠ°ΠΊΠΈΡ… Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π½Π΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΠ΅Ρ‚, поэтому этот Ρ…Π΅Π½Π΄Π» Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ для обнаруТСния Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΊΠΎΠΏΠΈΠΉ прилоТСния ΠΈ Ρ‚Π΅ΠΌ Π±ΠΎΠ»Π΅Π΅ для ΠΎΠ±ΠΌΠ΅Π½Π° Π΄Π°Π½Π½Ρ‹ΠΌΠΈ ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ копиями ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. Π’ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΡ… Win32 hPrevInstance всСгда Ρ€Π°Π²Π΅Π½ NULL, Π° Ρ…Π΅Π½Π΄Π» Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ ΠΊΠΎΠΏΠΈΠΈ прилоТСния Π² Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ случаСв совпадаСт. ΠŸΡ€ΠΈ нСобходимости обнаруТСния Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΊΠΎΠΏΠΈΠΉ прилоТСния Π½Π°Π΄ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΠΈΠ΅-Π»ΠΈΠ±ΠΎ ΠΈΠ½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ:

HWND FindWindow (lpszClassName, lpszWindowTitle);

Π₯Π΅Π½Π΄Π» ΠΎΠΊΠ½Π° Π² Win32 являСтся ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌ ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ Π² Π»ΡŽΠ±ΠΎΠΌ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ.

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

#define WM_COPYDATA 0×004A

typedef struct tagCOPYDATASTRUCT {

DWORD dwData;

DWORD cbData;

LPVOID lpData;

} COPYDATASTRUCT, FAR* PCOPYDATASTRUCT;

HMODULE описываСт ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ.

Π’ Windows 3. x ΠΏΠΎΠ΄ ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΌ понимаСтся ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ выполняСмый Ρ„Π°ΠΉΠ» ΠΈΠ»ΠΈ Π±ΠΈΠ±Π»ΠΎΡ‚Π΅ΠΊΠ° динамичСской ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΈ. Для описания модуля создаСтся ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ сСгмСнт описания модуля, содСрТащий ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Π²ΡΠ΅Ρ… сСгмСнтах Π΄Π°Π½Π½ΠΎΠ³ΠΎ модуля ΠΈ ΠΈΡ… Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°Ρ…. Π₯Π΅Π½Π΄Π» модуля ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΠ΅Ρ‚ этот сСгмСнт. Для любого прилоТСния создаСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‰ΠΈΠΉ сСгмСнт, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ раздСляСтся ΠΌΠ΅ΠΆΠ΄Ρƒ всСми копиями этого прилоТСния. Для получСния Ρ…Π΅Π½Π΄Π»Π° модуля Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ функциями:

HMODULE GetModuleHandle (lpszFileName);

int GetModuleFileName (hInstance, lpsBuffer, cbMaxSize);

Π’ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ случаСв, Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Windows API, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΠ΅ с Ρ…Π΅Π½Π΄Π»ΠΎΠΌ модуля, ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ ΠΈΠΌ Ρ…Π΅Π½Π΄Π»Π° ΠΊΠΎΠΏΠΈΠΈ прилоТСния, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ Π² Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ΅Π½ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ€Π°Π·Π½ΠΎΠ±ΠΎΠΉ Π² ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Ρ….

Π’ Win32 Ρ…Π΅Π½Π΄Π» модуля являСтся синонимом Ρ…Π΅Π½Π΄Π»Π° ΠΊΠΎΠΏΠΈΠΈ прилоТСния. Π’ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ Π²ΡΡ‚Ρ€Π΅Ρ‡Π°ΡŽΡ‚ΡΡ ΠΎΠ±Π° Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°, ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ ΠΏΠ΅Ρ€Π΅ΠΊΠΎΡ‡Π΅Π²Π°Π»ΠΈ ΠΈΠ· 16-Ρ‚ΠΈ Π±ΠΈΡ‚ΠΎΠ²Ρ‹Ρ… Windows, хотя ΠΎΠ½ΠΈ тоТдСствСнны.

БообщСния. ΠŸΠΎΡΡ‹Π»ΠΊΠ° ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° сообщСний

Π Π°Π½Π΅Π΅, Π½Π° ΠΏΠ΅Ρ€Π²Ρ‹Ρ… лСкциях, ΠΌΡ‹ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Π»ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ сообщСний, Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΉ «ΠΏΠΎΡΡ‹Π»ΠΊΠΎΠΉ» сообщСний (post). ΠŸΡ€ΠΈ использовании этого ΠΌΠ΅Ρ‚ΠΎΠ΄Π° сообщСниС ставится Π² ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ прилоТСния ΠΈ ΠΏΠΎΠ·ΠΆΠ΅ извлСкаСтся ΠΈΠ· Π½Π΅Π΅. Однако этот ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ Π½Π΅ Π²ΡΠ΅Π³Π΄Π° ΡƒΠ΄ΠΎΠ±Π΅Π½, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π½Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ сообщСния, ΠΈΠ»ΠΈ Π΄ΠΎΠΆΠ΄Π°Ρ‚ΡŒΡΡ Π΅Π³ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ. Π’ΠΎΡ‡Π½Π΅Π΅, позволяСт, Π½ΠΎ ΠΎΡ‡Π΅Π½ΡŒ Π³Ρ€ΠΎΠΌΠΎΠ·Π΄ΠΊΠΈΠΌ способом.

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

ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ слоТности Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‚ ΠΏΡ€ΠΈ использовании ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½Ρ‹Ρ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Win32 API — Ρ‚Π°ΠΌ принято, Ρ‡Ρ‚ΠΎ сообщСния, Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½Π½Ρ‹Π΅ ΠΎΠΊΠ½Ρƒ, ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ΡΡ Ρ‚Π΅ΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ это ΠΎΠΊΠ½ΠΎ создал. Π­Ρ‚ΠΎ сущСствСнно услоТняСт процСсс ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ (Π½Π΅ ΠΏΠΎΡΡ‹Π»ΠΊΠΈ) сообщСний ΠΎΠΊΠ½Ρƒ, созданному Π΄Ρ€ΡƒΠ³ΠΈΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠΌ — ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‰ΠΈΠΉ сообщСниС ΠΏΠΎΡ‚ΠΎΠΊ ΠΏΠΎΠΌΠ΅Ρ‰Π°Π΅Ρ‚ это сообщСниС Π² ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‰Π΅Π³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ° с Ρ„Π»Π°Π³ΠΎΠΌ `ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½ΠΎΠ΅ сообщСниС' ΠΈ ΠΏΡ€ΠΈΠΎΡΡ‚анавливаСтся Π΄ΠΎ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΡ ΠΎΡ‚Π²Π΅Ρ‚Π°. ΠŸΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‰ΠΈΠΉ ΠΏΠΎΡ‚ΠΎΠΊ, Π·Π°ΠΊΠΎΠ½Ρ‡ΠΈΠ² ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ сообщСния, ΠΈΠ·Π²Π»Π΅ΠΊΠ°Π΅Ρ‚ ΠΈΠ· ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ ΠΏΠ΅Ρ€Π²Ρ‹ΠΌΠΈ сообщСния, ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Π½Ρ‹Π΅ ΠΊΠ°ΠΊ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½Ρ‹Π΅, ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π΅Ρ‚ ΠΈΡ… ΠΈ ΠΏΠΎΡΠ»Π΅ этого возобновляСт Ρ€Π°Π±ΠΎΡ‚Ρƒ пославшСго ΠΏΠΎΡ‚ΠΎΠΊΠ°. Однако ΠΏΡ€ΠΈ этом Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ зависаниС ΠΎΠ±Π΅ΠΈΡ… ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ², Ссли ΠΏΠΎΡ‚ΠΎΠΊ, ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‰ΠΈΠΉ сообщСниС, пытаСтся ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰Π΅ΠΌΡƒ ΠΏΠΎΡ‚ΠΎΠΊΡƒ ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠ΅ — Ρ‚ΠΎΡ‚ находится Π² ΠΎΡΡ‚Π°Π½ΠΎΠ²Π»Π΅Π½Π½ΠΎΠΌ состоянии ΠΈ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ подтвСрТдСния, Π° ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‰ΠΈΠΉ Π² ΡΠ²ΠΎΡŽ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ останавливаСтся, ΠΏΠΎΠΊΠ° ΠΏΠΎΠ΄Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠ΅ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½ΠΎ.

Для посылки ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ сообщСний ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ:

BOOL PostMessage (hWnd, wMsg, wPar, lPar);

ΠŸΠΎΡΡ‹Π»Π°Π΅Ρ‚ ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ΅ сообщСниС ΠΎΠΊΠ½Ρƒ (Ρ‡Π΅Ρ€Π΅Π· ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ сообщСний).

LONG SendMessage (hWnd, wMsg, wPar, lPar);

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

BOOL PostAppMessage (hTask, wMsg, wPar, lPar); // Windows 3. x

BOOL PostAppMessage (dwProccessId, wMsg, wPar, lPar); // Win32 API

BOOL PostThreadMessage (dwThreadId, wMsg, wPar, lPar); // Win32 API

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

Π₯Π΅Π½Π΄Π» Π·Π°Π΄Π°Ρ‡ΠΈ hTask Π½Π΅ ΡΠ²Π»ΡΠ΅Ρ‚ся Ρ…Π΅Π½Π΄Π»ΠΎΠΌ ΠΊΠΎΠΏΠΈΠΈ прилоТСния. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ GetCurrentTask для получСния Ρ…Π΅Π½Π΄Π»Π° Π·Π°Π΄Π°Ρ‡ΠΈ Π² ΡΡ€Π΅Π΄Π΅ Windows 3. x, Π° Ρ‚Π°ΠΊΠΆΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ GetCurrentThreadId ΠΈ GetCurrentProcessId Π² Win32 API.

для получСния этого Ρ…Π΅Π½Π΄Π»Π°.

BOOL PostQuitMessage (wPar);

ΠŸΠΎΡΡ‹Π»Π°Π΅Ρ‚ сообщСниС WM_QUIT с Π·Π°Π΄Π°Π½Π½Ρ‹ΠΌ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ wPar Π²Π°ΡˆΠ΅ΠΌΡƒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡŽ. Π‘ΠΎΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ WM_QUIT ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ Π³Π»Π°Π²Π½ΠΎΠ³ΠΎ Ρ†ΠΈΠΊΠ»Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ сообщСний.

Π’ΠΈΠΏΠΈΡ‡Π½Ρ‹Π΅ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ сообщСний, ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌΡ‹Ρ… ΠΎΠΊΠ½ΠΎΠΌ.

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

Π’ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Π΅ΠΌΡ‹Ρ… Π½Π°ΠΌΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡΡ… сообщСний Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ сообщСний Π½Π΅ ΠΏΡ€ΠΎΡ…одят Ρ‡Π΅Ρ€Π΅Π· ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ сообщСний, Π° ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ся нСпосрСдствСнно ΠΎΠΊΠΎΠ½Π½ΠΎΠΉ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π΅ ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ. ИмСнно Π»ΠΎΠ³ΠΈΠΊΠ° выполнСния этой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅Ρ‚ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ получСния сообщСний. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ сообщСния Π² ΡΡ‚ΠΈΡ… Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠ°Ρ… ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΊΠ°ΠΊ Π±Ρ‹ «Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΌΠΈ» — Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΎΠ½ΠΈ ΠΏΠΎΡ€ΠΎΠΆΠ΄Π°ΡŽΡ‚ΡΡ ΠΏΡ€ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ ΠΊΠ°ΠΊΠΎΠ³ΠΎ-Π»ΠΈΠ±ΠΎ ΠΈΠ½ΠΎΠ³ΠΎ сообщСния.

Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡ ΠΎΠΊΠ½Π°

Для создания ΠΎΠΊΠ½Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ функция CreateWindow (). Π’ΠΎ Π²Ρ€Π΅ΠΌΡ Π΅Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΎΠΊΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ нСсколько сообщСний:

WM_GETMINMAXINFO 0 &MINMAXINFO

Π˜Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡ ΠΎ Π΄ΠΎΠΏΡƒΡΡ‚ΠΈΠΌΡ‹Ρ… Ρ€Π°Π·ΠΌΠ΅Ρ€Π°Ρ… ΠΎΠΊΠ½Π°; Π΄Π°Π½Π½Ρ‹Π΅ Π² ΡΡ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π΅ MINMAXINFO Π·Π°Π΄Π°ΡŽΡ‚ΡΡ Π”Πž ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ сообщСния, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡ… Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ, Π° Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΏΡ€ΠΈ нСобходимости. (Для получСния Π΄Π°Π½Π½Ρ‹Ρ… Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ вмСсто ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ этого сообщСния Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ GetWindowPlacement ()).

WM_NCCREATE 0 &CREATESTRUCT

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ внСшнСй (non-client) области ΠΎΠΊΠ½Π°. ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°, прСдусмотрСнная ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€ΠΎΠΉ DefWindowProc () ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ структуры ΠΈ, Π² Ρ‡Π°ΡΡ‚ности, выдСляСт пространство для хранСния Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° ΠΎΠΊΠ½Π°. Никакого рисования Π½Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΠ΅Ρ‚ся. Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹ΠΉ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€ΠΎΠΉ 0 ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° Π²ΠΎΠ·Π½ΠΈΠΊΡˆΡƒΡŽ ΠΎΡˆΠΈΠ±ΠΊΡƒ ΠΈ ΠΎΠΊΠ½ΠΎ Π½Π΅ ΡΠΎΠ·Π΄Π°Π΅Ρ‚ся; Π½Π΅ 0 ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠ΅ созданиС внСшнСй области.

WM_NCCALCSIZE flag &NCCALCSIZE_PARAMS

ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΉ (client) части ΠΎΠΊΠ½Π°; ΠΊΡ€ΠΎΠΌΠ΅ этого опрСдСляСтся Ρ‡Π°ΡΡ‚ΡŒ ΠΎΠΊΠ½Π°, которая ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ скопирована Π±Π΅Π· ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠΈ ΠΎΠΊΠ½Π° ΠΈΠ»ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ Π΅Π³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠ².

WM_CREATE 0 &CREATESTRUCT

ΠŸΡ€Π΅Π΄ΡƒΡΠΌΠΎΡ‚Ρ€Π΅Π½ΠΎ для выполнСния Π’Π°ΠΌΠΈ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Ρ… дСйствий для создания Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΉ (client) области ΠΎΠΊΠ½Π°. ΠŸΡ€ΠΈ этом Π’Ρ‹ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ связанных ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², созданиС Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΡ… ΠΎΠΊΠΎΠ½ ΠΈ ΠΏΡ€. ΠšΠ°ΠΊ ΠΈ WM_NCCREATE функция Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€ΠΆΠ΅Π½ΠΈΠ΅ ΠΎ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠΌ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ Π½ΡƒΠΆΠ½Ρ‹Ρ… дСйствий. Однако «ΡƒΡΠΏΠ΅Ρ…» обозначаСтся 0, Π° ΠΎΡˆΠΈΠ±ΠΊΠ°: -1 (!).

Активация прилоТСния

БСйчас ΠΌΡ‹ Ρ€Π°ΡΡΠΌΠΎΡ‚Ρ€ΠΈΠΌ Π΅Ρ‰Π΅ нСсколько ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚Π΅ΠΉ сообщСний, ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌΡ‹Ρ… Π³Π»Π°Π²Π½Ρ‹ΠΌ ΠΎΠΊΠ½ΠΎΠΌ прилоТСния. Π Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ ΠΌΡ‹ ΠΈΡ… Π±ΡƒΠ΄Π΅ΠΌ Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ создания ΠΈ ΠΎΡ‚обраТСния Π³Π»Π°Π²Π½ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π° прилоТСния. Для Π½Π°Ρ‡Π°Π»Π° ΠΌΡ‹ Π²Ρ‹Π΄Π΅Π»ΠΈΠΌ нСсколько сообщСний Π² Π΄Π²Π΅ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Ρ… ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°Π·Π²Π°Ρ‚ΡŒ «Π°ΠΊΡ‚ΠΈΠ²Π°Ρ†ΠΈΠ΅ΠΉ» ΠΈ «Π΄Π΅Π°ΠΊΡ‚ΠΈΠ²Π°Ρ†ΠΈΠ΅ΠΉ» прилоТСния. Π­Ρ‚ΠΈ Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠΈ сообщСний Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‚ ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π΅ активности (фокуса Π²Π²ΠΎΠ΄Π°) ΠΎΡ‚ ΠΎΠ΄Π½ΠΎΠ³ΠΎ прилоТСния Π΄Ρ€ΡƒΠ³ΠΎΠΌΡƒ. Π—Π° Π²Ρ€Π΅ΠΌΡ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΎΠ΄Π½ΠΎΠ³ΠΎ прилоТСния эти Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Ρ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎΠΊΡ€Π°Ρ‚Π½ΠΎ. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ сразу Π·Π° ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ΠΌ Π³Π»Π°Π²Π½ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π° прилоТСния слСдуСт активация этого прилоТСния.

Активация прилоТСния:

WM_ACTIVATEAPP TRUE hTask

сообщСниС, ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΡŽΡ‰Π΅Π΅ ΠΎΠ± Π°ΠΊΡ‚ΠΈΠ²Π°Ρ†ΠΈΠΈ прилоТСния. Если ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈΠΌΠ΅Π΅Ρ‚ нСсколько ΠΎΠΊΠΎΠ½ «Π²Π΅Ρ€Ρ…Π½Π΅Π³ΠΎ уровня» (Ρ‚.Π΅. ΠΎΠΊΠΎΠ½ стиля WS_OVERLAPPED ΠΈΠ»ΠΈ WS_POPUP), Ρ‚ΠΎ Π²ΡΠ΅ ΠΎΠ½ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‚ эти сообщСния. МладшСС слово lParam содСрТит Ρ…Π΅Π½Π΄Π» Ρ‚ΠΎΠΉ Π·Π°Π΄Π°Ρ‡ΠΈ, которая Π±Ρ‹Π»Π° Π°ΠΊΡ‚ΠΈΠ²Π½Π° Π΄ΠΎ ΡΡ‚ΠΎΠ³ΠΎ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π°.

WM_NCACTIVATE TRUE minimized & hWnd

активация (ΠΈΠ»ΠΈ дСактивация, смотря ΠΏΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρƒ wParam) внСшнСй области ΠΎΠΊΠ½Π°. ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° этого сообщСния ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ пСрСрисовываСт внСшнюю ΠΎΠ±Π»Π°ΡΡ‚ΡŒ ΠΎΠΊΠ½Π° для выдСлСния Ρ†Π²Π΅Ρ‚ΠΎΠΌ Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠ³ΠΎ/Π½Π΅Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠ³ΠΎ состояний. ΠŸΡ€ΠΈ этом Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ ΠΈΠ»ΠΈ Π½Π΅Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ ΠΎΠΊΠ½Π° запоминаСтся Π² ΡΡ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π΅ описания ΠΎΠΊΠ½Π°. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ сами ΠΏΠΎΡΡ‹Π»Π°Ρ‚ΡŒ WM_NCACTIVATE для измСнСния состояния ΠΎΠΊΠ½Π°. Π’ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ `lParam' Π½Π΅ ΠΎΠΏΠΈΡΡ‹Π²Π°Π΅Ρ‚ся, ΠΎΠ΄Π½Π°ΠΊΠΎ ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π½Π΅ 0, ΠΈ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΈΠ΅ ΠΆΠ΅ Π΄Π°Π½Π½Ρ‹Π΅, ΠΊΠ°ΠΊ ΠΈ Π² ΡΠΎΠΎΠ±Ρ‰Π΅Π½ΠΈΠΈ WM_ACTIVATE (см. Π½ΠΈΠΆΠ΅). Π­Ρ‚ΠΎ сообщСниС ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΎ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π³Π»Π°Π²Π½Ρ‹ΠΌ ΠΎΠΊΠ½ΠΎΠΌ прилоТСния, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΠ΅Ρ‚ ΠΎΠ± Π°ΠΊΡ‚ΠΈΠ²Π°Ρ†ΠΈΠΈ ΠΎΠΊΠ½Π°, Π° Π½Π΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ.

Если ΠΎΠΊΠ½ΠΎ активируСтся, Ρ‚ΠΎ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π»ΡŽΠ±Ρ‹ΠΌ, Π° Π΅ΡΠ»ΠΈ дСактивируСтся Ρ‚ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 0 Π·Π°ΠΏΡ€Π΅Ρ‰Π°Π΅Ρ‚ Π΅Π³ΠΎ Π΄Π°Π»ΡŒΠ½Π΅ΠΉΡˆΡƒΡŽ Π΄Π΅Π°ΠΊΡ‚ΠΈΠ²Π°Ρ†ΠΈΡŽ. Π”ΠΎΡ‡Π΅Ρ€Π½ΠΈΠ΅ Π½Π΅ MDI ΠΎΠΊΠ½Π° (ΡΡ‚ΠΈΠ»ΡŒ WS_CHILD) часто этого сообщСния Π½Π΅ ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‚.

WM_GETTEXT bufsize &buffer

ΠΏΡ€ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ этого сообщСния ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΉ Π±ΡƒΡ„Π΅Ρ€ заполняСтся Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠ³ΠΎ ΠΎΠΊΠ½Π°. Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС это сообщСниС пороТдаСтся ΠΏΡ€ΠΈ пСрСрисовкС внСшнСй области ΠΎΠΊΠ½Π° — WM_GETTEXT «Π²Π»ΠΎΠΆΠ΅Π½ΠΎ» Π² ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ WM_NCACTIVATE. Если ΠΎΠΊΠ½ΠΎ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° (caption bar), Ρ‚ΠΎ ΡΡ‚ΠΎ сообщСниС Π½Π΅ ΠΏΠΎΡΡ‹Π»Π°Π΅Ρ‚ся.

WM_ACTIVATE 1 ΠΈΠ»ΠΈ 2 minimized & hWnd

активация Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΉ области ΠΎΠΊΠ½Π°. Π­Ρ‚ΠΎ сообщСниС ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΎ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π³Π»Π°Π²Π½Ρ‹ΠΌ ΠΎΠΊΠ½ΠΎΠΌ прилоТСния, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΠ΅Ρ‚ ΠΎΠ± Π°ΠΊΡ‚ΠΈΠ²Π°Ρ†ΠΈΠΈ ΠΎΠΊΠ½Π°, Π° Π½Π΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ. Однако Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠ΅ ΠΎΠΊΠ½Π° (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‰ΠΈΠ΅ элСмСнты Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²) ΠΌΠΎΠ³ΡƒΡ‚ этого сообщСния Π½Π΅ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ. ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ wParam ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΠ΅Ρ‚ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠΊΠ½ΠΎ активируСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ наТатия ΠΊΠ½ΠΎΠΏΠΊΠΈ ΠΌΡ‹ΡˆΠΈ (2) ΠΈΠ»ΠΈ ΠΈΠ½Ρ‹ΠΌ ΠΏΡƒΡ‚Π΅ΠΌ (0). ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ lParam содСрТит Π² ΡΡ‚Π°Ρ€ΡˆΠ΅ΠΌ словС Π½Π΅ 0, Ссли ΠΎΠΊΠ½ΠΎ ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½ΠΎ, Π° Π² ΠΌΠ»Π°Π΄ΡˆΠ΅ΠΌ словС — Ρ…Π΅Π½Π΄Π» ΠΎΠΊΠ½Π° Π±Ρ‹Π²ΡˆΠ΅Π³ΠΎ Π΄ΠΎ ΡΡ‚ΠΎΠ³ΠΎ Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹ΠΌ.

<οΏ½ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ фокуса Π²Π²ΠΎΠ΄Π°>

сообщСния получСния/ΠΏΠΎΡ‚Π΅Ρ€ΠΈ фокуса Π²Π²ΠΎΠ΄Π° ΠΎΠΊΠ½ΠΎΠΌ см. Π½ΠΈΠΆΠ΅.

Π’ ΡΡ‚ΠΎΠΉ Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚ΡŒ Π΄Π²Π΅ Ρ„Π°Π·Ρ‹:

1) активация прилоТСния (Ссли трСбуСтся)

2) активация ΠΎΠΊΠ½Π°, которая Ρ‚ΠΎΠΆΠ΅ выполняСтся Π² Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΎ Ρ„Π°Π·:

Β· активация внСшнСй области

Β· активация Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΉ области Вся Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠ° часто пороТдаСтся Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ SetWindowPos (…); ΠΏΡ€ΠΈ этом такая Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠ° Π²Ρ…ΠΎΠ΄ΠΈΡ‚ Π² Π±ΠΎΠ»Π΅Π΅ ΡΠ»ΠΎΠΆΠ½ΡƒΡŽ Π³Ρ€ΡƒΠΏΠΏΡƒ, Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΡƒΡŽΡΡ с WM_WINDOWPOSCHAINGING ΠΈ Π·Π°ΠΊΠ°Π½Ρ‡ΠΈΠ²Π°ΡŽΡ‰ΡƒΡŽΡΡ WM_WINDOWPOSCHANGED. ΠŸΡ€ΠΈ Π°ΠΊΡ‚ΠΈΠ²Π°Ρ†ΠΈΠΈ ΠΎΠΊΠ½Π° «Ρ‰Π΅Π»Ρ‡ΠΊΠΎΠΌ ΠΌΡ‹ΡˆΠΊΠΎΠΉ» ΠΏΠ΅Ρ€Π΅Π΄ этой Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠΎΠΉ ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ WM_MOUSEACTIVATE ΠΈ ΠΏΠ°Ρ€Π° сообщСний WM_WINDOWPOSCHAINGING, WM_WINDOWPOSCHANGED. (Π‘ΠΌ. Π½ΠΈΠΆΠ΅)

ДСактивация прилоТСния

ΠŸΡ€ΠΈ Π΄Π΅Π°ΠΊΡ‚ΠΈΠ²Π°Ρ†ΠΈΠΈ прилоТСния Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚ΡŒ Π΄Π²Π΅ Ρ„Π°Π·Ρ‹ — Π΄Π΅Π°ΠΊΡ‚ΠΈΠ²Π°Ρ†ΠΈΡŽ ΠΎΠΊΠ½Π° ΠΈ Π΄Π΅Π°ΠΊΡ‚ΠΈΠ²Π°Ρ†ΠΈΡŽ прилоТСния. Однако Π²ΠΎΠΏΡ€Π΅ΠΊΠΈ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠΉ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ выполнСния ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹Ρ… дСйствий Π² ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΌ порядкС Windows выполняСт Π΄Π΅Π°ΠΊΡ‚ΠΈΠ²Π°Ρ†ΠΈΡŽ ΠΎΠΊΠ½Π° Π² Ρ‚ΠΎΠΌ-ΠΆΠ΅ порядкС, ΠΊΠ°ΠΊ ΠΈ Π°ΠΊΡ‚ΠΈΠ²Π°Ρ†ΠΈΡŽ — сначала внСшнюю, Π° Π·Π°Ρ‚Π΅ΠΌ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΡŽΡŽ области.

WM_NCACTIVATE FALSE minimized & hWnd

дСактивация начинаСтся с ΡΠΎΠΎΠ±Ρ‰Π΅Π½ΠΈΡ ΠΎ Π΄Π΅Π°ΠΊΡ‚ΠΈΠ²Π°Ρ†ΠΈΠΈ внСшнСй области ΠΎΠΊΠ½Π°, ΠΎ Ρ‡Π΅ΠΌ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ wParam == FALSE. ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ lParam содСрТит Π² ΠΌΠ»Π°Π΄ΡˆΠ΅ΠΌ словС Ρ…Π΅Π½Π΄Π» ΠΎΠΊΠ½Π°, становящСгося Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹ΠΌ, ΡΡ‚Π°Ρ€ΡˆΠ΅Π΅ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° ΡΠΎΡΡ‚ояниС Π’Π°ΡˆΠ΅Π³ΠΎ ΠΎΠΊΠ½Π°. (Π‘ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ — см. Π²Ρ‹ΡˆΠ΅ «Π°ΠΊΡ‚ивация прилоТСния»)

WM_GETTEXT bufsize &buffer

Π­Ρ‚ΠΎ сообщСниС пороТдаСтся ΠΏΡ€ΠΈ пСрСрисовкС внСшнСй области ΠΎΠΊΠ½Π°.

WM_ACTIVATE FALSE minimized & hWnd

Π·Π°Ρ‚Π΅ΠΌ дСактивируСтся внутрСнняя ΠΎΠ±Π»Π°ΡΡ‚ΡŒ ΠΎΠΊΠ½Π° (wParam == FALSE). ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ lParam содСрТит Π² ΠΌΠ»Π°Π΄ΡˆΠ΅ΠΌ словС Ρ…Π΅Π½Π΄Π» ΠΎΠΊΠ½Π°, становящСгося Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹ΠΌ, ΡΡ‚Π°Ρ€ΡˆΠ΅Π΅ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° ΡΠΎΡΡ‚ояниС Π’Π°ΡˆΠ΅Π³ΠΎ ΠΎΠΊΠ½Π°.

WM_ACTIVATEAPP FALSE hTask

ΠΈ Π² ΠΊΠΎΠ½Ρ†Π΅ дСактивируСтся всС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ hTask ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ становится Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹ΠΌ.

<�потСря фокуса Π²Π²ΠΎΠ΄Π° ΠΎΠΊΠ½ΠΎΠΌ>

сообщСния получСния/ΠΏΠΎΡ‚Π΅Ρ€ΠΈ фокуса Π²Π²ΠΎΠ΄Π° ΠΎΠΊΠ½ΠΎΠΌ см. Π½ΠΈΠΆΠ΅.

ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΠΈ ΠΏΠΎΡ‚Сря фокуса Π²Π²ΠΎΠ΄Π° ΠΎΠΊΠ½ΠΎΠΌ

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

Как ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ собщСний Π°ΠΊΡ‚ΠΈΠ²Π°Ρ†ΠΈΠΈ ΠΎΠΊΠ½Π° заканчиваСтся сообщСниСм ΠΎ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠΈ фокуса Π²Π²ΠΎΠ΄Π°, ΠΈ ΡΠΎΠΎΠ±Ρ‰Π΅Π½ΠΈΡ ΠΎ Π΄Π΅Π°ΠΊΡ‚ΠΈΠ²Π°Ρ†ΠΈΠΈ Π·Π°ΠΊΠ°Π½Ρ‡ΠΈΠ²Π°ΡŽΡ‚ΡΡ сообщСниСм ΠΎ ΠΏΠΎΡ‚Π΅Ρ€Π΅ фокуса Π²Π²ΠΎΠ΄Π° (ΠΎΠΏΡΡ‚ΡŒ-Ρ‚Π°ΠΊΠΈ Π½Π΅ Π² ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΌ порядкС).

ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ фокуса Π²Π²ΠΎΠ΄Π° ΠΎΠΊΠ½ΠΎΠΌ:

WM_SETFOCUS hWnd losing focus 0

ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ фокус Π²Π²ΠΎΠ΄Π°, ΠΏΡ€ΠΈΡ‡Π΅ΠΌ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ wParam ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Ρ…Π΅Π½Π΄Π» ΠΎΠΊΠ½Π°, Ρ‚Π΅Ρ€ΡΡŽΡ‰Π΅Π³ΠΎ фокус Π²Π²ΠΎΠ΄Π° (ΠΈΠ»ΠΈ NULL).

потСря фокуса Π²Π²ΠΎΠ΄Π° ΠΎΠΊΠ½ΠΎΠΌ:

WM_KILLFOCUS hWnd received focus 0

тСряСм фокус Π²Π²ΠΎΠ΄Π°, ΠΏΡ€ΠΈΡ‡Π΅ΠΌ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ wParam ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Ρ…Π΅Π½Π΄Π» ΠΎΠΊΠ½Π°, ΠΏΡ€ΠΈΠΎΠ±Ρ€Π΅Ρ‚Π°ΡŽΡ‰Π΅Π³ΠΎ фокус Π²Π²ΠΎΠ΄Π° (ΠΈΠ»ΠΈ NULL).

ΠžΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΎΠΊΠ½Π°

ΠžΠ±Ρ‹Ρ‡Π½ΠΎ, послС создания Π³Π»Π°Π²Π½ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π° прилоТСния, ΠΌΡ‹ Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ShowWindow () для отобраТСния Π³Π»Π°Π²Π½ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π° Π² Π½ΡƒΠΆΠ½ΠΎΠΌ Π½Π°ΠΌ состоянии.

ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ShowWindow ():

WM_SHOWWINDOW TRUE/FALSE 0

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ wParam ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌΠΎΠ΅ дСйствиС — ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ (TRUE) ΠΈΠ»ΠΈ «ΡΠΏΡ€ΡΡ‚Π°Ρ‚ΡŒ» (FALSE) ΠΎΠΊΠ½ΠΎ. МладшСС слово lParam содСрТит 0, Ссли сообщСниС послано Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ ShowWindow ().

<�БообщСния Π°ΠΊΡ‚ΠΈΠ²Π°Ρ†ΠΈΠΈ прилоТСния>

Если ΠΌΡ‹ Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌ ShowWindow () для Π°ΠΊΡ‚ΠΈΠ²Π°Ρ†ΠΈΠΈ прилоТСния, Ρ‚ΠΎ ΡΠ΅ΠΉΡ‡Π°Ρ ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠ° сообщСний ΠΎΠ± Π°ΠΊΡ‚ΠΈΠ²Π°Ρ†ΠΈΠΈ прилоТСния ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ фокуса Π²Π²ΠΎΠ΄Π°.

WM_NCPAINT 0 0

Π­Ρ‚ΠΎ сообщСниС, ΠΊΠ°ΠΊ ΠΈ WM_NCACTIVATE выполняСт рисованиС внСшнСй области ΠΎΠΊΠ½Π° (ΠΊΡ€ΠΎΠΌΠ΅ Π½ΠΈΡ… этим Π·Π°Π½ΠΈΠΌΠ°ΡŽΡ‚ΡΡ Π΅Ρ‰Π΅ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ сообщСния, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ WM_NCLBUTTONDOWN ΠΈ WM_SYSCOMMAND). Π’ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ ΡƒΠΊΠ°Π·Π°Π½ΠΎ, Ρ‡Ρ‚ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ wParam ΠΈ lParam Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ся. Π’ Borland Help ΡƒΠΊΠ°Π·Π°Π½ΠΎ, Ρ‡Ρ‚ΠΎ wParam являСтся Ρ…Π΅Π½Π΄Π»ΠΎΠΌ Ρ€Π΅Π³ΠΈΠΎΠ½Π°, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‰Π΅Π³ΠΎ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ Π³Π΄Π΅ рисованиС трСбуСтся, Π° lParam Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ся. На ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ wParam ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ 0 (ΠΏΡ€ΠΈ этом внСшняя ΠΎΠ±Π»Π°ΡΡ‚ΡŒ Π½Π΅ ΠΏΠ΅Ρ€Π΅Ρ€ΠΈΡΠΎΠ²Ρ‹Π²Π°Π΅Ρ‚ся), ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ…Π΅Π½Π΄Π»ΠΎΠΌ Ρ€Π΅Π³ΠΈΠΎΠ½Π°, ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ 1 (рисованиС внСшнСй области трСбуСтся). ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ lParam ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ 0, ΠΈΠ»ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ Π² ΠΌΠ»Π°Π΄ΡˆΠ΅ΠΌ словС Ρ…Π΅Π½Π΄Π» ΠΎΠΊΠ½Π°, Π° Π² ΡΡ‚Π°Ρ€ΡˆΠ΅ΠΌ Π΅Ρ‰Π΅ ΠΊΠ°ΠΊΠΈΠ΅-Ρ‚ΠΎ Π΄Π°Π½Π½Ρ‹Π΅.

WM_GETTEXT bufsize &buffer

Как ΠΈ Π² ΡΠ»ΡƒΡ‡Π°Π΅ WM_NCACTIVATE это сообщСниС «Π²Π»ΠΎΠΆΠ΅Π½ΠΎ» Π² ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ WM_NCPAINT.

WM_ERASEBKGND hDC 0

ΠžΡ‡ΠΈΡ‰Π°Π΅Ρ‚ΡΡ Ρ„ΠΎΠ½ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΉ области ΠΎΠΊΠ½Π°. Для этого ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΊΠΈΡΡ‚ΡŒ, опрСдСлСнная Π² ΡΡ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π΅ описания ΠΎΠΊΠ½Π°. ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ wParam Π·Π°Π΄Π°Π΅Ρ‚ Ρ…Π΅Π½Π΄Π» контСкста устройства, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΉ области ΠΎΠΊΠ½Π°. Если Π’Ρ‹ ΠΏΠ»Π°Π½ΠΈΡ€ΡƒΠ΅Ρ‚Π΅ сами Π·Π°ΠΊΡ€Π°ΡˆΠΈΠ²Π°Ρ‚ΡŒ Ρ„ΠΎΠ½ ΠΎΠΊΠ½Π°, Ρ‚ΠΎ Π΄Π»Ρ опрСдСлСния Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠ² Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΉ области ΠΎΠΊΠ½Π° Π½Π°Π΄ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ GetClientRect (). Π­Ρ‚ΠΎ связано с Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ создании Π²ΠΈΠ΄ΠΈΠΌΠΎΠ³ΠΎ ΠΎΠΊΠ½Π° (ΠΈΠΌΠ΅ΡŽΡ‰Π΅Π³ΠΎ ΡΡ‚ΠΈΠ»ΡŒ WS_VISIBLE) сообщСниС WM_ERASEBKGND встрСчаСтся Π΄ΠΎ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ сообщСния WM_SIZE, Π° ΡΠΎΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ WM_WINDOWPOSCHANGING Π² ΡΡ‚ΠΎΠΌ случаС хотя ΠΈ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚ываСтся Π΄ΠΎ WM_ERASEBKGND, Π½ΠΎ ΡΠΎΠ΄Π΅Ρ€ΠΆΠΈΡ‚ Π½ΡƒΠ»Π΅Π²Ρ‹Π΅ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΉ области ΠΎΠΊΠ½Π°.

WM_SIZE type height & width

ЗадаСтся Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΎΠΊΠ½Π°, ΠΏΡ€ΠΈΡ‡Π΅ΠΌ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ wParam ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΠ΅Ρ‚ ΠΎ «Ρ‚ΠΈΠΏΠ΅» Ρ€Π°Π·ΠΌΠ΅Ρ€Π° — ΠΎΠΊΠ½ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ максимизировано, ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½ΠΎ ΠΈΠ»ΠΈ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΎ Π² Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎΠΌ состоянии. Π­Ρ‚ΠΎ сообщСниС, ΠΊΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, посылаСтся ΠΎΠΊΠ½Ρƒ Ссли ΠΎΠ½ΠΎ закрываСтся ΠΊΠ°ΠΊΠΈΠΌ-Π»ΠΈΠ±ΠΎ максимизированным ΠΎΠΊΠ½ΠΎΠΌ, ΠΈΠ»ΠΈ становится Π²ΠΈΠ΄ΠΈΠΌΡ‹ΠΌ, ΠΊΠΎΠ³Π΄Π° Π·Π°ΠΊΡ€Ρ‹Π²Π°Π²ΡˆΠ΅Π΅ Π΅Π³ΠΎ максимизированноС ΠΎΠΊΠ½ΠΎ стало Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌ ΠΈΠ»ΠΈ ΠΏΡ€Π΅Π²Ρ€Π°Ρ‚ΠΈΠ»ΠΎΡΡŒ Π² ΠΈΠΊΠΎΠ½ΠΊΡƒ.

WM_MOVE 0 y & x

ЗадаСтся ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΎΠΊΠ½Π° Π½Π° ΡΠΊΡ€Π°Π½Π΅ (ΠΈΠ»ΠΈ Π²ΠΎ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΉ области ΠΎΠΊΠ½Π°-родитСля).

ИзмСнСниС Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠ², полоТСния ΠΈΠ»ΠΈ состояния ΠΎΠΊΠ½Π°

ΠžΠ±Ρ‹Ρ‡Π½ΠΎ ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠΈ (Π² X, Y ΠΈΠ»ΠΈ Z Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠΈ), ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠ² ΠΎΠΊΠ½Π° ΠΈΠ»ΠΈ ΠΏΡ€ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ Π΅Π³ΠΎ состояния, ΠΏΠΎΠΌΠΈΠΌΠΎ WM_SIZE ΠΈ WM_MOVE Π’Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚Π΅ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ сообщСния WM_WINDOWPOSCHANGING ΠΈ WM_WINDOWPOSCHANGED. ΠŸΡ€ΠΈ этом всС сообщСния ΠΏΠΎΡΡ‹Π»ΡŽΡ‚ΡΡ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ SetWindowPos (…) (ΠΈΠ»ΠΈ эквивалСнтной) Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ порядкС:

WM_WINDOWPOSCHANGING 0 &WINDOWPOS

cΠΎΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ состояниС ΠΎΠΊΠ½Π° измСняСтся. ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ lParam содСрТит ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° ΡΡ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Ρƒ WINDOWPOS, ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‰ΡƒΡŽ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΎΠΊΠ½Π° ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡƒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ. ИзмСнив ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ поля структуры ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ ΠΎΠΊΠ½Π° ΠΈΠ»ΠΈ ΠΏΠΎΠ²Π»ΠΈΡΡ‚ΡŒ Π½Π° Π²Ρ‹ΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡ‹Π΅ дСйствия.

<�сообщСния Π°ΠΊΡ‚ΠΈΠ²Π°Ρ†ΠΈΠΈ ΠΎΠΊΠ½Π° (ΠΈΠ»ΠΈ всСго прилоТСния)>

Ссли ΠΎΠΊΠ½ΠΎ просто активируСтся, Ρ‚ΠΎ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ сообщСниС WM_WINDOWPOSCHANGED, Π·Π°Π²Π΅Ρ€ΡˆΠ°ΡŽΡ‰Π΅Π΅ всю Ρ†Π΅ΠΏΠΎΡ‡ΠΊΡƒ, Π±Π΅Π· всСх рассматриваСмых Π½Π°ΠΌΠΈ ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹Ρ… сообщСний, примСняСмых ΠΏΡ€ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠ² ΠΈΠ»ΠΈ полоТСния.

WM_GETMINMAXINFO 0 &MINMAXINFO

ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½ΠΎΠ²Ρ‹Ρ… Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠ² ΠΎΠΊΠ½Π°

WM_NCCALCSIZE flag &NCCALCSIZE_PARAMS

ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΉ области

WM_NCPAINT 0 0

ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ внСшнСй области ΠΎΠΊΠ½Π°

WM_ERASEBKGND hDC 0

очистка Ρ„ΠΎΠ½Π° ΠΎΠΊΠ½Π°

WM_WINDOWPOSCHANGED 0 &WINDOWPOS

состояниС ΠΎΠΊΠ½Π° ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΎ. ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ lParam являСтся ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΌ Π½Π° ΡΡ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Ρƒ WINDOWPOS, ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‰ΡƒΡŽ Π΄Π°Π½Π½Ρ‹Π΅ ΠΎ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ ΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€Π°Ρ… ΠΎΠΊΠ½Π°. БообщСния WM_WINDOWPOSCHANGING … WM_WINDOWPOSCHANGED часто Π½Π΅ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ ΠΌΠ΅ΠΆΠ΄Ρƒ собой Π½ΠΈΠΊΠ°ΠΊΠΈΡ… ΠΈΠ½Ρ‹Ρ… сообщСний, Ссли состояниС, Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΈ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ»ΠΈΡΡŒ. (Часто это Π±Ρ‹Π²Π°Π΅Ρ‚, Ссли ΠΎΠΊΠ½ΠΎ активируСтся Π² ΠΎΡ‚Π²Π΅Ρ‚ Π½Π° «Ρ‰Π΅Π»Ρ‡ΠΎΠΊ ΠΌΡ‹ΡˆΠΊΠΎΠΉ»).

WM_MOVE 0 y & x

WM_SIZE type height & width

Π­Ρ‚ΠΈ сообщСния ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΡŽΡ‚ ΠΎ Π½ΠΎΠ²ΠΎΠΌ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ ΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€Π°Ρ… ΠΎΠΊΠ½Π°. Они ΠΏΠΎΡΡ‹Π»Π°ΡŽΡ‚ΡΡ ΠΏΡ€ΠΈ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… измСнСниях ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€ΠΎΠΉ DefWindowProc () ΠΏΡ€ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ сообщСния WM_WINDOWPOSCHANGED. Π₯отя Π² Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ ΡƒΠΊΠ°Π·Π°Π½ΠΎ, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ нСсколько ΡƒΡΠΊΠΎΡ€ΠΈΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρƒ, пСрСхватывая вмСсто WM_MOVE ΠΈ WM_SIZE сообщСниС WM_WINDOWPOSCHANGED ΠΈ Π½Π΅ Π²Ρ‹Π·Ρ‹Π²Π°Ρ ΠΏΡ€ΠΈ этом DefWindowProc (), Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ этот ΠΏΡ€ΠΈΠ΅ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΎΡ‡Π΅Π½ΡŒ остороТно — Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ сообщСния WM_SIZE ΠΈ WM_MOVE ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ MDI ΠΎΠΊΠ½Π°ΠΌΠΈ.

РассмотрСнная Π½Π°ΠΌΠΈ Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠ° сообщСний пороТдаСтся Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ SetWindowPos (ΠΈΠ»ΠΈ эквивалСнтной) ΠΈ ΡΡ‚ΠΈ сообщСния нСпосрСдствСнно ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ΡΡ ΠΎΠΊΠ½Ρƒ, Π° Π½Π΅ ΠΏΠΎΡΡ‹Π»Π°ΡŽΡ‚ся.

WM_PAINT 0 0

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

ОбновлСниС окна

ПослС Π²Ρ‹Π·ΠΎΠ²Π° ShowWindow () Π² WinMain () ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ слСдуСт ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° UpdateWindow (). Π­Ρ‚Π° ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° провСряСт Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ Π½Π΅Π²Π΅Ρ€Π½Ρ‹Ρ… ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠΎΠ² ΠΈ, Ссли ΠΎΠ½ΠΈ Π΅ΡΡ‚ΡŒ, ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅Ρ‚ сообщСниС WM_PAINT (Π½Π΅ ΡΡ‚Π°Π²ΠΈΡ‚ Π² ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ, Π° Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ этого сообщСния).

ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° UpdateWindow ():

WM_PAINT 0 0

ΠΠ°Ρ€ΠΈΡΠΎΠ²Π°Ρ‚ΡŒ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΡŽΡŽ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ ΠΎΠΊΠ½Π°. Если для получСния Ρ…Π΅Π½Π΄Π»Π° контСкста устройства ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ функция BeginPaint (), Ρ‚ΠΎ ΠΎΠ½Π° ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ сообщСниС WM_ERASEBKGND для очистки Ρ„ΠΎΠ½Π° Π² Π½Π΅Π²Π΅Ρ€Π½ΠΎΠΌ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠ΅ (Ссли ΠΏΡ€ΠΈ Π΅Π³ΠΎ создании Π±Ρ‹Π»ΠΎ ΡƒΠΊΠ°Π·Π°Π½ΠΎ, Ρ‡Ρ‚ΠΎ Ρ„ΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ восстановлСн).

WM_ERASEBKGND hDC 0

ΠžΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ это сообщСниС, ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π·Π°ΠΊΡ€Π°ΡΠΈΡ‚ΡŒ Ρ„ΠΎΠ½ ΠΎΠΊΠ½Π°, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½Ρ‹ΠΉ Π½Π°ΠΌ Ρ…Π΅Π½Π΄Π» контСкста устройства, ΠΈΠ»ΠΈ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ.

Π£Π½ΠΈΡ‡Ρ‚ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΎΠΊΠ½Π°

Для уничтоТСния ΠΎΠΊΠ½Π° Π½Π°Π΄ΠΎ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ DestroyWindow (), которая Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌΡ‹Π΅ дСйствия ΠΏΠΎ Π·Π°ΠΊΡ€Ρ‹Ρ‚ΠΈΡŽ ΠΎΠΊΠ½Π°. ΠŸΡ€ΠΈΡ‡Π΅ΠΌ ΠΏΡ€ΠΈ этом ΠΏΠΎΡΡ‹Π»Π°ΡŽΡ‚ΡΡ:

<�сообщСния Π΄Π΅Π°ΠΊΡ‚ΠΈΠ²Π°Ρ†ΠΈΠΈ (Ссли Π½Π°Π΄ΠΎ)>

Иногда Π±Ρ‹Π²Π°Π΅Ρ‚ Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎ сообщСния Π΄Π΅Π°ΠΊΡ‚ΠΈΠ²Π°Ρ†ΠΈΠΈ ΠΎΠΊΠ½Π° Π½Π΅ ΠΏΠΎΡΡ‚ΡƒΠΏΠ°ΡŽΡ‚, происходит дСактивация прилоТСния ΠΈ ΡƒΠ½ΠΈΡ‡Ρ‚ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΎΠΊΠ½Π°;

WM_DESTROY 0 0

Π£Π½ΠΈΡ‡Ρ‚ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΉ области ΠΎΠΊΠ½Π°.

WM_NCDESTROY 0 0

Π£Π½ΠΈΡ‡Ρ‚ΠΎΠΆΠ΅Π½ΠΈΠ΅ внСшнСй области ΠΎΠΊΠ½Π°.

БообщСния WM_DESTROY ΠΈ WM_NCDESTROY ΡΠ²Π»ΡΡŽΡ‚ΡΡ послСдними сообщСниями, ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌΡ‹ΠΌΠΈ ΠΎΠΊΠ½ΠΎΠΌ. ПослС WM_NCDESTROY ΠΎΠΊΠ½ΠΎ Π½Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ Π½ΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ сообщСния, поэтому Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ смСло Ρ€Π°Π·Ρ€ΡƒΡˆΠ°Ρ‚ΡŒ всС созданныС для ΠΎΠΊΠ½Π° структуры Π΄Π°Π½Π½Ρ‹Ρ….

Π‘ΠΎΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ WM_DESTROY ΡƒΠ΄ΠΎΠ±Π½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ для уничтоТСния всСх ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², связянных с Π΄Π°Π½Π½Ρ‹ΠΌ ΠΎΠΊΠ½ΠΎΠΌ, Π² Ρ‚ΠΎΠΌ числС ΠΈ Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΡ… ΠΎΠΊΠΎΠ½.

Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: Π²ΠΎ Π²Ρ€Π΅ΠΌΡ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ сообщСний WM_DESTROY ΠΈ WM_NCDESTROY нСльзя Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΠΈΡ…-Π»ΠΈΠ±ΠΎ Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΡ… ΠΎΠΊΠΎΠ½. (Π’ Ρ‚ΠΎΠΌ числС нСльзя ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ MessageBox, пСрСдавая Π΅ΠΉ Ρ…Π΅Π½Π΄Π» ΡƒΠ½ΠΈΡ‡Ρ‚ΠΎΠΆΠ°Π΅ΠΌΠΎΠ³ΠΎ ΠΎΠΊΠ½Π° Π² ΠΊΠ°Ρ‡Π΅ΡΡ‚Π²Π΅ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ) — это ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ ΠΏΠΎΡΠ²Π»Π΅Π½ΠΈΡŽ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… сообщСний, Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½Π½Ρ‹Ρ… ΡƒΠ½ΠΈΡ‡Ρ‚ΠΎΠΆΠ°Π΅ΠΌΠΎΠΌΡƒ ΠΎΠΊΠ½Ρƒ, ΠΈ, Π² ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠΌ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅, ΠΊ ΠΎΡˆΠΈΠ±ΠΊΠ΅ «General protection fault…»

Если Π’Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅Π΄ Π·Π°ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ΠΌ ΠΎΠΊΠ½Π°, Ρ‚ΠΎ Π’Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ сообщСниС WM_CLOSE. Ѐункция DefWindowProc, обрабатывая это сообщСниС, Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ DestroyWindow. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π»Π΅Π³ΠΊΠΎ Π²ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ собствСнныС срСдства для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ сообщСния WM_CLOSE, ΠΈ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ DestroyWindow ΠΈΠ»ΠΈ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρƒ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΈ ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΌ ΠΎΡ‚Π²Π΅Ρ‚Π΅ Π½Π° Π·Π°ΠΏΡ€ΠΎΡ. Π‘ΠΎΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ WM_CLOSE Π»ΡƒΡ‡ΡˆΠ΅ ΠΏΠΎΡΡ‹Π»Π°Ρ‚ΡŒ, Π° Π½Π΅ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ.

Π‘ΠΎΠ±Ρ‹Ρ‚ΠΈΠ΅ WM_CLOSE ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ самой срСдой, ΠΏΡ€ΠΈΡ‡Π΅ΠΌ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ прСдваряСтся ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒΡŽ сообщСний, приводящСй ΠΊ Π·Π°ΠΊΡ€Ρ‹Ρ‚ΠΈΡŽ ΠΎΠΊΠ½Π°. НапримСр Ρ‚Π°ΠΊΠΎΠΉ: активация систСмного мСню — Π²Ρ‹Π±ΠΎΡ€ ΠΏΡƒΠ½ΠΊΡ‚Π° `Close' — Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅ мСню — посылка WM_SYSCOMMAND с ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ SC_CLOSE — посылка WM_CLOSE — ΡƒΠ½ΠΈΡ‡Ρ‚ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΎΠΊΠ½Π°.

Π—Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Windows

БущСствуСт Π΅Ρ‰Π΅ Π΄Π²Π° сообщСния, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΌΠΎΠ³ΡƒΡ‚ привСсти ΠΊ Π·Π°ΠΊΡ€Ρ‹Ρ‚ΠΈΡŽ ΠΎΠΊΠ½Π°:

WM_QUERYENDSESSION 0 0

Π­Ρ‚ΠΎ сообщСниС ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΠ΅Ρ‚ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Windows Π·Π°ΠΊΠ°Π½Ρ‡ΠΈΠ²Π°Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρƒ ΠΊΠΎΠ³Π΄Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎ. Оно посылаСтся ΠΊΠΎ Π²ΡΠ΅ΠΌ Π·Π°ΠΏΡƒΡ‰Π΅Π½Ρ‹ΠΌ прилоТСниям. Если всС Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ TRUE, Ρ‚ΠΎ Windows Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρƒ.

ΠžΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ это сообщСниС, Π’Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ TRUE, Ссли Π’Π°ΡˆΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΎ, ΠΈΠ»ΠΈ FALSE Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС. ΠŸΡ€ΠΈ этом Windows ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚ Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΡƒΡŽ Ρ€Π°Π±ΠΎΡ‚Ρƒ.

WM_ENDSESSION TRUE/FALSE 0

Π­Ρ‚ΠΎ сообщСниС посылаСтся Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠΌΡƒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡŽ, Ссли ΠΎΠ½ΠΎ ΠΎΡ‚Π²Π΅Ρ‚ΠΈΠ»ΠΎ TRUE Π½Π° ΡΠΎΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ WM_QUERYENDSESSION. Π€Π»Π°Π³ Π² ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π΅ `wPar' Ρ€Π°Π²Π½Ρ‹ΠΉ TRUE ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Ρ€Π°Π±ΠΎΡ‚Π° Windows ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡŒΡΡ сразу послС ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ этого сообщСния. Π’Ρ‹ Π½Π΅ ΠΎΠ±ΡΠ·Π°Π½Ρ‹ ΡƒΠ½ΠΈΡ‡Ρ‚ΠΎΠΆΠ°Ρ‚ΡŒ ΠΎΠΊΠ½ΠΎ ΠΈ ΠΏΠΎΡΡ‹Π»Π°Ρ‚ΡŒ сСбС WM_QUIT для Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ Ρ€Π°Π±ΠΎΡ‚Ρ‹, Ссли Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ Ρ€Π°Π±ΠΎΡ‚Π° всСго Windows.

ΠšΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Π°. БообщСния ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹

БСйчас ΠΌΡ‹ Ρ€Π°ΡΡΠΌΠΎΡ‚Ρ€ΠΈΠΌ основныС сообщСния ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹ ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½Ρ‹Ρ… для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π½Π΅ΠΉ. Когда ΠΌΡ‹ Π½Π°ΠΆΠΈΠΌΠ°Π΅ΠΌ Π½Π° Π»ΡŽΠ±ΡƒΡŽ ΠΊΠ½ΠΎΠΏΠΊΡƒ, нашС (Ρ‚ΠΎΡ‡Π½Π΅Π΅ — Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠ΅) ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ сообщСниС

WM_KEYDOWN VkCode dwKeyData

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ wPar содСрТит Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠΎΠ΄ Π½Π°ΠΆΠ°Ρ‚ΠΎΠΉ клавиши. Π’ Windows поддСрТиваСтся ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Π°Ρ систСма Π½ΡƒΠΌΠ΅Ρ€Π°Ρ†ΠΈΠΈ клавиш, которая прСдставлСна ΠΈΡ… Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ Π½ΠΎΠΌΠ΅Ρ€Π°ΠΌΠΈ.

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ dwKeyData присутствуСт для всСх сообщСний ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹ ΠΈ ΡΠΎΠ΄Π΅Ρ€ΠΆΠΈΡ‚ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌ событии.

Для Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π° клавиш ΠΈΡ… Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠΎΠ΄ соотвСтствуСт Ρ‚ΠΎΠΉ Π·Π°Π³Π»Π°Π²Π½ΠΎΠΉ Π±ΡƒΠΊΠ²Π΅, которая Π½Π° Π½ΠΈΡ… нанСсСна (для английской ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹). НапримСр, Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠΎΠ΄ клавиши A Ρ€Π°Π²Π΅Π½ ASCII ΠΊΠΎΠ΄Ρƒ символа `A'. Для Ρ‚Π΅Ρ… клавиш, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‚ Π±ΡƒΠΊΠ²Π°ΠΌ ΠΈ ΡΠΈΠΌΠ²ΠΎΠ»Π°ΠΌ прСдусмотрСны ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ Π½ΠΎΠΌΠ΅Ρ€Π°, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ VK_F6 для клавиши F6, VK_MENU для клавиши Alt, VK_RETURN для клавиши Enter.

Если ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π½Π° ΡΠΏΠΈΡΠΎΠΊ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΊΠΎΠ΄ΠΎΠ² (это ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π² WINDOWS. H), Ρ‚ΠΎ ΠΌΡ‹ ΡƒΠ²ΠΈΠ΄ΠΈΠΌ нСсколько странных клавиш:

VK_LBUTTON, VK_RBUTTON, VK_MBUTTON

ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… ΠΊΠ½ΠΎΠΏΠΊΠ°ΠΌ ΠΌΡ‹ΡˆΠΈ. Однако эти Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΊΠΎΠ΄Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ нСсколько ΠΈΠ½Π°Ρ‡Π΅, ΠΈ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π΅ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ сообщСний WM_KEYDOWN ΠΏΡ€ΠΈ Π½Π°ΠΆΠ°Ρ‚ΠΈΠΈ ΠΊΠ½ΠΎΠΏΠΎΠΊ ΠΌΡ‹ΡˆΠΈ.

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ dwKeyData присутствуСт для всСх сообщСний ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹ ΠΈ ΡΠΎΠ΄Π΅Ρ€ΠΆΠΈΡ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ:

WM_KEYUP VkCode dwKeyData

ΠšΡ€ΠΎΠΌΠ΅ сообщСния WM_KEYDOWN Windows посылаСт сообщСния WM_KEYUP ΠΏΡ€ΠΈ отпускании клавиши. ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ этого сообщСния Ρ‚Π°ΠΊΠΈΠ΅ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ Ρƒ ΡΠΎΠΎΠ±Ρ‰Π΅Π½ΠΈΡ WM_KEYDOWN.

Когда Π’Π°ΡˆΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈΠ·Π²Π»Π΅ΠΊΠ°Π΅Ρ‚ ΠΈΠ· ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ сообщСниС WM_KEYDOWN, Ρ‚ΠΎ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΎΠ½ΠΎ транслируСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ TranslateMessage (это происходит Π² Π³Π»Π°Π²Π½ΠΎΠΌ Ρ†ΠΈΠΊΠ»Π΅ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ сообщСний). Π­Ρ‚Π° функция осущСствляСт Ρ‚Ρ€Π°Π½ΡΠ»ΡΡ†ΠΈΡŽ сообщСний ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹ ΠΈ Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ посылаСт сообщСния WM_CHAR, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ Π½Π°ΠΆΠ°Ρ‚ΠΎΠΌΡƒ символу ΠΈΠ»ΠΈ WM_DEADCHAR.

WM_CHAR nCharacter dwKeyData

Π‘ΠΎΠΎΠ±Ρ‰Π°Π΅Ρ‚ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡŽ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ наТатая клавиша соотвСтствуСт Π΄Π°Π½Π½ΠΎΠΌΡƒ (nCharacter) символу. Если Π’Ρ‹ Ρ€Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚Π΅, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, собствСнный Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€, Ρ‚ΠΎ Π’Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ сообщСния WM_CHAR для формирования тСкста, Π° Π½Π΅ ΡΠΎΠΎΠ±Ρ‰Π΅Π½ΠΈΡ WM_KEYDOWN.

WM_DEADCHAR nDeadChar dwKeyData

Π­Ρ‚ΠΎ сообщСниС ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΠ΅Ρ‚ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΎ Π½Π°ΠΆΠ°Ρ‚ΠΈΠΈ Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠΉ Dead-Key. Dead-Key клавиши ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‚ Π°ΠΊΡ†Π΅Π½Ρ‚Π½Ρ‹ΠΌ символам. Π’Π°ΠΊ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, нСмСцкая ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Π° ΠΈΠΌΠ΅Π΅Ρ‚ нСсколько Dead-Key, скаТСм `. Если Π½Π°ΠΆΠ°Ρ‚ΡŒ эту ΠΊΠ»Π°Π²ΠΈΡˆΡƒ, Π°, Π·Π°Ρ‚Π΅ΠΌ, Π±ΡƒΠΊΠ²Ρƒ A, Ρ‚ΠΎ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ A Ρ ΡƒΠ΄Π°Ρ€Π΅Π½ΠΈΠ΅ΠΌ. ΠŸΡ€ΠΈ этом Π½Π°ΠΆΠ°Ρ‚Ρ‹ΠΉ ` сам ΠΏΠΎ ΡΠ΅Π±Π΅ Π½Π΅ ΡΠΎΠΎΡ‚вСтствуСт Π½ΠΈΠΊΠ°ΠΊΠΎΠΌΡƒ символу (это Dead-Key), Π° ΡΠ»ΡƒΠΆΠΈΡ‚ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠΌ для ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ клавиши. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ Π½Π° ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ сообщСний WM_KEYDOWN для клавиш ` ΠΈ A Π±ΡƒΠ΄ΡƒΡ‚ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ сообщСния WM_DEADCHAR для ` ΠΈ WM_CHAR для A Ρ ΡƒΠ΄Π°Ρ€Π΅Π½ΠΈΠ΅ΠΌ.

Окно, ΠΈΠΌΠ΅ΡŽΡ‰Π΅Π΅ фокус Π²Π²ΠΎΠ΄Π°, ΠΈ Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ

Помимо рассмотрСнных Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅Ρ… сообщСний Windows ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Π΅Ρ‰Π΅ 4 сообщСния, содСрТащих Ρ‚Π°ΠΊΡƒΡŽ ΠΆΠ΅ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ, ΠΊΠ°ΠΊ ΠΈ ΡƒΠΆΠ΅ рассмотрСнныС сообщСния ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹:

WM_SYSKEYDOWN VkCode dwKeyData

WM_SYSKEYUP VkCode dwKeyData

WM_SYSCHAR nCharacter dwKeyData

WM_SYSDEADCHAR nDeadChar dwKeyData

ΠžΠ±Ρ‹Ρ‡Π½ΠΎ эти сообщСния ΠΏΠΎΡΡ‹Π»Π°ΡŽΡ‚ΡΡ ΠΏΡ€ΠΈ Π½Π°ΠΆΠ°Ρ‚ΠΈΠΈ клавиш совмСстно с ΠΊΠ»Π°Π²ΠΈΡˆΠ΅ΠΉ Alt. Π’Ρ‹ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΡ€Π΅Π΄ΡƒΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ этих сообщСний ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ, Ссли этого Π½Π΅ Π΄Π΅Π»Π°Ρ‚ΡŒ, Ρ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π½Π°Ρ€ΡƒΡˆΠ΅Π½ стандартный интСрфСйс Windows — ΠΏΠ΅Ρ€Π΅ΡΡ‚Π°Π½ΡƒΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΈΠ΅ клавиши ΠΊΠ°ΠΊ Alt-Tab, Ctrl-Esc ΠΈ ΠΏΡ€.

БСйчас ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±ΡƒΠ΄Π΅ΠΌ Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ Π² Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΡΡ… понятий «Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ» ΠΈ «ΠΎΠΊΠ½ΠΎ, ΠΈΠΌΠ΅ΡŽΡ‰Π΅Π΅ фокус Π²Π²ΠΎΠ΄Π°». Π‘Ρ„ΠΎΡ€ΠΌΡƒΠ»ΠΈΡ€ΡƒΠ΅ΠΌ нСсколько ΠΏΡ€Π°Π²ΠΈΠ», ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΡ… Ρ€Π°Π·Π»ΠΈΡ‡Π°Ρ‚ΡŒ эти понятия.

ΠΎΠΊΠ½ΠΎ, ΠΈΠΌΠ΅ΡŽΡ‰Π΅Π΅ фокус Π²Π²ΠΎΠ΄Π°, всСгда Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎ.

Π² Π»ΡŽΠ±ΠΎΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ сущСствуСт Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ.

ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ фокуса Π²Π²ΠΎΠ΄Π°, Ссли Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½ΠΎ, Ρ‚ΠΎ Ρ„окус Π²Π²ΠΎΠ΄Π° Π½Π΅ ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈΡ‚ Π½ΠΈΠΊΠ°ΠΊΠΎΠΌΡƒ ΠΎΠΊΠ½Ρƒ.

Ссли Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ Π½Π΅ ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½ΠΎ, Ρ‚ΠΎ ΠΎΠ½ΠΎ ΠΈΠΌΠ΅Π΅Ρ‚ фокус Π²Π²ΠΎΠ΄Π°.

ВсС, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ ΡΠ΅ΠΉΡ‡Π°Ρ выяснили ΠΎ ΡΠΎΠΎΠ±Ρ‰Π΅Π½ΠΈΡΡ… ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹ относится ΠΊ ΠΎΠΊΠ½Ρƒ, ΠΈΠΌΠ΅ΡŽΡ‰Π΅ΠΌΡƒ фокус Π²Π²ΠΎΠ΄Π°. Если нашС ΠΎΠΊΠ½ΠΎ Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎ ΠΈ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ фокуса Π²Π²ΠΎΠ΄Π°, Ρ‚ΠΎ Π²ΠΌΠ΅ΡΡ‚ΠΎ сообщСний WM_KEYDOWN, WM_KEYUP, WM_CHAR ΠΈ WM_DEADCHAR ΠΎΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ сообщСния WM_SYSKEYDOWN, WM_SYSKEYUP, WM_SYSCHAR ΠΈ WM_SYSDEADCHAR.

Для Ρ‡Π΅Π³ΠΎ Π² Windows ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ эти Π΄Π²Π° понятия? ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΠΌ сСбС, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Ρ€Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅ΠΌ ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€. Для управлСния ΠΈΠΌ ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Π΅ (Π½Π΅ ΡΠΈΡΡ‚Π΅ΠΌΠ½Ρ‹Π΅) сообщСния ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹. Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΡ‹ ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π»ΠΈ наш Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ ΠΈ ΡΠ΄Π΅Π»Π°Π»ΠΈ Π΅Π³ΠΎ Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹ΠΌ. Если Π±Ρ‹ ΠΏΡ€ΠΈ этом ΠΎΠ½ ΠΏΠΎ-ΠΏΡ€Π΅ΠΆΠ½Π΅ΠΌΡƒ ΠΏΠΎΠ»ΡƒΡ‡Π°Π» ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Π΅ сообщСния ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹, Ρ‚ΠΎ ΠΏΡ€ΠΈΡˆΠ»ΠΎΡΡŒ Π±Ρ‹ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ ΠΏΡ€Π΅Π΄ΡƒΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΡƒ Π²Π²ΠΎΠ΄Π° Π΄Π°Π½Π½Ρ‹Ρ… Π² ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΌ состоянии — Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π° «Π² ΡΠ»Π΅ΠΏΡƒΡŽ» вряд-Π»ΠΈ Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΠ΄ΠΎΠ±Π½Π°. А, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π² ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΌ состоянии ΠΎΠ½ Ρ‚СряСт фокус Π²Π²ΠΎΠ΄Π°, Ρ‚ΠΎ Π²ΠΌΠ΅ΡΡ‚ΠΎ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Ρ… сообщСний ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ систСмныС, Ρ‡Ρ‚ΠΎ ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚ Π½Π΅ΠΆΠ΅Π»Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ эффСкт.

Однако, обрабатывая систСмныС сообщСния, нСльзя ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ клавиша Alt Π±Ρ‹Π»Π° Π½Π°ΠΆΠ°Ρ‚Π° Π·Π°Ρ€Π°Π½Π΅Π΅ — ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ эти сообщСния Π΄Π°ΠΆΠ΅ для ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Ρ… клавиш. Надо ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ Π±ΠΈΡ‚ с Π½ΠΎΠΌΠ΅Ρ€ΠΎΠΌ 1D (Context code) Π² dwKeyData, Ρ‡Ρ‚ΠΎ Π±Ρ‹ ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ Π² Π°ΠΊΡ‚ивности Alt-статуса.

Π—Π΄Π΅ΡΡŒ ΠΆΠ΅ Π½Π°Π΄ΠΎ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π² Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ ΠΎ Windows встрСчаСтся Π΄Π²Π΅ Ρ‚Ρ€Π°ΠΊΡ‚ΠΎΠ²ΠΊΠΈ понятия «Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ»

с ΠΎΠ΄Π½ΠΎΠΉ стороны это ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΠΊΠ½ΠΎ, ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‰Π΅Π΅ сообщСния ΠΎΡ‚ ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹; Π’Π°ΠΊΠΎΠ΅ ΠΎΠΊΠ½ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½ΠΎ.

с Π΄Ρ€ΡƒΠ³ΠΎΠΉ стороны Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠΌ считаСтся всякоС ΠΎΠΊΠ½ΠΎ, Ρ‡ΡŒΠ΅ Π΄ΠΎΡ‡Π΅Ρ€Π½Π΅Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ фокус Π²Π²ΠΎΠ΄Π°. АктивноС ΠΎΠΊΠ½ΠΎ выдСляСтся Ρ†Π²Π΅Ρ‚ΠΎΠΌ Ρ€Π°ΠΌΠΊΠΈ ΠΈ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ°. Π’ ΡΡ‚ΠΎΠΌ случаС Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹Ρ… ΠΎΠΊΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ.

ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ состояния ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… клавиш

Работая с ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€ΠΎΠΉ ΠΈΠ½ΠΎΠ³Π΄Π° приходится ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ состояниС Ρ‚ΠΎΠΉ ΠΈΠ»ΠΈ ΠΈΠ½ΠΎΠΉ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ клавиши. Для этого Windows содСрТит Π΄Π²Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

int GetKeyState (nVkCode);

void GetKeyboardState (lpbKeyStates);

Ѐункция GetKeyState () Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ слово, Ρ…Π°Ρ€Π°ΠΊΡ‚Ρ€ΠΈΠ·ΡƒΡŽΡ‰Π΅Π΅ состояниС Π·Π°Π΄Π°Π½Π½ΠΎΠΉ клавиши. Если ΡΡ‚Π°Ρ€ΡˆΠΈΠΉ Π±ΠΈΡ‚ (маска 0×8000) Ρ€Π°Π²Π΅Π½ 1, клавиша Π½Π°ΠΆΠ°Ρ‚Π°, Ссли 0, Ρ‚ΠΎ ΠΎΡ‚ΠΏΡƒΡ‰Π΅Π½Π°. Младший Π±ΠΈΡ‚ (маска 1) ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ состояниС «ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌΠΎΠΉ» клавиши (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, CapsLock).

Ѐункция GetKeyboardState () заполняСт массив ΠΈΠ· 256 Π±Π°ΠΉΡ‚ состояниями всСх клавиш. Π’ ΠΊΠ°Ρ‡Π΅ΡΡ‚Π²Π΅ индСкса массива ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠΎΠ΄ клавиш. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ Π±Π°ΠΉΡ‚ массива описываСт ΠΎΠ΄Π½Ρƒ ΠΊΠ»Π°Π²ΠΈΡˆΡƒ, Π΅Π³ΠΎ ΡΡ‚Ρ€Π°ΡˆΠΈΠΉ Π±ΠΈΡ‚ (маска 0×80) описываСт состояниС клавиши, младший (маска 1) — состояниС ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌΠΎΠΉ клавиши.

Π’ Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊ ΡΡ‚ΠΈΠΌ функциям Windows содСрТит Π΅Ρ‰Π΅ ΠΎΠ΄Π½Ρƒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ

void SetKeyboardState (lpKeyStates);

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

ΠšΠ°Ρ€Π΅Ρ‚ΠΊΠ°

Говоря ΠΎ ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Π΅ ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ввСсти Π΅Ρ‰Π΅ ΠΎΠ΄Π½ΠΎ понятиС — ΠΊΠ°Ρ€Π΅Ρ‚ΠΊΠ° (caret). Π”Π΅Π»ΠΎ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Windows ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Π΄Π²Π° ΡƒΠΊΠ°Π·ΡƒΡŽΡ‰ΠΈΡ… элСмСнта — курсор (cursor), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΌΡ‹ΡˆΠΈ, ΠΈ ΠΊΠ°Ρ€Π΅Ρ‚ΠΊΠ°, которая ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ мСсто, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ Π²Π²ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ тСкст. ΠšΠ°Ρ€Π΅Ρ‚ΠΊΠ° управляСтся ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€ΠΎΠΉ.

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

Для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΊΠ°Ρ€Π΅Ρ‚ΠΊΠΎΠΉ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Ρ‹ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ:

void ShowCaret (hWnd);

void HideCaret (hWnd);

Π‘ ΠΈΡ… ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΊΠ°Ρ€Π΅Ρ‚ΠΊΡƒ ΠΈΠ»ΠΈ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π΅Π΅ Π½Π΅Π²ΠΈΠ΄ΠΈΠΌΠΎΠΉ. ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ hWnd ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ NULL, Ссли ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π΅ ΠΎΠΊΠ½ΠΎ. Видимая ΠΊΠ°Ρ€Π΅Ρ‚ΠΊΠ° автоматичСски Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚ ΠΌΠΈΠ³Π°Ρ‚ΡŒ.

void SetCaretPos (nX, nY);

void GetCaretPos (lpPoint);

void SetCaretBlinkTime (mMSec);

UINT GetCaretBlinkTime (void);

Π­Ρ‚ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Π·Π°Π΄Π°Ρ‚ΡŒ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΊΠ°Ρ€Π΅Ρ‚ΠΊΠΈ Π² ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π°Ρ… ΠΎΠΊΠ½Π° ΠΈ ΠΏΠ΅Ρ€ΠΈΠΎΠ΄ мигания ΠΊΠ°Ρ€Π΅Ρ‚ΠΊΠΈ, Π² ΠΌΠΈΠ»Π»ΠΈΡΠ΅ΠΊΡƒΠ½Π΄Π°Ρ…. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΡΠΎΠ±ΡΡ‚Π²Π΅Π½Π½ΡƒΡŽ ΠΊΠ°Ρ€Π΅Ρ‚ΠΊΡƒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

void CreateCaret (hWnd, hBmp, nWidth, nHeight);

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ `hBmp' ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ…Π΅Π½Π΄Π»ΠΎΠΌ Π±ΠΈΡ‚ΠΌΠ°ΠΏΠ°, ΠΏΡ€ΠΈ этом ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ `nWidth' ΠΈ `nHeight' ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΡƒΡŽΡ‚ΡΡ, ΠΈΠ»ΠΈ ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· Π΄Π²ΡƒΡ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ: 0 — сплошная ΠΊΠ°Ρ€Π΅Ρ‚ΠΊΠ°, ΠΈΠ»ΠΈ 1 — «ΡΠ΅Ρ€Π°Ρ» ΠΊΠ°Ρ€Π΅Ρ‚ΠΊΠ°; Π² ΡΡ‚ΠΎΠΌ случаС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ `nWidth' ΠΈ `nHeight' Π·Π°Π΄Π°ΡŽΡ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ ΠΊΠ°Ρ€Π΅Ρ‚ΠΊΠΈ.

void DestroyCaret (void);

Π­Ρ‚Π° функция ΡƒΠ½ΠΈΡ‡Ρ‚ΠΎΠΆΠ°Π΅Ρ‚ Ρ‚Π΅ΠΊΡƒΡ‰ΡƒΡŽ ΠΊΠ°Ρ€Π΅Ρ‚ΠΊΡƒ (Ссли ΠΊΠ°Ρ€Π΅Ρ‚ΠΊΠ° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Π±ΠΈΡ‚ΠΌΠ°ΠΏ, Ρ‚ΠΎ Π±ΠΈΡ‚ΠΌΠ°ΠΏ сохраняСтся).

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