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

Π Π°Π±ΠΎΡ‚Π° с ΠΎΠΊΠ½Π°ΠΌΠΈ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ

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

Π’ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… случаях Π±Ρ‹Π²Π°Π΅Ρ‚ ΡƒΠ΄ΠΎΠ±Π½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΉ «Π·Π°Ρ…Π²Π°Ρ‚» курсора. «Π—Π°Ρ…Π²Π°Ρ‡Π΅Π½Ρ‹ΠΉ» курсор ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Ρ‚ΡŒΡΡ ΠΏΠΎ Π²ΡΠ΅ΠΌΡƒ ΠΎΠΊΠ½Ρƒ, Π½ΠΎ ΡΠΎΠΎΠ±Ρ‰Π΅Π½ΠΈΡ ΠΎΡ‚ ΠΌΡ‹ΡˆΠΈ ΠΏΠΎΡΡ‚ΡƒΠΏΠ°ΡŽΡ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Ρ‚ΠΎ ΠΎΠΊΠ½ΠΎ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π·Π°Ρ…Π²Π°Ρ‚ΠΈΠ»ΠΎ курсор. ΠŸΡ€ΠΈ ΠΎΠΊΠ½ΠΎ Π½Π΅ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ сообщСний WM_NCHITTEST, WM_NCMOUSEMOVE ΠΈ ΠΏΡ€., Π° ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ сообщСния ΠΊΠ°ΠΊ Π±Ρ‹ ΠΎΡ‚ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΉ области ΠΎΠΊΠ½Π°. ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, Π΄Π΅Π»Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΎΠ΅ Π½ΡƒΠΆΠ½ΠΎ Π½Π° Π½Π΅Π±ΠΎΠ»ΡŒΡˆΠΎΠ΅ врСмя, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ для… Π§ΠΈΡ‚Π°Ρ‚ΡŒ Π΅Ρ‰Ρ‘ >

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

БообщСния ΠΌΡ‹ΡˆΠΈ, Ρ€Π°Π±ΠΎΡ‚Π° с ΠΌΡ‹ΡˆΡŒΡŽ

ΠžΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ Π½Π°Π΄ΠΎ Ρ€Π°ΡΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρƒ с ΠΌΡ‹ΡˆΡŒΡŽ. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ, ΠΊΠΎΠ³Π΄Π° курсор ΠΌΡ‹ΡˆΠΈ находится Π½Π°Π΄ ΠΊΠ°ΠΊΠΈΠΌ-Π»ΠΈΠ±ΠΎ ΠΎΠΊΠ½ΠΎΠΌ, это ΠΎΠΊΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ сообщСния ΠΎΡ‚ ΠΌΡ‹ΡˆΠΈ, ΠΏΡ€ΠΈΡ‡Π΅ΠΌ внСшний Π²ΠΈΠ΄ курсора ΠΌΡ‹ΡˆΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ ΠΏΡ€ΠΈ рСгистрации класса ΠΎΠΊΠ½Π° — ΠΏΠΎΠ»Π΅ .hCursor структуры WNDCLASS. Если ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΡ‹ΡˆΡŒ Π² Π½Π°ΡˆΠ΅ΠΌ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ, Ρ‚ΠΎ ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ сообщСния, посылаСмыС ΠΌΡ‹ΡˆΡŒΡŽ.

WM_NCHITTEST 0 y & x

ΠŸΡ€ΠΈ пСрСмСщСния ΠΌΡ‹ΡˆΠΈ Ρ‡Π΅Ρ€Π΅Π· ΠΎΠ±Π»Π°ΡΡ‚ΡŒ, Π·Π°Π½ΡΡ‚ΡƒΡŽ ΠΎΠΊΠ½ΠΎΠΌ, ΠΎΠΊΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ сообщСния WM_NCHITTEST, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Π±Ρ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ мСсторасполоТСниС ΠΌΡ‹ΡˆΠΈ — Π½Π° Ρ€Π°ΠΌΠΊΠ΅, Π² ΡƒΠ³Π»Π°Ρ… Ρ€Π°ΠΌΠΊΠΈ, Π½Π° Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ΅, Π²ΠΎ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΉ области ΠΈ ΠΏΡ€. Π­Ρ‚ΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ ΠΏΡ€ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ Π΄Π°Π½Π½ΠΎΠ³ΠΎ сообщСния ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹ΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Ρ…Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€ΠΈΠ·ΡƒΠ΅Ρ‚ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ курсора ΠΌΡ‹ΡˆΠΈ. НапримСр HTCLIENT ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ курсор находится Π½Π°Π΄ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΉ ΠΎΠ±Π»Π°ΡΡ‚ΡŒΡŽ ΠΎΠΊΠ½Π°, HTTOPLEFT — Π½Π°Π΄ Π²Π΅Ρ€Ρ…Π½ΠΈΠΌ Π»Π΅Π²Ρ‹ΠΌ ΡƒΠ³ΠΎΠ»ΠΊΠΎΠΌ Ρ€Π°ΠΌΠΊΠΈ ΠΎΠΊΠ½Π°, Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Ρ‹ ΠΈ ΠΏΡ€. ΠŸΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ курсора ΡƒΠΊΠ°Π·Π°Π½ΠΎ Π² ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π°Ρ… экрана.

WM_NCMOUSEMOVE wHitTest y & x

Если WM_NCHITTEST опрСдСляСт, Ρ‡Ρ‚ΠΎ курсор находится Π½Π°Π΄ внСшнСй ΠΎΠ±Π»Π°ΡΡ‚ΡŒΡŽ ΠΎΠΊΠ½Π°, Ρ‚ΠΎ ΠΎΠΊΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ сообщСния WM_NCMOUSEMOVE; Y ΠΈ X ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ Π·Π°Π΄Π°Π½Ρ‹ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ экрана.

WM_NCLBUTTONDOWN wHitTest y & x

WM_NCLBUTTONUP wHitTest y & x

WM_NCRBUTTONDOWN wHitTest y & x

WM_NCRBUTTONUP wHitTest y & x

WM_NCMBUTTONDOWN wHitTest y & x

WM_NCMBUTTONUP wHitTest y & x

WM_NCLBUTTONDBLCLK wHitTest y & x

WM_NCRBUTTONDBLCLK wHitTest y & x

WM_NCMBUTTONDBLCLK wHitTest y & x

Π­Ρ‚ΠΈ сообщСния ΠΏΠΎΡΡ‹Π»Π°ΡŽΡ‚ΡΡ ΠΏΡ€ΠΈ Π½Π°ΠΆΠ°Ρ‚ΠΈΠΈ/отпускании ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… ΠΊΠ½ΠΎΠΏΠΎΠΊ ΠΌΡ‹ΡˆΠΈ Π½Π°Π΄ внСшнСй ΠΎΠ±Π»Π°ΡΡ‚ΡŒΡŽ ΠΎΠΊΠ½Π°; ПолоТСниС курсора ΡƒΠΊΠ°Π·Π°Π½ΠΎ Π² ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π°Ρ… экрана, wParam ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π·ΠΎΠ½Ρƒ, Π½Π°Π΄ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»ΠΎ Π΄Π°Π½Π½ΠΎΠ΅ событиС.

WM_MOUSEMOVE nKeys y & x

Когда ΠΌΡ‹ΡˆΡŒ пСрСмСщаСтся Π²ΠΎ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΉ области ΠΎΠΊΠ½Π° (WM_NCHITTEST Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ΠΈΠ»ΠΎ HTCLIENT) Ρ‚ΠΎ ΠΎΠΊΠΎΠ½Π½Π°Ρ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ ΠΏΠΎΡΡ‚ΡƒΠΏΠ°ΡŽΡ‰ΠΈΠ΅ сообщСния WM_MOUSEMOVE, ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠ΅ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΌΡ‹ΡˆΠΈ Π² ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π°Ρ… ΠΎΠΊΠ½Π° ΠΈ ΡΠΎΡΡ‚ояниС Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… клавиш (ctrl, shift ΠΈ Ρ‚Ρ€ΠΈ ΠΊΠ½ΠΎΠΏΠΊΠΈ ΠΌΡ‹ΡˆΠΈ).

WM_LBUTTONDOWN nKeys y & x

WM_LBUTTONUP nKeys y & x

WM_RBUTTONDOWN nKeys y & x

WM_RBUTTONUP nKeys y & x

WM_MBUTTONDOWN nKeys y & x

WM_MBUTTONUP nKeys y & x

Π­Ρ‚ΠΈ сообщСния ΠΏΠΎΡΡ‹Π»Π°ΡŽΡ‚ΡΡ ΠΎΠΊΠ½Ρƒ, Ссли Π’Ρ‹ Π½Π°ΠΆΠ°Π»ΠΈ ΠΎΠ΄Π½Ρƒ ΠΈΠ· ΠΊΠ½ΠΎΠΏΠΎΠΊ ΠΌΡ‹ΡˆΠΈ, ΠΊΠΎΠ³Π΄Π° курсор находится Π½Π°Π΄ ΠΎΠΊΠ½ΠΎΠΌ. ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ nKeys ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ состояниС Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… клавиш.

WM_LBUTTONDBLCLK nKeys y&x

WM_RBUTTONDBLCLK nKeys y&x

WM_MBUTTONDBLCLK nKeys y&x

Π­Ρ‚ΠΎ сообщСния ΠΎ Π΄Π²ΡƒΡ… быстрых наТатиях Π½Π° ΠΎΠ΄Π½Ρƒ ΠΊΠ½ΠΎΠΏΠΊΡƒ ΠΌΡ‹ΡˆΠΈ. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ ΠΎΠΊΠ½ΠΎ ΠΈΡ… Π½Π΅ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚. Если Π’Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ эти сообщСния, Ρ‚ΠΎ Π’Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΡ€ΠΈ рСгистрации класса ΠΎΠΊΠ½Π° ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ ΡΡ‚ΠΈΠ»ΡŒ CS_DBLCLKS.

ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ Π½Π°Π΄ΠΎ ΠΈΠΌΠ΅Ρ‚ΡŒ Π² Π²ΠΈΠ΄Ρƒ, Ρ‡Ρ‚ΠΎ ΠΏΠ΅Ρ€Π΅Π΄ сообщСниСм ΠΎ Π΄Π²ΠΎΠΉΠ½ΠΎΠΌ Π½Π°ΠΆΠ°Ρ‚ΠΈΠΈ Π½Π° ΠΊΠ½ΠΎΠΏΠΊΡƒ Π’Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ сообщСниС ΠΎ ΠΏΠ΅Ρ€Π²ΠΎΠΌ (ΠΎΠ΄ΠΈΠ½ΠΎΡ‡Π½ΠΎΠΌ) Π½Π°ΠΆΠ°Ρ‚ΠΈΠΈ. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π½Π°Π΄ΠΎ Ρ‚Π°ΠΊ Ρ€Π°ΡΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ дСйствия ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΎΠ΄ΠΈΠ½ΠΎΡ‡Π½Ρ‹ΠΌΠΈ ΠΈ Π΄Π²ΠΎΠΉΠ½Ρ‹ΠΌΠΈ наТатиями, Ρ‡Ρ‚ΠΎ Π±Ρ‹ ΠΎΠ½ΠΈ Π½Π΅ ΠΏΡ€ΠΎΡ‚ΠΈΠ²ΠΎΡ€Π΅Ρ‡ΠΈΠ»ΠΈ ΠΎΠ΄Π½ΠΎ Π΄Ρ€ΡƒΠ³ΠΎΠΌΡƒ. Π’ ΡΠ°ΠΌΠΎΠΌ ΡƒΠ΄Π°Ρ‡Π½ΠΎΠΌ случаС Π΄Π²ΠΎΠΉΠ½ΠΎΠ΅ Π½Π°ΠΆΠ°Ρ‚ΠΈΠ΅ выполняСт Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с ΠΎΠ΄ΠΈΠ½ΠΎΡ‡Π½Ρ‹ΠΌ.

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π»Π΅Π³ΠΊΠΎ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ внСшний Π²ΠΈΠ΄ курсора, измСняя Π΅Π³ΠΎ Ρ…Π΅Π½Π΄Π» Π² ΡΡ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π΅ класса ΠΎΠΊΠ½Π°:

UINT SetClassWord (hWnd, GCW_HCURSOR, hNewCursor);

ΠΎΠ΄Π½Π°ΠΊΠΎ ΠΏΡ€ΠΈ этом измСняСтся курсор для всСх ΠΎΠΊΠΎΠ½, ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ‰ΠΈΡ… ΠΊ ΡΡ‚ΠΎΠΌΡƒ классу. Если Π’Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ этот ΠΌΠ΅Ρ‚ΠΎΠ΄, Ρ‚ΠΎ Π’Π°ΠΌ Π½Π°Π΄ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ активности ΠΎΠΊΠ½Π° — ΠΏΡ€ΠΈ Π΄Π΅Π°ΠΊΡ‚ΠΈΠ²Π°Ρ†ΠΈΠΈ Π’Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π²ΠΎΡΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΏΡ€Π΅ΠΆΠ½ΠΈΠΉ курсор, ΠΏΡ€ΠΈ Π°ΠΊΡ‚ΠΈΠ²Π°Ρ†ΠΈΠΈ — ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌΡ‹ΠΉ. Для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Π±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Ρ…Π΅Π½Π΄Π» курсора ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌΠΈ функциями:

HCURSOR LoadCursor (hInstance, lpszCursor);

HCURSOR CreateCursor (

hInstance, xHotSpot, yHotSpot, nWidth, nHeight, lpvAND, lpvXOR

);

BOOL DestroyCursor (hCursor);

Ѐункция LoadCursor Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅Ρ‚ стандартный курсор ΠΈΠ»ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ Π’Π°ΠΌΠΈ, CreateCursor создаСт Π½ΠΎΠ²Ρ‹ΠΉ курсор с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π΄Π²ΡƒΡ… масок — lpvAND ΠΈ lpvXOR, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅Ρ…Ρ†Π²Π΅Ρ‚Π½Ρ‹ΠΉ курсор — Ρ‡Π΅Ρ€Π½Ρ‹ΠΉ, Π±Π΅Π»Ρ‹ΠΉ, Ρ†Π²Π΅Ρ‚ Ρ„ΠΎΠ½Π°, ΠΈΠ½Π²Π΅Ρ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Ρ„ΠΎΠ½. Π’ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠΈ этой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π΅ΡΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ «ΠΏΠΎΠ΄Π²ΠΎΠ΄Π½Ρ‹ΠΉ камСнь» — ΡˆΠΈΡ€ΠΈΠ½Π° ΠΈ Π²Ρ‹ΡΠΎΡ‚Π° создаваСмого курсора Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡΠΎΠ²ΠΏΠ°Π΄Π°Ρ‚ΡŒ с Ρ‚рСбованиями Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π°. Для этого ΠΈΡ… Π½Π°Π΄ΠΎ ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΡƒΠ·Π½Π°Ρ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

int GetSystemMetrics (SM_CXCURSOR);

int GetSystemMetrics (SM_CYCURSOR);

Ѐункция DestroyCursor ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π° для уничтоТСния курсор, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π’Ρ‹ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΠ»ΠΈ ΠΈΠ· ΡΠΎΠ±ΡΡ‚Π²Π΅Π½Π½Ρ‹Ρ… рСсурсов ΠΈΠ»ΠΈ создали с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ CreateCursor.

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π»Π΅Π³ΠΊΠΎ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΈΠ»ΠΈ ΡΠΏΡ€ΡΡ‚Π°Ρ‚ΡŒ курсор с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

int ShowCursor (bShow);

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΈΠ»ΠΈ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ курсора с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

void SetCursorPos (nX, nY);

void GetCursorPos (lpPoint);

Π’Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΡ‚ΡŒ Π·ΠΎΠ½Ρƒ пСрСмСщСния курсора с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

void ClipCursor (lpRect);

Π•Ρ‰Π΅ ΠΎΠ΄Π½Π° функция,

HCURSOR SetCursor (hCursor);

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

Π’ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… случаях Π±Ρ‹Π²Π°Π΅Ρ‚ ΡƒΠ΄ΠΎΠ±Π½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΉ «Π·Π°Ρ…Π²Π°Ρ‚» курсора. «Π—Π°Ρ…Π²Π°Ρ‡Π΅Π½Ρ‹ΠΉ» курсор ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Ρ‚ΡŒΡΡ ΠΏΠΎ Π²ΡΠ΅ΠΌΡƒ ΠΎΠΊΠ½Ρƒ, Π½ΠΎ ΡΠΎΠΎΠ±Ρ‰Π΅Π½ΠΈΡ ΠΎΡ‚ ΠΌΡ‹ΡˆΠΈ ΠΏΠΎΡΡ‚ΡƒΠΏΠ°ΡŽΡ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Ρ‚ΠΎ ΠΎΠΊΠ½ΠΎ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π·Π°Ρ…Π²Π°Ρ‚ΠΈΠ»ΠΎ курсор. ΠŸΡ€ΠΈ ΠΎΠΊΠ½ΠΎ Π½Π΅ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ сообщСний WM_NCHITTEST, WM_NCMOUSEMOVE ΠΈ ΠΏΡ€., Π° ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ сообщСния ΠΊΠ°ΠΊ Π±Ρ‹ ΠΎΡ‚ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΉ области ΠΎΠΊΠ½Π°. ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, Π΄Π΅Π»Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΎΠ΅ Π½ΡƒΠΆΠ½ΠΎ Π½Π° Π½Π΅Π±ΠΎΠ»ΡŒΡˆΠΎΠ΅ врСмя, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ° «ΠŸΠ΅Ρ€Π΅Π½Π΅ΡΡ‚ΠΈ ΠΈ ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚ΡŒ» (Drag And Drop). Волько ΠΎΠ΄Π½ΠΎ ΠΎΠΊΠ½ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°Ρ…Π²Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ курсор Π² Π΄Π°Π½Π½ΠΎΠ΅ врСмя.

Для «Π·Π°Ρ…ватывания» курсора ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Ρ‹ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ:

HWND SetCapture (hWnd);

void ReleaseCapture (void);

Ѐункция SetCapture Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Ρ…Π΅Π½Π΄Π» ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅Π³ΠΎ ΠΎΠΊΠ½Π°, использовавшСго «Π·Π°Ρ…Π²Π°Ρ‚» Π² ΡΡ‚ΠΎ врСмя, Π»ΠΈΠ±ΠΎ NULL.

Разновидности ΠΎΠΊΠΎΠ½: Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠ΅, Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠ΅, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ (owned)

Пока Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Π»ΠΈ прилоТСния, ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠ΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½ΠΎ ΠΎΠΊΠ½ΠΎ — Π³Π»Π°Π²Π½ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ прилоТСния. БСйчас ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±ΡƒΠ΄Π΅ΠΌ Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ ΠΌΠ΅ΠΆΠ΄Ρƒ основными Ρ‚ΠΈΠΏΠ°ΠΌΠΈ ΠΎΠΊΠΎΠ½ ΠΈ ΠΈΡ… Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΠΈΠΈ Π΄Ρ€ΡƒΠ³ с Π΄Ρ€ΡƒΠ³ΠΎΠΌ.

Окно создаСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

HWND CreateWindow (

lpszClassName, lpszTitle, dwStyle,

nX, nY, nWidth, nHeight,

hwndParent, hMenu, hInstance, lpvParam

);

Π­Ρ‚Ρƒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΌΡ‹ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Π»ΠΈ Ρ€Π°Π½ΡŒΡˆΠ΅, поэтому ΠΌΡ‹ Π½Π΅ Π±ΡƒΠ΄Π΅ΠΌ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ ΠΎΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒΡΡ Π½Π° Π΅Π΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°Ρ…. БСйчас ΠΌΡ‹ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΠΌ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ Π²ΠΈΠ΄Ρ‹ ΠΎΠΊΠΎΠ½ ΠΈ ΠΈΡ… Π²Π·Π°ΠΈΠΌΠΎΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡ.

Π‘Π°ΠΌΡ‹ΠΉ ΠΎΠ±Ρ‰ΠΈΠΉ Π²ΠΈΠ΄ ΠΎΠΊΠ½Π° — ΠΏΠ΅Ρ€Π΅ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰ΠΈΠ΅ΡΡ (overlapped). Π’Π°ΠΊΠΎΠ΅ ΠΎΠΊΠ½ΠΎ создаСтся, Ссли ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ ΡΡ‚ΠΈΠ»ΡŒ WS_OVERLAPPED ΠΈΠ»ΠΈ WS_OVERLAPPEDWINDOW ΠΏΡ€ΠΈ создании ΠΎΠΊΠ½Π°. Π­Ρ‚ΠΈ ΠΎΠΊΠ½Π° всСгда ΠΈΠΌΠ΅ΡŽΡ‚ Ρ€Π°ΠΌΠΊΡƒ (border), Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ (title-bar) ΠΈ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΡŽΡŽ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ. Окна этого стиля ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ Π² ΠΊΠ°Ρ‡Π΅ΡΡ‚Π²Π΅ Π³Π»Π°Π²Π½Ρ‹Ρ… ΠΎΠΊΠΎΠ½ прилоТСния, ΠΏΡ€ΠΈ этом Π½Π°ΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ рСкомСндуСтся ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡΡ‚ΠΈΠ»ΡŒ WS_OVERLAPPEDWINDOW, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ описываСт стандартноС Π³Π»Π°Π²Π½ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ прилоТСния с ΠΊΠ½ΠΎΠΏΠΊΠ°ΠΌΠΈ систСмного мСню, максимизации ΠΈ ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ.

Близкая ΠΊ ΠΏΠ΅Ρ€Π΅ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΌΡΡ катСгория ΠΎΠΊΠΎΠ½ — Π²ΡΠΏΠ»Ρ‹Π²Π°ΡŽΡ‰ΠΈΠ΅ (popup) ΠΎΠΊΠ½Π°, задаСтся ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ΠΌ стиля WS_POPUP ΠΏΡ€ΠΈ создании ΠΎΠΊΠ½Π°. Π’ΡΠΏΠ»Ρ‹Π²Π°ΡŽΡ‰ΠΈΠ΅ ΠΎΠΊΠ½Π° ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ ΠΎΡ‚ ΠΏΠ΅Ρ€Π΅ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰ΠΈΡ…ся Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠ³ΡƒΡ‚ Π½Π΅ ΠΈΠΌΠ΅Ρ‚ΡŒ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° (title bar). Π’ ΠΎΡΡ‚Π°Π»ΡŒΠ½ΠΎΠΌ ΠΈΡ… ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ.

Если ΠΏΡ€ΠΈ создании ΠΏΠ΅Ρ€Π΅ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰ΠΈΡ…ΡΡ ΠΈΠ»ΠΈ Π²ΡΠΏΠ»Ρ‹Π²Π°ΡŽΡ‰ΠΈΡ… ΠΎΠΊΠΎΠ½ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Ρ…Π΅Π½Π΄Π» ΠΎΠΊΠ½Π° — родитСля, Ρ‚ΠΎ Ρ‚Π°ΠΊΠΈΠ΅ ΠΎΠΊΠ½Π° окаТутся Π² ΡΠΏΠ΅Ρ†ΠΈΡ„ичСских ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡΡ…, Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹Ρ… ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡΠΌΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ (owner) ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠ³ΠΎ (owned) ΠΎΠΊΠΎΠ½.

Главная идСя Ρ‚Π°ΠΊΠΈΡ… ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠΉ связана с ΡΠΎΠ²ΠΌΠ΅ΡΡ‚Π½Ρ‹ΠΌ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π² Z-Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠΈ: ΠΎΠΊΠ½ΠΎ — ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ всСгда находится нСпосрСдствСнно ΠΏΠΎΠ΄ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΌ ΠΎΠΊΠ½ΠΎΠΌ, ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· Π½ΠΈΡ… Π² Z-Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠΈ, Π΄Ρ€ΡƒΠ³ΠΎΠ΅ пСрСмСщаСтся вслСд Π·Π° Π½ΠΈΠΌ. ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ ΠΎΠΊΠΎΠ½ Π² X ΠΈ Y направлСниях Π½Π΅ Π²Π·Π°ΠΈΠΌΠΎΡΠ²ΡΠ·Π°Π½ΠΎ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ ΠΎΠΊΠ½Π° ΠΌΠΎΠ³ΡƒΡ‚ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Π²Π½Π΅ ΠΎΠΊΠ½Π°_ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Ссли ΠΎΠΊΠ½ΠΎ_ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ становится Π½Π΅Π²ΠΈΠ΄ΠΈΠΌΡ‹ΠΌ ΠΈΠ»ΠΈ минимизируСтся, Ρ‚ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ ΠΈΠΌ ΠΎΠΊΠ½Π° становятся Π½Π΅Π²ΠΈΠ΄ΠΈΠΌΡ‹ΠΌΠΈ. ΠŸΡ€ΠΈ ΡƒΠ½ΠΈΡ‡Ρ‚ΠΎΠΆΠ΅Π½ΠΈΠΈ ΠΎΠΊΠ½Π°_ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ всС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ ΠΎΠΊΠ½Π° автоматичСски ΡƒΠ½ΠΈΡ‡Ρ‚ΠΎΠΆΠ°ΡŽΡ‚ΡΡ.

Π’ Windows сущСствуСт ΠΎΠ΄Π½Π° ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΡŒ — хотя ΠΏΡ€ΠΈ создании ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠ³ΠΎ ΠΎΠΊΠ½Π° ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚ΡΡ Ρ…Π΅Π½Π΄Π» «Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ» ΠΎΠΊΠ½Π°, Π½ΠΎ ΠΏΡ€ΠΈ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Ρ…Π΅Π½Π΄Π» Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ ΠΎΠΊΠ½Π° (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ GetParent), возвращаСтся NULL.

Π•Ρ‰Π΅ ΠΎΠ΄Π½Π° большая катСгория ΠΎΠΊΠΎΠ½ — Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠ΅ (child) — ΠΎΠΊΠ½Π°, ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ ΠΏΡ€ΠΈ ΡƒΠΊΠ°Π·Π°Π½ΠΈΠΈ стиля WS_CHILD ΠΈ Ρ…Π΅Π½Π΄Π»Π° Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ ΠΎΠΊΠ½Π° (parent). Π”ΠΎΡ‡Π΅Ρ€Π½ΠΈΠ΅ ΠΎΠΊΠ½Π° ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΈΠΌΠ΅ΡŽΡ‚ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΡŽΡŽ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ, Π½ΠΎ ΠΌΠΎΠ³ΡƒΡ‚ Π½Π΅ ΠΈΠΌΠ΅Ρ‚ΡŒ Ρ€Π°ΠΌΠΊΠΈ ΠΈ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ°; Ρƒ Π½ΠΈΡ… Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ мСню — этот ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ CreateWindow Π·Π°Π΄Π°Π΅Ρ‚ Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Π΄ΠΎΡ‡Π΅Ρ€Π½Π΅Π³ΠΎ ΠΎΠΊΠ½Π°.

ΠžΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡ Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΡ… ΠΈ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΡ… ΠΎΠΊΠΎΠ½ Π½Π°ΠΏΠΎΠΌΠΈΠ½Π°ΡŽΡ‚ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠ³ΠΎ, Π½ΠΎ ΠΈΠΌΠ΅ΡŽΡ‚ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ отличия:

Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠ΅ ΠΎΠΊΠ½Π° ΠΌΠΎΠ³ΡƒΡ‚ Ρ€Π°Π·ΠΌΠ΅Ρ‰Π°Ρ‚ΡŒΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²ΠΎ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΉ области Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ ΠΎΠΊΠ½Π°.

ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΡ… ΠΎΠΊΠΎΠ½ Π·Π°Π΄Π°ΡŽΡ‚ΡΠ΅ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π²Π΅Ρ€Ρ…Π½Π΅Π³ΠΎ-Π»Π΅Π²ΠΎΠ³ΠΎ ΡƒΠ³Π»Π° Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΉ области Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ ΠΎΠΊΠ½Π°, Π° Π½Π΅ ΡΠΊΡ€Π°Π½Π°.

Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠ΅ ΠΎΠΊΠ½Π°, ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠ΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ родитСля, Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ «ΡΠ΅ΡΡ‚ринскими» (sibling) ΠΎΠΊΠ½Π°ΠΌΠΈ. ΠŸΠ΅Ρ€Π΅ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰ΠΈΠ΅ Π΄Ρ€ΡƒΠ³ Π΄Ρ€ΡƒΠ³Π° сСстринскиС ΠΎΠΊΠ½Π° ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡ‚ΡŒ Π²Ρ‹Π²ΠΎΠ΄ Π² ΠΎΠ±Π»Π°ΡΡ‚ΠΈ ΠΏΠ΅Ρ€Π΅ΠΊΡ€Ρ‹Π²Π°Π΅ΠΌΠΎΠ³ΠΎ ΠΎΠΊΠ½Π°. Π§Ρ‚ΠΎ Π±Ρ‹ Ρ‡Π΅Ρ‚ΠΊΠΎ Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚ΡŒ области сСстринских ΠΎΠΊΠΎΠ½ Π’Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ WS_CLIPSIBLINGS ΠΏΡ€ΠΈ создании Π΄ΠΎΡ‡Π΅Ρ€Π½Π΅Π³ΠΎ ΠΎΠΊΠ½Π°.

Ссли для Π΄ΠΎΡ‡Π΅Ρ€Π½Π΅Π³ΠΎ ΠΎΠΊΠ½Π° Π·Π°ΠΏΡ€Π΅Ρ‚ΠΈΡ‚ΡŒ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ фокуса Π²Π²ΠΎΠ΄Π° (ΠΎΡ‚ ΠΌΡ‹ΡˆΠΈ ΠΈ ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹), Ρ‚ΠΎ Π²ΡΠ΅ соощСния Π²Π²ΠΎΠ΄Π° Π±ΡƒΠ΄ΡƒΡ‚ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½Ρ‹ ΠΎΠΊΠ½Ρƒ-Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŽ.

Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠ΅ ΠΎΠΊΠ½ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡ‚ΡŒ Π²Ρ‹Π²ΠΎΠ΄ ΠΏΠΎΠ²Π΅Ρ€Ρ… Π΄ΠΎΡ‡Π΅Ρ€Π½Π΅Π³ΠΎ ΠΎΠΊΠ½Π°.

Если Π’Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ этого, Ρ‚ΠΎ Π’Π°ΠΌ Π½Π°Π΄ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ ΡΡ‚ΠΈΠ»ΡŒ WS_CLIPCHILDREN ΠΏΡ€ΠΈ создании ΠΎΠΊΠ½Π°_родитСля.

Зная Ρ…Π΅Π½Π΄Π» Π΄ΠΎΡ‡Π΅Ρ€Π½Π΅Π³ΠΎ ΠΎΠΊΠ½Π° ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ·Π½Π°Ρ‚ΡŒ Ρ…Π΅Π½Π΄Π» родитСля, Ссли Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· Π΄Π²ΡƒΡ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ:

HWND GetParent (hwndChild);

HWND GetWindowWord (hwndChild, GWW_PARENT);

Рассмотрим Π΅Ρ‰Π΅ нСсколько стилСй, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ Π΄Π΅ΠΊΠ»Π°Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈ создании ΠΎΠΊΠ½Π°. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ созданноС ΠΎΠΊΠ½ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ сообщСния ΠΎΡ‚ ΠΌΡ‹ΡˆΠΈ ΠΈ ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ ΡΡ‚ΠΈΠ»ΡŒ WS_DISABLED для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Π±Ρ‹ это Π·Π°ΠΏΡ€Π΅Ρ‚ΠΈΡ‚ΡŒ. Π’ΠΎ Π²Ρ€Π΅ΠΌΡ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π·Π°ΠΏΡ€Π΅Ρ‰Π°Ρ‚ΡŒ ΠΈΠ»ΠΈ Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Ρ‚ΡŒ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ сообщСний ΠΎΡ‚ ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

BOOL EnableWindow (hWnd, bEnable);

Π’Ρ‚ΠΎΡ€ΠΎΠΉ ΡΡ‚ΠΈΠ»ΡŒ, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π°Π΄ΠΎ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ — WS_VISIBLE — Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ создаСтся Π²ΠΈΠ΄ΠΈΠΌΠΎΠ΅ ΠΎΠΊΠ½ΠΎ. Если Π΅Π³ΠΎ Π½Π΅ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ, Ρ‚ΠΎ ΡΠΎΠ·Π΄Π°Π½Π½ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π½Π΅Π²ΠΈΠ΄ΠΈΠΌΡ‹ΠΌ. ПозТС ΠΎΠΊΠ½ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ Π²ΠΈΠ΄ΠΈΠΌΡ‹ΠΌ ΠΈΠ»ΠΈ Π½Π΅Π²ΠΈΠ΄ΠΈΠΌΡ‹ΠΌ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ:

BOOL ShowWindow (hWnd, SW_HIDE);

BOOL ShowWindow (hWnd, SW_SHOW);

Окна часто ΡΠΎΠ·Π΄Π°ΡŽΡ‚ Π½Π΅Π²ΠΈΠ΄ΠΈΠΌΡ‹ΠΌΠΈ, Ссли ΠΏΡ€ΠΈ ΠΈΡ… ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ (ΠΈΠ»ΠΈ сразу послС этого) приходится ΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΈΡ… Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΈΠ»ΠΈ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. ΠŸΡ€ΠΈ этом всС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ Π½Π°Π΄ Π½Π΅Π²ΠΈΠ΄ΠΈΠΌΡ‹ΠΌ ΠΎΠΊΠ½ΠΎΠΌ ΠΈ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Π΅Π³ΠΎ ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠΌ состоянии. Π­Ρ‚ΠΎ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΡƒΠ»ΡƒΡ‡ΡˆΠ°Π΅Ρ‚ внСшний Π²ΠΈΠ΄ прилоТСния, Π½ΠΎ ΠΈ ΡƒΡΠΊΠΎΡ€ΡΠ΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅.

Π‘Ρ‚ΠΈΠ»ΡŒ ΠΎΠΊΠ½Π° влияСт, Π² ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΌ, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π° Π΅Π³ΠΎ внСшний Π²ΠΈΠ΄, Π° ΡΠ²ΠΎΠΉΡΡ‚Π²Π° ΠΎΠΊΠ½Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ΡΡ ΠΎΠΊΠΎΠ½Π½ΠΎΠΉ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€ΠΎΠΉ. Оконная ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° описываСтся ΠΏΡ€ΠΈ рСгистрации класса ΠΎΠΊΠΎΠ½, Π° ΠΊΠΎΠ³Π΄Π° создаСтся Π½ΠΎΠ²ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ имя класса, ΠΊ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ это ΠΎΠΊΠ½ΠΎ ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈΡ‚. Π”ΠΎ ΡΠΈΡ… ΠΏΠΎΡ€ ΠΌΡ‹ ΡΠ°ΠΌΠΈ описывали ΠΈ Ρ€Π΅Π³ΠΈΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Π»ΠΈ класс ΠΎΠΊΠΎΠ½ ΠΈ Π·Π°Ρ‚Π΅ΠΌ создавали ΠΎΠΊΠ½ΠΎ, ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ‰Π΅Π΅ этому классу.

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

BOOL UnregisterClass (lpszClassName, hInstance);

ΠšΡ€ΠΎΠΌΠ΅ Ρ‚Π΅Ρ… классов ΠΎΠΊΠΎΠ½, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±Ρ‹Π»ΠΈ зарСгистрированы прилоТСниями, Windows автоматичСски создаСт нСсколько стандартных классов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для создания Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΡ… ΠΎΠΊΠΎΠ½.

Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½Ρ‹Π΅ классы Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΡ… ΠΎΠΊΠΎΠ½

БСйчас ΠΌΡ‹ Ρ€Π°ΡΡΠΌΠΎΡ‚Ρ€ΠΈΠΌ нСсколько классов Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΡ… ΠΎΠΊΠΎΠ½, прСдоставляСмых Windows. Окна этих классов ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ «ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‰ΠΈΠ΅ элСмСнты» — ΠΊΠ½ΠΎΠΏΠΊΠΈ, полосы ΠΏΡ€ΠΎΠΊΡ€ΡƒΡ‚ΠΊΠΈ (scroll bars), ΠΏΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠΈΠ΅ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Ρ‹ для Π²Π²ΠΎΠ΄Π° тСкста ΠΈ ΠΏΡ€.

ΠžΠ±Ρ‹Ρ‡Π½ΠΎ стандартныС ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‰ΠΈΠ΅ элСмСнты ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ со ΡΡ‚ΠΈΠ»tΠ΅ΠΌ WS_VISIBLE ΠΈ, ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, — WS_CHILD. Часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΡΡ‚ΠΈΠ»ΡŒ WS_BORDER. Для ΠΌΠ½ΠΎΠ³ΠΈΡ… классов прСдусмотрСн ΡΡ‚ΠΈΠ»ΡŒ, ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ, Ρ‡Ρ‚ΠΎ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠ΅ ΠΎΠΊΠ½ΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΈΠ·Π²Π΅Ρ‰Π°Ρ‚ΡŒΡΡ ΠΎ Ρ‚Π°ΠΊΠΈΡ… событиях Π΄ΠΎΡ‡Π΅Ρ€Π½Π΅Π³ΠΎ ΠΎΠΊΠ½Π°, ΠΊΠ°ΠΊ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΠΈ ΠΏΠΎΡ‚Сря фокуса Π²Π²ΠΎΠ΄Π°. НазваниС этого стиля оканчиваСтся Π½Π° _NOTIFY, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, LBS_NOTIFY.

Π”ΠΎΡ‡Π΅Ρ€Π½ΠΈΠ΅ ΠΎΠΊΠ½Π°, ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ‰ΠΈΠ΅ ΠΊ ΡΡ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½Ρ‹ΠΌ классам, ΠΎΠ±ΠΌΠ΅Π½ΠΈΠ²Π°ΡŽΡ‚ΡΡ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ с Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠΌ ΠΎΠΊΠ½ΠΎΠΌ ΠΏΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌ:

Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠ΅ ΠΎΠΊΠ½ΠΎ ΠΏΡ€ΠΈ нСобходимости посылаСт Π΄ΠΎΡ‡Π΅Π½Π΅ΠΌΡƒ ΠΎΠΊΠ½Ρƒ сообщСния с Π½ΠΎΠΌΠ΅Ρ€Π°ΠΌΠΈ, Ρ€Π°Π²Π½Ρ‹ΠΌΠΈ ΠΈΠ»ΠΈ большими WM_USER. Для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ стандартного класса Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΡ… ΠΎΠΊΠΎΠ½ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ свои сообщСния, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ½ΠΈ Ρ€Π΅Π°Π³ΠΈΡ€ΡƒΡŽΡ‚. МногиС ΠΈΠ· Ρ‚Π°ΠΊΠΈΡ… сообщСний Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚, поэтому часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ SendMessage вмСсто PostMessage.

Π΄ΠΎΡ‡Π΅Ρ€Π½Π΅Π΅ ΠΎΠΊΠ½ΠΎ посылаСт Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠΌΡƒ ΠΎΠΊΠ½Ρƒ сообщСния WM_COMMAND, со ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ²:

wPar — ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Π΄ΠΎΡ‡Π΅Ρ€Π½Π΅Π³ΠΎ ΠΎΠΊΠ½Π°

LOWORD (lPar) — Ρ…Π΅Π½Π΄Π» Π΄ΠΎΡ‡Π΅Ρ€Π½Π΅Π³ΠΎ ΠΎΠΊΠ½Π°

HIWORD (lPar) — ΠΊΠΎΠ΄ извСщСния ΠΊΠΎΠ΄ извСщСния ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΠ΅Ρ‚ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠ΅ ΠΎΠΊΠ½ΠΎ ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊΠΎΠ΅ событиС ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»ΠΎ с Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠΌ ΠΎΠΊΠ½ΠΎΠΌ. ΠŸΠΎΡΡ‹Π»ΠΊΠ° Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΈΠ·Π²Π΅Ρ‰Π΅Π½ΠΈΠΉ ΠΎΡ‚ Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΡ… ΠΎΠΊΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π·Π°ΠΏΡ€Π΅Ρ‰Π΅Π½Π° — Ссли Π½Π΅ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ ???_NOTIFY ΡΡ‚ΠΈΠ»ΡŒ. Для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ класса Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΡ… ΠΎΠΊΠΎΠ½ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ свои ΠΊΠΎΠ΄Ρ‹ извСщСния.

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

БтатичСскиС элСмСнты

НачнСм рассмотрСниС с ΡΠ°ΠΌΠΎΠ³ΠΎ простого класса — класса статичСских элСмСнтов. К ΡΡ‚Π°Ρ‚ΠΈΡ‡Π΅ΡΠΊΠΈΠΌ элСмСнтам относятся ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠΈ («ΠΏΡƒΡΡ‚Ρ‹Π΅» ΠΈ Π·Π°ΠΊΡ€Π°ΡˆΠ΅Π½Π½Ρ‹Π΅), нСизмСняСмый тСкст ΠΈ ΠΈΠΊΠΎΠ½ΠΊΠΈ, нарисованныС Π² Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠΌ ΠΎΠΊΠ½Π΅. БтатичСскиС ΠΎΠΊΠ½Π° Π½Π΅ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‚ сообщСний ΠΎΡ‚ ΠΌΡ‹ΡˆΠΈ ΠΈ ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹ ΠΈ Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ фокуса Π²Π²ΠΎΠ΄Π°.

Для создания Ρ‚Π°ΠΊΠΎΠ³ΠΎ ΠΎΠΊΠ½Π° ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ имя класса «STATIC», ΠΈ Π·Π°Π΄Π°Ρ‚ΡŒ спСцифичный ΡΡ‚ΠΈΠ»ΡŒ, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‰ΠΈΠΉ внСшний Π²ΠΈΠ΄ этого элСмСнта. Π’Π°ΠΊ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΡΡ‚ΠΈΠ»Π΅ΠΉ:

SS_BLACKRECT — Ρ‡Π΅Ρ€Π½Ρ‹ΠΉ Π·Π°ΠΊΡ€Π°ΡˆΠ΅Π½Π½Ρ‹ΠΉ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ

SS_BLACKFRAME — Ρ‡Π΅Ρ€Π½Ρ‹ΠΉ ΠΊΠΎΠ½Ρ‚ΡƒΡ€ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠ°

SS_GRAYRECT — сСрый Π·Π°ΠΊΡ€Π°ΡˆΠ΅Π½Π½Ρ‹ΠΉ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ

SS_GRAYFRAME — сСрый ΠΊΠΎΠ½Ρ‚ΡƒΡ€ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠ°

SS_WHITERECT — Π±Π΅Π»Ρ‹ΠΉ Π·Π°ΠΊΡ€Π°ΡˆΠ΅Π½Π½Ρ‹ΠΉ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ

SS_WHITEFRAME — Π±Π΅Π»Ρ‹ΠΉ ΠΊΠΎΠ½Ρ‚ΡƒΡ€ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠ°

для описания ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠ° Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ Ρ†Π²Π΅Ρ‚Π°.

ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ статичСский элСмСнт — ΠΏΠΈΠΊΡ‚ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ (ΠΈΠΊΠΎΠ½ΠΊΡƒ), ΡƒΠΊΠ°Π·Π°Π² ΡΡ‚ΠΈΠ»ΡŒ SS_ICON. Π’ ΠΊΠ°Ρ‡Π΅ΡΡ‚Π²Π΅ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° ΠΎΠΊΠ½Π° задСтся имя рСсурса Ρ‚ΠΈΠΏΠ° ICON, Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Π½ΠΎΠ³ΠΎ Π² Π’Π°ΡˆΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Π Π°Π·ΠΌΠ΅Ρ€Ρ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ΡΡ Ρ€Π°Π·ΠΌΠ΅Ρ€Π°ΠΌΠΈ ΠΈΠΊΠΎΠ½ΠΊΠΈ нСзависимо ΠΎΡ‚ ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Ρ… Π’Π°ΠΌΠΈ.

Если Π½Π°ΠΌ Π½Π°Π΄ΠΎ Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΎΠ΄Π½Ρƒ ΠΈΠΊΠΎΠ½ΠΊΡƒ Π½Π° Π΄Ρ€ΡƒΠ³ΡƒΡŽ, Ρ‚ΠΎ Π½Π°Π΄ΠΎ этому Π΄ΠΎΡ‡Π΅Ρ€Π½Π΅ΠΌΡƒ ΠΎΠΊΠ½Ρƒ ΠΏΠΎΡΠ»Π°Ρ‚ΡŒ сообщСниС (STM_SETICON, hIcon, 0L), Π° Π΅ΡΠ»ΠΈ ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΡƒΠ·Π½Π°Ρ‚ΡŒ Ρ…Π΅Π½Π΄Π» ΠΈΠΊΠΎΠ½ΠΊΠΈ, Ρ‚ΠΎ Π½Π°Π΄ΠΎ ΠΏΠΎΡΠ»Π°Ρ‚ΡŒ сообщСниС (STM_GETICON, 0, 0L). Оба сообщСния Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ Ρ…Π΅Π½Π΄Π» ΠΈΠΊΠΎΠ½ΠΊΠΈ.

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

SS_SIMPLE, SS_LEFT, SS_LEFTNOWORDWRAP, SS_RIGHT, SS_CENTER

ΠŸΡ€ΠΈ этом Π½Π°Π΄ΠΎ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΡΡ‚ΠΈΠ»ΡŒ SS_NOPREFIX; ΠžΠ±Ρ‹Ρ‡Π½ΠΎ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΈΠ· & ΠΈ Π»ΡŽΠ±ΠΎΠ³ΠΎ символа ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΠΏΠΎΠ΄Ρ‡Π΅Ρ€ΠΊΠ½ΡƒΡ‚Ρ‹ΠΉ символ. Однако это Π½Π΅ Π²ΡΠ΅Π³Π΄Π° ΡƒΠ΄ΠΎΠ±Π½ΠΎ — Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ссли Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌΡ‹ΠΉ тСкст являСтся ΠΈΠΌΠ΅Π½Π΅ΠΌ Ρ„Π°ΠΉΠ»Π° ΠΈΠ»ΠΈ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ (Π² ΡΡ‚ΠΎΠΌ случаС & ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒΡΡ Π² ΡΡ‚Ρ€ΠΎΠΊΠ΅ ΠΊΠ°ΠΊ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ символ). Для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Π±Ρ‹ Π·Π°ΠΏΡ€Π΅Ρ‚ΠΈΡ‚ΡŒ использованиС & Π² ΠΊΠ°Ρ‡Π΅ΡΡ‚Π²Π΅ прСфикса, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΡΡ‚ΠΈΠ»ΡŒ SS_NOPREFIX.

Кнопки

Π‘Π°ΠΌΡ‹ΠΉ «Π±ΠΎΠ³Π°Ρ‚Ρ‹ΠΉ» класс — класс ΠΊΠ½ΠΎΠΏΠΎΠΊ. Для создания ΠΎΠΊΠ½Π°, ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ‰Π΅Π³ΠΎ этому классу Π½Π°Π΄ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ имя класса «BUTTON». Π‘ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ ΠΊΠ½ΠΎΠΏΠΎΠΊ (Π½ΠΎ Π½Π΅ Π²ΡΠ΅) ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹ΠΌΠΈ элСмСнтами (Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ фокус Π²Π²ΠΎΠ΄Π°). ΠžΠ±Ρ‹Ρ‡Π½ΠΎ ΠΊΠ½ΠΎΠΏΠΊΠΈ ΠΏΠΎΡΡ‹Π»Π°ΡŽΡ‚ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠΌΡƒ ΠΎΠΊΠ½Ρƒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΠΊΠΎΠ΄ извСщСния — BN_CLICKED, ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΊΠ½ΠΎΠΏΠΊΠ° Π±Ρ‹Π»Π° Π½Π°ΠΆΠ°Ρ‚Π°. ВсС ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΊΠΎΠ΄Ρ‹ извСщСния ΠΊΠ½ΠΎΠΏΠΎΠΊ (BN_???) ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‚ частному ΡΠ»ΡƒΡ‡Π°ΡŽ ΠΊΠ½ΠΎΠΏΠΎΠΊ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π΅ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅Ρ‚ся ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² Windows 3.1.

К ΡΡ‚ΠΎΠΌΡƒ классу ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ разновидности ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‰ΠΈΡ… элСмСнтов:

BS_PUSHBUTTON ΠΈ BS_DEFPUSHBUTTON ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°ΡŽΡ‚ ΠΊΠ½ΠΎΠΏΠΊΡƒ, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΌΠΎΠΆΠ½ΠΎ «Π½Π°ΠΆΠ°Ρ‚ΡŒ». ΠΠ°ΠΆΠΈΠΌΠ°ΡŽΡ‚ Π½Π° ΠΊΠ½ΠΎΠΏΠΊΡƒ ΠΈΠ»ΠΈ ΠΏΡ€ΠΎΠ±Π΅Π»ΠΎΠΌ, ΠΈΠ»ΠΈ ΠΌΡ‹ΡˆΠΊΠΎΠΉ. Π‘Ρ‚ΠΈΠ»ΡŒ BS_DEFPUSHBUTTON ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΠΊΠ½ΠΎΠΏΠΊΡƒ, которая Π΄ΠΎΠ»ΠΆΠ½Π° Π½Π°ΠΆΠΈΠΌΠ°Ρ‚ΡŒΡΡ клавишСй Enter, Π΄Π°ΠΆΠ΅ Ссли фокус Π²Π²ΠΎΠ΄Π° ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈΡ‚ Π΄Ρ€ΡƒΠ³ΠΎΠΌΡƒ ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‰Π΅ΠΌΡƒ элСмСнту.

BS_CHECKBOX ΠΈ BS_AUTOCHECKBOX ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°ΡŽΡ‚ Ρ„Π»Π°ΠΆΠΎΠΊ — элСмСнт, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ состоит ΠΈΠ· Π½Π΅Π±ΠΎΠ»ΡŒΡˆΠΎΠ³ΠΎ ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π° ΠΈ ΡΡ‚Ρ€ΠΎΠΊΠΈ тСкста. Π’ ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ поставлСн крСстик (check mark) — Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ этот элСмСнт являСтся «Π΄Π²ΡƒΡ…ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹ΠΌ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Ρ‚Π΅Π»Π΅ΠΌ» — ΠΎΡ‚ΠΌΠ΅Ρ‡Π΅Π½/Π½Π΅ΠΎΡ‚ΠΌΠ΅Ρ‡Π΅Π½.

BS_AUTOCHECKBOX отличаСтся ΠΎΡ‚ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠ³ΠΎ Ρ„Π»Π°ΠΆΠΊΠ° Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ автоматичСски ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ ΠΈΠ· ΠΎΠ΄Π½ΠΎΠ³ΠΎ состояния Π² Π΄Ρ€ΡƒΠ³ΠΎΠ΅ ΠΏΡ€ΠΈ Π½Π°ΠΆΠ°Ρ‚ΠΈΠΈ Π½Π° Π½Π΅Π³ΠΎ, Π° Π΄Π»Ρ простого BS_CHECKBOX Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ сами ΠΏΠΎΠ΄Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ для ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ.

BS_3STATE ΠΈ BS_AUTO3STATE ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΡ…ΠΎΠΆ Π½Π° Ρ„Π»Π°ΠΆΠΎΠΊ, Π½ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π² Ρ‚Ρ€Π΅Ρ… состояниях — ΠΎΡ‚ΠΌΠ΅Ρ‡Π΅Π½/Π½Π΅ΠΎΡ‚ΠΌΠ΅Ρ‡Π΅Π½/Π·Π°ΠΏΡ€Π΅Ρ‰Π΅Π½ (Π² Π·Π°ΠΏΡ€Π΅Ρ‰Π΅Π½Π½ΠΎΠΌ состоянии Π½Π΅ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ сообщСния ΠΎΡ‚ ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹ ΠΈ ΠΌΡ‹ΡˆΠΈ ΠΈ Ρ€ΠΈΡΡƒΠ΅Ρ‚ся сСрым. Π­Ρ‚ΠΎ состояниС Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ ΠΈ Π²Ρ‹ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΌ способом).

BS_RADIOBUTTON ΠΈ BS_AUTORADIOBUTTON ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Ρ‚Π΅Π»ΡŒ (Ρ€Π°Π΄ΠΈΠΎ_ΠΊΠ½ΠΎΠΏΠΊΡƒ) — элСмСнт, ΠΏΠΎΡ…ΠΎΠΆΠΈΠΉ Π½Π° Ρ„Π»Π°ΠΆΠΎΠΊ, Π½ΠΎ Π²ΠΌΠ΅ΡΡ‚ΠΎ ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π° рисуСтся ΠΊΡ€ΡƒΠΆΠΎΠΊ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ поставлСна Тирная Ρ‚ΠΎΡ‡ΠΊΠ°. ΠŸΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ для использования Π² Π³Ρ€ΡƒΠΏΠΏΠ΅ Π΄Ρ€ΡƒΠ³ΠΈΡ… Ρ€Π°Π΄ΠΈΠΎ ΠΊΠ½ΠΎΠΏΠΎΠΊ — ΠΏΡ€ΠΈΡ‡Π΅ΠΌ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½Π° ΠΈΠ· Π½ΠΈΡ… ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π½Π°ΠΆΠ°Ρ‚Π°, Π° ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΠΎΡ‚ΠΏΡƒΡ‰Π΅Π½Ρ‹ (ΠΊΠ°ΠΊ сСлСкторы Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π° Π² Ρ€Π°Π΄ΠΈΠΎΠΏΡ€ΠΈΠ΅ΠΌΠ½ΠΈΠΊΠ΅).

BS_GROUPBOX рСдставляСт собой ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΡƒΡŽ Ρ€Π°ΠΌΠΊΡƒ, Π² Π²Π΅Ρ€Ρ…Π½Π΅ΠΉ части ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹Π²Π΅Π΄Π΅Π½ тСкст. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для Π²ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ объСдинСния Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‰ΠΈΡ… элСмСнтов Π² ΠΎΠ΄Π½Ρƒ Π³Ρ€ΡƒΠΏΠΏΡƒ. Π₯отя GroupBox ΠΈ ΡΠ²Π»ΡΠ΅Ρ‚ся ΠΊΠ½ΠΎΠΏΠΊΠΎΠΉ, Π½ΠΎ ΠΎΠ½ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ фокус Π²Π²ΠΎΠ΄Π° — Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ большС ΠΏΠΎΡ…ΠΎΠΆ Π½Π° ΡΡ‚атичСскиС элСмСнты.

Кнопки ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ 5 спСцифичных сообщСний:

BM_SETCHECK nCheck 0L

устанавливаСт состояниС ΠΊΠ½ΠΎΠΏΠΊΠΈ:

0 — Π½Π΅ΠΎΡ‚ΠΌΠ΅Ρ‡Π΅Π½Π°

1 — ΠΎΡ‚ΠΌΠ΅Ρ‡Π΅Π½Π°

2 — Π·Π°ΠΏΡ€Π΅Ρ‰Π΅Π½Π° (Ρ‚ΠΎΠ»ΡŒΠΊΠΎ BS_3STATE ΠΈ BS_AUTO3STATE)

BM_SETSTATE nState 0L

устанавливаСт состояниС ΠΊΠ½ΠΎΠΏΠΊΠΈ

0 — Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎΠ΅ состояниС

1 — Π²Ρ‹Π΄Π΅Π»Π΅Π½Π° (ΠΈΠ·ΠΎΠ±Ρ€Π°Π·ΠΈΡ‚ΡŒ ΠΊΠ½ΠΎΠΏΠΊΡƒ Π² «Π½Π°ΠΆΠ°Ρ‚ΠΎΠΌ» состоянии)

BM_SETSTYLE wStyle bRedraw & 0

ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΡΡ‚ΠΈΠ»ΡŒ ΠΊΠ½ΠΎΠΏΠΊΠΈ. wStyle являСтся ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΠ΅ΠΉ BS_??? стилСй, Π° bRedraw ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, Π½Π°Π΄ΠΎ Π»ΠΈ ΠΏΠ΅Ρ€Π΅Ρ€ΠΈΡΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ½ΠΎΠΏΠΊΡƒ.

BM_GETCHECK 0 0L

BM_GETSTATE 0 0L

Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π΅ состояниС ΠΊΠ½ΠΎΠΏΠΊΠΈ.

Бписки

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

Бписок распознаСт большоС количСство спСцифичных сообщСний, поэтому здСсь Π±ΡƒΠ΄ΡƒΡ‚ рассмотрСны лишь Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ· Π½ΠΈΡ….

LB_RESETCONTENT 0 0L

это сообщСниС ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΡŽ всСх Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ· ΡΠΏΠΈΡΠΊΠ°.

LB_ADDSTRING 0 lpszString

Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ строку Π² ΠΊΠΎΠ½Π΅Ρ† списка

LB_FINDSTRING nIndexStart lpszString

Π½Π°ΠΉΡ‚ΠΈ Π½ΡƒΠΆΠ½ΡƒΡŽ строку Π² ΡΠΏΠΈΡΠΊΠ΅ ΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π΅Π΅ ΠΈΠ½Π΄Π΅ΠΊΡ

LB_DELETESTRING nIndex 0L

ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ строку ΠΈΠ· ΡΠΏΠΈΡΠΊΠ°

LB_GETTEXT nIndex lpsBuffer

ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ строку с ΠΈΠ½Π΄Π΅ΠΊΡΠΎΠΌ nIndex Π² ΡΠΏΠΈΡΠΊΠ΅ ΠΈ Ρ€Π°Π·ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ Π΅Π΅ Π² ΡƒΠΊΠ°Π·Π°Π½ΠΎΠΌ Π±ΡƒΡ„Π΅Ρ€Π΅.

LB_GETCURSEL 0 0

ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ индСкс Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ Π²Ρ‹Π±Ρ€Π°Π½Π½ΠΎΠ³ΠΎ элСмСнта

LB_DIR nAttr lpszMask

Π·Π°ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ список ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ², Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΉ ΠΈ Π΄ΠΈΡΠΊΠΎΠ². Иногда ΡƒΠ΄ΠΎΠ±Π½ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ, ΠΏΠΎΡΡ‹Π»Π°Π΅ΡŽΡ‰Π΅ΠΉ это сообщСниС: DlgDirList ΠΈ DlgDirSelect.

ΠŸΠΎΡΡ‹Π»Π°Π΅ΠΌΡ‹Π΅ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠΌΡƒ ΠΎΠΊΠ½Ρƒ ΠΊΠΎΠ΄Ρ‹ извСщСния ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ ΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… событиях списка:

LBN_ERRSPACE — ΠΎ ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ΅Π΄ΡˆΠ΅ΠΉ ошибкС, связанной с Π½Π΅Ρ…Π²Π°Ρ‚ΠΊΠΎΠΉ памяти;

LBN_KILLFOCUS ΠΈ LBN_SETFOCUS — ΠΎ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠΈ ΠΈΠ»ΠΈ ΠΏΠΎΡ‚Π΅Ρ€Π΅ фокуса Π²Π²ΠΎΠ΄Π°;

LBN_DBLCLK — ΠΎ Π΄Π²ΠΎΠΉΠ½ΠΎΠΌ Π½Π°ΠΆΠ°Ρ‚ΠΈΠΈ Π½Π° ΠΊΠ½ΠΎΠΏΠΊΡƒ ΠΌΡ‹ΡˆΠΈ;

LBN_SELCHANGE — ΠΎΠ± ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ Π²Ρ‹Π±Ρ€Π°Π½Π½ΠΎΠ³ΠΎ элСмСнта;

LBN_SELCANCEL — процСсс Π²Ρ‹Π±ΠΎΡ€Π° ΠΏΡ€Π΅Ρ€Π²Π°Π½, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΎΠΌ ΠΊ Π΄Ρ€ΡƒΠ³ΠΎΠΌΡƒ ΠΎΠΊΠ½Ρƒ.

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

простой ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ список — CBS_SIMPLE — ΠΊΠΎΠ³Π΄Π° ΠΈ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ ΠΈ ΡΠΏΠΈΡΠΎΠΊ постоянно Π²ΠΈΠ΄Π½Ρ‹;

Π²Ρ‹ΠΏΠ°Π΄Π°ΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ список — CBS_DROPDOWN — ΠΊΠΎΠ³Π΄Π° постоянно Π²ΠΈΠ΄ΠΈΠΌΠΎ окошко Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π° ΠΈ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Π°Ρ ΠΊΠ½ΠΎΠΏΠΊΠ° справа, ΠΏΡ€ΠΈ Π½Π°ΠΆΠ°Ρ‚ΠΈΠΈ Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΏΠΎΠ΄ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ΠΎΠΌ появляСтся (Π²Ρ‹ΠΏΠ°Π΄Π°Π΅Ρ‚) список.

нСизмСняСмый ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ список — CBS_DROPDOWNLIST — Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹ΠΉ CBS_DROPDOWN, Π½ΠΎ Ρ‚Скст Π² Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π΅ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½.

ΠšΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ списки ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Π»Π΅Π³ΠΊΠΎ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ пополняСмый Π²ΠΎ Π²Ρ€Π΅ΠΌΡ Ρ€Π°Π±ΠΎΡ‚Ρ‹ список, Π½ΠΎ Π°Π²Ρ‚оматичСскоС ΠΏΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π΅ ΠΏΡ€Π΅Π΄ΡƒΡΠΌΠΎΡ‚Ρ€Π΅Π½ΠΎ. Для этого Π’Π°ΠΌ Π½Π°Π΄ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ самим, ΡƒΠ±Π΅Π΄ΠΈΠ²ΡˆΠΈΡΡŒ, Ρ‡Ρ‚ΠΎ тСкст Π² Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π΅ Π½Π΅ ΠΏΡ€ΠΈΡΡƒΡ‚ствуСт Π² ΡΠΏΠΈΡΠΊΠ΅, Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π΅Π³ΠΎ ΠΊ ΡΠΏΠΈΡΠΊΡƒ.

Π’Π°ΠΊΠΎΠΉ список ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ ΡΡ‚ΠΈΠ»ΡŒ CBS_OEMCONVERT, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ Π°Π²Ρ‚оматичСскому ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΡŽ записываСмых Π² Π½Π΅Π³ΠΎ строк ΠΈΠ· OEM Π² ANSI, ΠΈ ΠΊ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΌΡƒ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΡŽ ΠΏΡ€ΠΈ Ρ‡Ρ‚Π΅Π½ΠΈΠΈ ΠΈΠ· Π½Π΅Π³ΠΎ Π΄Π°Π½Π½Ρ‹Ρ….

ΠšΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ списки ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ Π΅Ρ‰Π΅ большС сообщСний ΠΈ ΠΊΠΎΠ΄ΠΎΠ² извСщСния, связанных с ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π° ΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒΡŽ появлСния ΠΈ ΡΠΊΡ€Ρ‹Π²Π°Π½ΠΈΡ списка.

Π Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€

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

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

ΠŸΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠΈΠΉ способ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ собствСнный Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ — ΠΏΡ€ΠΈ создании собствСнного ΠΎΠΊΠ½Π° Π½Π° Π²ΡΡŽ Π΅Π³ΠΎ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΡŽΡŽ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΎΠΊΠ½ΠΎ стандартного Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π° ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ нСсколько Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ — мСню, Ρ‡Ρ‚Π΅Π½ΠΈΠ΅/запись Ρ„Π°ΠΉΠ»Π°, поиск/Π·Π°ΠΌΠ΅Π½Ρƒ ΠΈ ΠΏΡ€. Π‘Ρ‚Ρ€ΠΎΠ³ΠΎ говоря, тСкстовой Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ NotePad сдСлан ΠΈΠΌΠ΅Π½Π½ΠΎ Ρ‚Π°ΠΊΠΈΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ.

Окошко Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π° ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ использовано для рСдактирования нСбольшого тСкста, Ρ‚ΠΎΠ³Π΄Π° для Π΅Π³ΠΎ чтСния ΠΈΠ»ΠΈ задания ΡƒΠ΄ΠΎΠ±Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

void SetWindowText (hWnd, lpszText);

int GetWindowText (hWnd, lpsBuffer, nMaxCount);

int GetWindowTextLength (hWnd);

ΠΈΠ»ΠΈ сообщСниями WM_SETTEXT, WM_GETTEXT ΠΈ WM_GETTEXTLENGTH, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π² ΡΠ»ΡƒΡ‡Π°Π΅ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ Win32 позволят ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΈΠ»ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ тСкст Π² ΠΎΠΊΠ½Π΅, ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ‰Π΅ΠΌ Π΄Ρ€ΡƒΠ³ΠΎΠΌΡƒ процСссу, Π² Ρ‚ΠΎ Π²Ρ€Π΅ΠΌΡ ΠΊΠ°ΠΊ рассмотрСнныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ с ΠΎΠΊΠ½Π°ΠΌΠΈ, ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ‰ΠΈΠΌΠΈ Π΄Π°Π½Π½ΠΎΠΌΡƒ процСссу.

Однако с Π±ΠΎΠ»ΡŒΡˆΠΈΠΌΠΈ тСкстами ΡƒΠ΄ΠΎΠ±Π½Π΅Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ с ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ Π±Π»ΠΎΠΊΠ°ΠΌΠΈ памяти. Для этого Π½Π°Π΄ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ сообщСниями:

EM_GETHANDLE 0 0L

для получСния Ρ…Π΅Π½Π΄Π»Π° Π±Π»ΠΎΠΊΠ°, содСрТащСго тСкст;

EM_SETHANDLE hLocal 0L

для задания Ρ…Π΅Π½Π΄Π»Π° Π±Π»ΠΎΠΊΠ°, содСрТащСго тСкст;

EM_LIMITTEXT nMaxChars 0L

для задания максимального Ρ€Π°Π·ΠΌΠ΅Ρ€Π° тСкста;

Как всС стандартныС классы Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΡ… ΠΎΠΊΠ½Π°, ΠΎΠΊΠ½Π° EDIT ΠΏΠΎΡΡ‹Π»Π°ΡŽΡ‚ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠΌΡƒ ΠΎΠΊΠ½Ρƒ извСщСния ΠΎ ΠΏΡ€ΠΎΠΈΡΡ…одящих событиях — ошибкС ΠΈΠ·_Π·Π° Π½Π΅Ρ…Π²Π°Ρ‚ΠΊΠΈ памяти, ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠΈ ΠΈ ΠΏΠΎΡ‚Π΅Ρ€Π΅ фокуса, ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠ³ΠΎ тСкста ΠΈ ΠΎ «ΠΏΡ€ΠΎΠΊΡ€ΡƒΡ‚ΠΊΠ΅» тСкста Π² ΠΎΠΊΠΎΡˆΠΊΠ΅ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π°.

ΠŸΠΎΠ»ΠΎΡΡ‹ ΠΏΡ€ΠΎΠΊΡ€ΡƒΡ‚ΠΊΠΈ

ПослСдний рассматриваСмый Π½Π°ΠΌΠΈ стандартный класс Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΡ… ΠΎΠΊΠΎΠ½ — полосы ΠΏΡ€ΠΎΠΊΡ€ΡƒΡ‚ΠΊΠΈ, ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ‰ΠΈΠ΅ ΠΊ ΠΊΠ»Π°ΡΡΡƒ SCROLLBAR. ВзаимодСйствиС полос ΠΏΡ€ΠΎΠΊΡ€ΡƒΡ‚ΠΊΠΈ с Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠΌ ΠΎΠΊΠ½ΠΎΠΌ отличаСтся ΠΎΡ‚ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚вия всСх ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Ρ… стандартных классов.

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ сами ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ полосы ΠΏΡ€ΠΎΠΊΡ€ΡƒΡ‚ΠΊΠΈ, Π½ΠΎ, Ссли Π²Π°ΠΌ Π½Π°Π΄ΠΎ ΠΎΠ΄Π½Ρƒ-Π΄Π²Π΅ полосы ΠΏΡ€ΠΎΠΊΡ€ΡƒΡ‚ΠΊΠΈ снизу ΠΈ ΡΠΏΡ€Π°Π²Π° ΠΎΡ‚ ΠΎΠΊΠ½Π°, Ρ‚ΠΎ ΠΏΡ€ΠΎΡ‰Π΅ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΎΠΊΠ½ΠΎ со ΡΡ‚илями WS_VSCROLL ΠΈ/ΠΈΠ»ΠΈ WS_HSCROLL. ΠŸΡ€ΠΈ этом ΠΎΠΊΠ½ΠΎ автоматичСски ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ Π½ΡƒΠΆΠ½Ρ‹Π΅ полосы ΠΏΡ€ΠΎΠΊΡ€ΡƒΡ‚ΠΊΠΈ. Удобство Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π΅Ρ‰Π΅ ΠΈ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ эти полосы ΠΏΡ€ΠΎΠΊΡ€ΡƒΡ‚ΠΊΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ‰Π°ΡŽΡ‚ΡΡ Π²Π½Π΅ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΉ области ΠΎΠΊΠ½Π°, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π’Π°ΠΌ Π½Π΅ Π½Π°Π΄ΠΎ ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΈΡ… Ρ€Π°Π·ΠΌΠ΅Ρ€.

Для извСщСния Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ ΠΎΠΊΠ½Π° полосы ΠΏΡ€ΠΎΠΊΡ€ΡƒΡ‚ΠΊΠΈ ΠΏΠΎΡΡ‹Π»Π°ΡŽΡ‚ сообщСния WM_VSCROLL ΠΈ WM_HSCROLL Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΠΈ ΠΎΡ‚ Ρ‚ΠΈΠΏΠ° полосы — Π³ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»ΡŒΠ½Π°Ρ ΠΈΠ»ΠΈ Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΡŒΠ½Π°Ρ, Π° Π΄Π»Ρ управлСния полосами ΠΏΡ€ΠΎΠΊΡ€ΡƒΡ‚ΠΊΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

Π‘Π½Π°Ρ‡Π°Π»Π° рассмотрим сообщСния полосы ΠΏΡ€ΠΎΠΊΡ€ΡƒΡ‚ΠΊΠΈ:

WM_VSCROLL ScrollCode wndScroll & nPos

WM_HSCROLL ScrollCode wndScroll & nPos

Π² ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π΅ wPar размСщаСтся ΠΊΠΎΠ΄, ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ Ρ‡Ρ‚ΠΎ происходит с ΠΏΠΎΠ»ΠΎΡΠΎΠΉ ΠΏΡ€ΠΎΠΊΡ€ΡƒΡ‚ΠΊΠΈ, ΡΡ‚Π°Ρ€ΡˆΠ΅Π΅ слово lPar содСрТит Ρ…Π΅Π½Π΄Π» полосы ΠΏΡ€ΠΎΠΊΡ€ΡƒΡ‚ΠΊΠΈ, Π° ΠΌΠ»Π°Π΄ΡˆΠ΅Π΅ слово ΠΌΠΎΠΆΠ΅Ρ‚ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π½Π° ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ «Π΄Π²ΠΈΠΆΠΊΠ°» полосы.

ΠšΠΎΠ΄Ρ‹ полосы ΠΏΡ€ΠΎΠΊΡ€ΡƒΡ‚ΠΊΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅:

Для всСх ΠΊΠΎΠ΄ΠΎΠ², ΠΊΡ€ΠΎΠΌΠ΅ SB_THUMBTRACK ΠΈ SB_THUMBPOSITION, младшСС слово lPar Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ся. ΠšΠΎΠ΄Ρ‹ SB_THUMBTRACK ΠΏΠΎΡΡ‹Π»Π°ΡŽΡ‚ΡΡ ΠΊΠΎΠ³Π΄Π° Π’Ρ‹, «Π·Π°Ρ†Π΅ΠΏΠΈΠ²» ΠΌΡ‹ΡˆΠΊΠΎΠΉ Π΄Π²ΠΈΠΆΠΎΠΊ полосы ΠΏΡ€ΠΎΠΊΡ€ΡƒΡ‚ΠΊΠΈ, Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Ρ‚ΡŒ Π΅Π³ΠΎ. ΠŸΡ€ΠΈ этом ΠΎΠ½ΠΈ ΠΏΠΎΡΡ‹Π»Π°ΡŽΡ‚ΡΡ Ρ‚Π°ΠΊ часто, ΠΊΠ°ΠΊ ΡƒΡΠΏΠ΅Π²Π°ΡŽΡ‚ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒΡΡ — информируя Вас ΠΎ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ Π΄Π²ΠΈΠΆΠΊΠ°. Код SB_THUMBPOSITION посылаСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Ρ‚ΠΎΡ‚ ΠΌΠΎΠΌΠ΅Π½Ρ‚, ΠΊΠΎΠ³Π΄Π° Π’Ρ‹ ΠΎΡ‚пускаСтС ΠΊΠ½ΠΎΠΏΠΊΡƒ ΠΌΡ‹ΡˆΠΈ для позиционирования Π΄Π²ΠΈΠΆΠΊΠ° Π² Π½ΠΎΠ²ΠΎΠΌ мСстС.

Помимо этих ΠΊΠΎΠ΄ΠΎΠ² Π·Π°Ρ€Π΅Π·Π΅Ρ€Π²ΠΈΡ€ΠΎΠ²Π°Π½ΠΎ Π΅Ρ‰Π΅ Π΄Π²Π° — SB_TOP ΠΈ SB_BOTTOM, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ ΠΏΠΎΡΡ‹Π»Π°ΡŽΡ‚ся полосой ΠΏΡ€ΠΎΠΊΡ€ΡƒΡ‚ΠΊΠΈ. БобствСнно полосы ΠΏΡ€ΠΎΠΊΡ€ΡƒΡ‚ΠΊΠΈ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ интСрфСйс Ρ‚ΠΎΠ»ΡŒΠΊΠΎ с ΠΌΡ‹ΡˆΡŒΡŽ, фокуса Π²Π²ΠΎΠ΄Π° ΠΎΠ½ΠΈ Π½Π΅ ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‚, поэтому ΠΏΡ€ΠΈ использовании полос ΠΏΡ€ΠΎΠΊΡ€ΡƒΡ‚ΠΊΠΈ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ добавлСния интСрфСйса с ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€ΠΎΠΉ.

Часто Π΄Π΅Π»Π°ΡŽΡ‚ Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠ΅ ΠΎΠΊΠ½ΠΎ, обрабатывая сообщСния ΠΎΡ‚ ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹ просто посылаСт само сСбС сообщСния «ΠΎΡ‚ ΠΈΠΌΠ΅Π½ΠΈ» полосы ΠΏΡ€ΠΎΠΊΡ€ΡƒΡ‚ΠΊΠΈ. Вся ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΏΡ€ΠΎΠΊΡ€ΡƒΡ‚ΠΊΠΈ ΠΎΠΊΠ½Π° сосрСдоточСна Π½Π° ΡΠΎΠΎΠ±Ρ‰Π΅Π½ΠΈΡΡ… WM_VSCROLL ΠΈ WM_HSCROLL. Π’ ΡΡ‚ΠΎΠΌ случаС клавишам Home ΠΈ End Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΠΈΠ΅-Ρ‚ΠΎ ΠΊΠΎΠ΄Ρ‹ полосы ΠΏΡ€ΠΎΠΊΡ€ΡƒΡ‚ΠΊΠΈ, для Ρ‡Π΅Π³ΠΎ ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Ρ‹ ΠΊΠΎΠ΄Ρ‹ SB_TOP ΠΈ SB_BOTTOM.

ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΠ΄Ρ‚ΠΈ ΠΈΠ½Ρ‹ΠΌ ΠΏΡƒΡ‚Π΅ΠΌ, Ρ‚ΠΎΠ³Π΄Π° эти Π΄Π²Π° ΠΊΠΎΠ΄Π° Π’Π°ΠΌ Π½Π΅ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΡΡ‚ся.

ΠŸΡ€ΠΈΠ²Π΅Π΄Π΅ΠΌ нСбольшой ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ сообщСния WM_KEYDOWN Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠΌ ΠΎΠΊΠ½ΠΎΠΌ:

UINT n;

switch (wMsg) {

case WM_KEYDOWN:

switch (wPar) {

case VK_HOME: n= SB_TOP; goto post_vscroll;

case VK_END: n= SB_BOTTOM; goto post_vscroll;

case VK_PRIOR: n= SB_PAGEUP; goto post_vscroll;

case VK_NEXT: n= SB_PAGEDOWN; goto post_vscroll;

case VK_DOWN: n= SB_LINEDOWN; goto post_vscroll;

case VK_UP: n= SB_LINEUP;

post_vscroll:

PostMessage (hWnd, WM_VSCROLL, n, 0L);

break;

default: break;

}

return 0;

}

Π”Π°Π»Π΅Π΅ нас Π±ΡƒΠ΄ΡƒΡ‚ ΠΈΠ½Ρ‚Π΅Ρ€Π΅ΡΠΎΠ²Π°Ρ‚ΡŒ срСдства для управлСния полосами ΠΏΡ€ΠΎΠΊΡ€ΡƒΡ‚ΠΊΠΈ. КаТдая полоса ΠΏΡ€ΠΎΠΊΡ€ΡƒΡ‚ΠΊΠΈ характСризуСтся Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ΠΎΠΌ ΠΏΡ€ΠΎΠΊΡ€ΡƒΡ‚ΠΊΠΈ, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌ ΠΈ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌ значСниями ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ Π΄Π²ΠΈΠΆΠΊΠ°. ΠŸΡ€ΠΈ создании полосы ΠΏΡ€ΠΎΠΊΡ€ΡƒΡ‚ΠΊΠΈ Π΅Π΅ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ устанавливаСтся Π² 0.100;

Для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Π±Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΈΠ»ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ полосы ΠΏΡ€ΠΎΠΊΡ€ΡƒΡ‚ΠΊΠΈ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ:

void GetScrollRange (hWnd, nBar, lpnMin, lpnMax);

int SetScrollRange (hWnd, nBar, nMin, nMax, bRepaint);

Π£Π΄ΠΎΠ±Π½ΠΎ ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ ΠΏΡ€ΠΎΠΊΡ€ΡƒΡ‚ΠΊΠΈ Ρ€Π°Π²Π½Ρ‹ΠΌ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, числу строк Π² Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠΌ Ρ„Π°ΠΉΠ»Π΅.

НСкоторых пояснСний Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ hWnd ΠΈ nBar. ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ hWnd ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°Π΄Π°Π²Π°Ρ‚ΡŒ Ρ…Π΅Π½Π΄Π» ΠΎΠΊΠ½Π°-родитСля, Ρ‚ΠΎΠ³Π΄Π° с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° nBar Π’Ρ‹ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚Π΅, какая ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎ полоса ΠΏΡ€ΠΎΠΊΡ€ΡƒΡ‚ΠΊΠΈ имССтся Π² Π²ΠΈΠ΄Ρƒ: SB_VERT ΠΈΠ»ΠΈ SB_HORZ. А Π΅ΡΠ»ΠΈ hWnd являСтся Ρ…Π΅Π½Π»ΠΎΠΌ полосы ΠΏΡ€ΠΎΠΊΡ€ΡƒΡ‚ΠΊΠΈ, Ρ‚ΠΎ Π’Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ nBar Ρ€Π°Π²Π½Ρ‹ΠΌ SB_CTL.

Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π΄Π²ΡƒΡ… ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΠ·Π½Π°Ρ‚ΡŒ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π΅ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π΄Π²ΠΈΠΆΠΊΠ° полосы ΠΈΠ»ΠΈ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π΅Π³ΠΎ Π² Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌΡƒΡŽ ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ.

Int GetScrollPos (hWnd, nBar);

int SetScrollPos (hWnd, nBar, nPos, bRepaint);

ПослСдняя функция позволяСт ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΈΠ»ΠΈ ΡΠΏΡ€ΡΡ‚Π°Ρ‚ΡŒ полосы ΠΏΡ€ΠΎΠΊΡ€ΡƒΡ‚ΠΊΠΈ. Она ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Ρ‰Π΅ ΠΎΠ΄Π½ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° nBar — SB_BOTH, указывая, Ρ‡Ρ‚ΠΎ ΠΎΠ±Π΅ полосы ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ ΠΈΠ»ΠΈ ΡΠΊΡ€Ρ‹Π²Π°ΡŽΡ‚ΡΡ.

Void ShowScrollBar (hWnd, nBar, bShow);

Окна, рисуСмыС ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ

Для Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… стандартных классов Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΡ… ΠΎΠΊΠΎΠ½ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ созданиС ΠΎΠΊΠΎΠ½ нСстандартного Π²ΠΈΠ΄Π°. Π­Ρ‚ΠΎ Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹Π΅ рисуСмыС ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ (Owner Draw) ΠΎΠΊΠ½Π°. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ½ΠΎΠΏΠΊΠΈ, ΠΈ ΡΠ»Π΅ΠΌΠ΅Π½Ρ‚Ρ‹ списков (Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π°ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ список ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹ΠΌΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, рисунками). Π’ΠΎΡ‚ ΠΆΠ΅ способ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ для рисования ΠΏΡƒΠ½ΠΊΡ‚ΠΎΠ² мСню.

Для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Π±Ρ‹ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ этой Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒΡŽ, Π’Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΠ²ΡƒΡŽΡ‰ΠΈΠΉ ΡΡ‚ΠΈΠ»ΡŒ — BS_OWNERDRAW для ΠΊΠ½ΠΎΠΏΠΊΠΈ, LBS_OWNERDRAWFIXED, LBS_OWNERDRAWVARIABLE, CBS_OWNERDRAWFIXED, CBS_OWNERDRAWVARIABLE для списков. Π’ ΡΠ»ΡƒΡ‡Π°Π΅ списков Ρ€Π°Π·Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ Π΄Π²Π° Π²ΠΈΠ΄Π° рисуСмых ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ элСмСнтов — элСмСнты ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎΠΉ высоты (…FIXED) ΠΈ ΡΠ»Π΅ΠΌΠ΅Π½Ρ‚Ρ‹ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎΠΉ высоты (…VARIABLE).

Π”ΠΎΡ‡Π΅Ρ€Π½ΠΈΠ΅ ΠΎΠΊΠ½Π° Ρ‚Π°ΠΊΠΈΡ… стилСй Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΠΎΡΡ‹Π»Π°Ρ‚ΡŒ своСму Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠΌΡƒ ΠΎΠΊΠ½Ρƒ сообщСния WM_MEASUREITEM ΠΈ WM_DRAWITEM. ΠžΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ эти сообщСния Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠ΅ ΠΎΠΊΠ½ΠΎ опрСдСляСт Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌΡ‹Ρ… элСмСнтов ΠΈ ΠΎΡΡƒΡ‰Π΅ΡΡ‚вляСт ΠΈΡ… Ρ€ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅. (Π­Ρ‚ΠΈ ΠΆΠ΅ сообщСния ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ для рисования мСню).

WM_MEASUREITEM nID lpMI

это сообщСниС посылаСтся для опрСдСлСния Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠ² рисуСмого элСмСнта. ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ wPar содСрТит ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Π΄ΠΎΡ‡Π΅Ρ€Π½Π΅Π³ΠΎ ΠΎΠΊΠ½Π°, Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ lPar — дальний ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° ΡΡ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Ρƒ MEASUREITEMSTRUCT, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π½Π°Π΄ΠΎ Π·Π°ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ.

typedef struct tagMEASUREITEMSTRUCT { /* mi */

UINT CtlType; // Ρ‚ΠΈΠΏ рисуСмого элСмСнта

UINT CtlID; // ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€

UINT itemID; // ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ элСмСнта (Π½ΠΎΠΌΠ΅Ρ€ ΠΏΡƒΠ½ΠΊΡ‚Π°)

UINT itemWidth; // ΡˆΠΈΡ€ΠΈΠ½Π° элСмСнта

UINT itemHeight; // высота элСмСнта

DWORD itemData; // Π΄Π°Π½Π½Ρ‹Π΅ элСмСнта

} MEASUREITEMSTRUCT;

Поля CtlType, CtlID, itemID ΠΈ itemData Π·Π°ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ Windows, Π²Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚Π΅ ΠΈΡ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡŒ для опрСдСлСния Π½ΡƒΠΆΠ½ΠΎΠ³ΠΎ элСмСнта.

ПолС CtlType ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ…:

ODT_BUTTON — ΠΊΠ½ΠΎΠΏΠΊΠ°

ODT_COMBOBOX — элСмСнт ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ список

ODT_LISTBOX — элСмСнт простого список

ODT_MENU — элСмСнт мСню

Поля CtlID ΠΈ ItemID ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ Π΄ΠΎΡ‡Π΅Ρ€Π½Π΅Π³ΠΎ ΠΎΠΊΠ½Π° ΠΈ ΡΠ»Π΅ΠΌΠ΅Π½Ρ‚Π° этого Π΄ΠΎΡ‡Π΅Ρ€Π½Π΅Π³ΠΎ ΠΎΠΊΠ½Π° (Ссли Π΄ΠΎΡ‡Π΅Ρ€Π½Π΅Π΅ ΠΎΠΊΠ½ΠΎ являСтся списком ΠΈΠ»ΠΈ рисуСтся элСмСнт мСню).

ПолС ItemData являСтся Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π’Ρ‹ ΠΏΠ΅Ρ€Π΅Π΄Π°Π»ΠΈ Π»ΠΈΠ±ΠΎ ΠΏΡ€ΠΈ создании Π΄ΠΎΡ‡Π΅Ρ€Π½Π΅Π³ΠΎ ΠΎΠΊΠ½Π° (имя ΠΊΠ½ΠΎΠΏΠΊΠΈ) Π»ΠΈΠ±ΠΎ ΠΏΡ€ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠΈ элСмСнта Π² ΡΠΏΠΈΡΠΎΠΊ ΠΈΠ»ΠΈ мСню (см. ΡΠΎΠΎΠ±Ρ‰Π΅Π½ΠΈΡ CB_ADDSTRING, CB_INSERTSTRING, LB_ADDSTRING, LB_INSERTSTRING ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ InsertMenu, AddMenu). ΠžΠ±Ρ‹Ρ‡Π½ΠΎ это ΠΏΠΎΠ»Π΅ являСтся ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΌ Π½Π° Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΠΎΠΊΠ½Π°/элСмСнта.

Π”Π²Π° поля itemHeight ΠΈ itemWidth Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ сами. ΠŸΡ€ΠΈ этом Π½Π°Π΄ΠΎ ΠΈΠΌΠ΅Ρ‚ΡŒ Π² Π²ΠΈΠ΄Ρƒ, Ρ‡Ρ‚ΠΎ Π½Π΅ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΠ΅ Π·Π°Π΄Π°Π½ΠΈΠ΅ этих ΠΏΠΎΠ»Π΅ΠΉ ΠΈΠ»ΠΈ нСкоррСктная ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° сообщСния WM_DRAWITEM ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ Π½Π΅ΠΏΡ€Π΅Π΄ΡΠΊΠ°Π·ΡƒΠ΅ΠΌΡ‹ΠΌ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°ΠΌ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Windows Π½Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΠ΅Ρ‚ коррСктности Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Ρ‹Ρ… дСйствий).

WM_DRAWITEM nID lpDI

Π° ΡΡ‚ΠΎ сообщСниС посылаСтся, ΠΊΠΎΠ³Π΄Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π½Π°Ρ€ΠΈΡΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌΡ‹ΠΉ элСмСнт. ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ lPar являСтся дальним ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΌ Π½Π° ΡΡ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Ρƒ DRAWITEMSTRUCT, которая содСрТит Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ для рисования Π΄Π°Π½Π½Ρ‹Π΅.

typedef struct tagDRAWITEMSTRUCT { /* ditm */

UINT CtlType; // Ρ‚ΠΈΠΏ рисуСмого элСмСнта

UINT CtlID; // ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€

UINT itemID; // ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ элСмСнта (Π½ΠΎΠΌΠ΅Ρ€ ΠΏΡƒΠ½ΠΊΡ‚Π°)

UINT itemAction; // ΠΈΠ·-Π·Π° Ρ‡Π΅Π³ΠΎ Π½Π°Π΄ΠΎ Ρ€ΠΈΡΠΎΠ²Π°Ρ‚ΡŒ

UINT itemState; // ΠΊΠ°ΠΊ Π½Π°Π΄ΠΎ Ρ€ΠΈΡΠΎΠ²Π°Ρ‚ΡŒ

HWND hwndItem; // Ρ…Π΅Π½Π΄Π» ΠΎΠΊΠ½Π° рисуСмого элСмСнта

HDC hDC; // Ρ…Π΅Π½Π΄Π» контСкста устройства для рисования

RECT rcItem; // ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π½Π°Π΄ΠΎ Ρ€ΠΈΡΠΎΠ²Π°Ρ‚ΡŒ

DWORD itemData; // Π΄Π°Π½Π½Ρ‹Π΅ элСмСнта

} DRAWITEMSTRUCT;

ΠžΠ±Ρ€Π°Ρ‚ΠΈΠΌ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΠΏΠΎΠ»Ρ itemAction ΠΈ itemState. Они Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ стСпСни Π΄ΡƒΠ±Π»ΠΈΡ€ΡƒΡŽΡ‚ Π΄Ρ€ΡƒΠ³ Π΄Ρ€ΡƒΠ³Π°, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ itemState ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π΅ состояниС элСмСнта, Π° itemAction — ΠΏΡ€ΠΈΡ‡ΠΈΠ½Ρƒ рисования, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ фокуса ΠΈΠ»ΠΈ Π²Ρ‹Π±ΠΎΡ€ элСмСнта. Для упрощСния Π»ΠΎΠ³ΠΈΠΊΠΈ рисования, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Ρ€ΠΈΡΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ всС окошко, ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΡƒΡΡΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π° ΠΏΠΎΠ»Π΅ itemState, ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰Π΅Π΅ ΠΊΠ°ΠΊ Π½Π°Π΄ΠΎ Ρ€ΠΈΡΠΎΠ²Π°Ρ‚ΡŒ.

Если Π½Π°Π΄ΠΎ Π½Π°Ρ€ΠΈΡΠΎΠ²Π°Ρ‚ΡŒ элСмСнт, ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠΉ фокус, Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ

void DrawFocusRect (hDC, lpRect);

которая рисуСт ΠΏΡƒΠ½ΠΊΡ‚ΠΈΡ€Π½Ρ‹ΠΉ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ, ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ°ΡŽΡ‰ΠΈΠΉ элСмСнт, ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠΉ фокус Π²Π²ΠΎΠ΄Π°.

Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Ρ†Π²Π΅Ρ‚ΠΎΠΌ Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΡ… ΠΎΠΊΠΎΠ½

Окна, ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ‰ΠΈΠ΅ ΠΊ ΡΡ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½Ρ‹ΠΌ классам Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΡ… ΠΎΠΊΠΎΠ½, ΠΏΡ€Π΅Π΄ΡƒΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°ΡŽΡ‚ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ для управлСния ΠΈΡ… Ρ†Π²Π΅Ρ‚ΠΎΠΌ. Он ΠΎΡΠ½ΠΎΠ²Π°Π½ Π½Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½ΠΈΠΈ сообщСния WM_CTLCOLOR, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π΄ΠΎΡ‡Π΅Ρ€Π½Π΅Π΅ ΠΎΠΊΠ½ΠΎ посылаСт Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠΌΡƒ для опрСдСлСния Π½ΡƒΠΆΠ½Ρ‹Ρ… Ρ†Π²Π΅Ρ‚ΠΎΠ².

WM_CTLCOLOR DC CtlType&hwndChild

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ этого сообщСния ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅:

wPar содСрТит Ρ…Π΅Π½Π΄Π» контСкста устройства рисуСмого ΠΎΠΊΠ½Π° младшСС слово lPar содСрТит Ρ…Π΅Π½Π΄Π» этого ΠΎΠΊΠ½Π°, Π° ΡΡ‚Π°Ρ€ΡˆΠ΅Π΅ — Ρ‚ΠΈΠΏ рисуСмого ΠΎΠΊΠ½Π°:

CTLCOLOR_BTN, CTLCOLOR_DLG, CTLCOLOR_EDIT, CTLCOLOR_LISTBOX, CTLCOLOR_MSGBOX, CTLCOLOR_SCROLLBAR, CTLCOLOR_STATIC

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

К ΡΠΎΠΆΠ°Π»Π΅Π½ΠΈΡŽ, Π½Π΅ Π²ΡΠ΅ стандартныС ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‰ΠΈΠ΅ элСмСнты ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ это сообщСниС. НапримСр, Π½Π°ΠΆΠΈΠΌΠ°Π΅ΠΌΡ‹Π΅ ΠΊΠ½ΠΎΠΏΠΊΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ ΡƒΠΊΠ°Π·Π°Π½Π½ΡƒΡŽ Π’Π°ΠΌΠΈ ΠΊΠΈΡΡ‚ΡŒ для рисования Ρ„ΠΎΠ½Π° ΠΏΠΎΠ΄ ΠΊΠ½ΠΎΠΏΠΊΠΎΠΉ, Π° ΡΠ°ΠΌΠ° ΠΊΠ½ΠΎΠΏΠΊΠ° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΡΠ΅Ρ€ΡƒΡŽ ΠΊΠΈΡΡ‚ΡŒ — Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ Π’Π°Ρˆ Π²Ρ‹Π±ΠΎΡ€ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ся.

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