Π€ΡΠ½ΠΊΡΠΈΡ CTitleTipListBox::AdjustTitleTip ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅Ρ ΠΈΠ»ΠΈ ΠΏΡΡΡΠ΅Ρ ΡΠ»Π΅ΠΌΠ΅Π½Ρ TitleTip. ΠΠ°ΡΠ°ΠΌΠ΅ΡΡ nNewIndex ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΈΠ½Π΄Π΅ΠΊΡΠΎΠΌ ΡΡΡΠΎΠΊΠΈ Π΄Π»Ρ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ. ΠΠ½ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΡ m_nNoIndex, Π΅ΡΠ»ΠΈ ΠΏΠΎΠ΄ΡΠΊΠ°Π·ΠΊΠ° Π½Π΅ Π½ΡΠΆΠ½Π° Π½ΠΈ Π΄Π»Ρ ΠΎΠ΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ. Π€ΡΠ½ΠΊΡΠΈΡ ΡΠΎΠ·Π΄Π°Π΅Ρ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ToolTip, Π΅ΡΠ»ΠΈ ΠΎΠ½ Π΅ΡΠ΅ Π½Π΅ ΡΠΎΠ·Π΄Π°Π½. ΠΡΠ»ΠΈ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΈΠ½Π΄Π΅ΠΊΡΠ° ΡΡΡΠΎΠΊΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΡΡΡ m_nNoIndex, ΡΡΠ½ΠΊΡΠΈΡ ΠΏΡΡΡΠ΅Ρ ΡΠ΅ΠΊΡΡΡΡ ΠΏΠΎΠ΄ΡΠΊΠ°Π·ΠΊΡ. Π ΠΏΡΠΎΡΠΈΠ²Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΡΡΠ½ΠΊΡΠΈΡ ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ ΡΠ°Π·ΠΌΠ΅ΡΡ ΠΈΠ΄Π΅Π°Π»ΡΠ½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ Π²ΡΠ·ΠΎΠ²ΠΎΠΌ CTitleTipListBox::GetIdealItemRect. ΠΡΠ»ΠΈ ΡΠ°Π·ΠΌΠ΅ΡΡ ΠΈΠ΄Π΅Π°Π»ΡΠ½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡΡ Ρ ΡΠ°Π·ΠΌΠ΅ΡΠ°ΠΌΠΈ, Π²ΠΎΠ·Π²ΡΠ°ΡΠ΅Π½Π½ΡΠΌΠΈ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ CListBox::GetItemRect, ΡΠΎ Π² ΠΏΠΎΠ΄ΡΠΊΠ°Π·ΠΊΠ΅ Π½Π΅Ρ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ, ΠΈ ΠΏΠΎΠ΄ΡΠΊΠ°Π·ΠΊΠ° ΠΏΡΡΡΠ΅ΡΡΡ. ΠΡΠ»ΠΈ ΡΠ°Π·ΠΌΠ΅ΡΡ ΠΎΡΠ»ΠΈΡΠ°ΡΡΡΡ, ΡΠΎ ΡΡΠ½ΠΊΡΠΈΡ ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅Ρ ΡΠ°Π·ΠΌΠ΅ΡΡ ΠΈΠ΄Π΅Π°Π»ΡΠ½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ ΡΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΡΡΠΎΠ±Ρ ΠΎΠ½Π° ΠΏΠΎΠΌΠ΅ΡΡΠΈΠ»Π°ΡΡ Π½Π° ΡΠΊΡΠ°Π½Π΅ ΠΈ ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅Ρ ΠΏΠΎΠ΄ΡΠΊΠ°Π·ΠΊΡ. ΠΡΠ»ΠΈ ΡΠ»Π΅ΠΌΠ΅Π½Ρ TitleTip Π²ΠΈΠ΄ΠΈΠΌΠ°, Π΄Π΅Π»Π°Π΅ΡΡΡ Π·Π°Ρ Π²Π°Ρ ΠΌΡΡΠΈ, ΡΡΠΎΠ±Ρ ΡΠ·Π½Π°ΡΡ ΠΌΠΎΠΌΠ΅Π½Ρ, ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΠ΄ΡΠΊΠ°Π·ΠΊΡ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΡΠΊΡΡΡΡ. ΠΡΡΠ³ΠΈΠΌΠΈ ΡΠ»ΠΎΠ²Π°ΠΌΠΈ, Π΅ΡΠ»ΠΈ ΠΊΡΡΡΠΎΡ ΠΌΡΡΠΈ Π½Π΅ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ Π½ΠΈ Π½Π°Π΄ ΠΎΠ΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΎΠΉ, ΡΡΠ½ΠΊΡΠΈΡ Π΄ΠΎΠ»ΠΆΠ½Π° ΡΠΊΡΡΡΡ ΠΏΠΎΠ΄ΡΠΊΠ°Π·ΠΊΡ; Π΅ΡΠ»ΠΈ ΡΠ»Π΅ΠΌΠ΅Π½Ρ TitleTip Π½Π΅Π²ΠΈΠ΄ΠΈΠΌ, ΡΠΎ ΡΡΠ½ΠΊΡΠΈΡ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°Π΅Ρ ΠΌΡΡΡ. ΠΠ»Ρ Π·Π°Ρ Π²Π°ΡΠ° ΠΊΡΡΡΠΎΡΠ° ΠΌΡΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ CTitleTipListBox::CaptureMouse. ΠΠ½Π° ΡΠΎΡ ΡΠ°Π½ΡΠ΅Ρ ΠΏΠΎΠ·ΠΈΡΠΈΡ ΠΊΡΡΡΠΎΡΠ° Π² ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΠ΅ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°Ρ Π² ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ CTitleTipListBox::m_LastMouseMovePoint, Π° ΡΠ°ΠΊΠΆΠ΅ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ ΡΠ»Π°Π³ m_bMouseCaptured Π² Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ TRUE Π΄Π»Ρ ΠΈΠ½Π΄ΠΈΠΊΠ°ΡΠΈΠΈ ΡΠΎΠ³ΠΎ, ΡΡΠΎ ΠΊΡΡΡΠΎΡ ΠΌΡΡΠΈ ΡΠ΅ΠΏΠ΅ΡΡ Π·Π°Ρ Π²Π°ΡΠ΅Π½.
ΠΠ΅ΡΠΎΠ΄ CTitleTipListBox::IsAppActive Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ TRUE, Π΅ΡΠ»ΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ ΡΠ»Π΅ΠΌΠ΅Π½Ρ "ΡΠΏΠΈΡΠΎΠΊ", Π°ΠΊΡΠΈΠ²Π½ΠΎ. ΠΠΊΡΠΈΠ²Π½ΠΎΡΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΡΡΡ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ΠΌ Π°ΠΊΡΠΈΠ²Π½ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π° ΠΈ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΎΠΉ, ΡΠ²Π»ΡΠ΅ΡΡΡ Π»ΠΈ ΠΎΠ½ΠΎ ΠΎΠΊΠ½ΠΎΠΌ Π²Π΅ΡΡ Π½Π΅Π³ΠΎ ΡΡΠΎΠ²Π½Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ (ΠΈΠ»ΠΈ ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· Π΅Π³ΠΎ Π΄ΠΎΡΠ΅ΡΠ½ΠΈΡ ΠΎΠΊΠΎΠ½). ΠΡΠΎΡ ΠΌΠ΅ΡΠΎΠ΄ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π² CTitleTipListBox::OnMouseMove Π΄Π»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΡΠ΄ΠΎΡΡΠΎΠ²Π΅ΡΠΈΡΡΡΡ, ΡΡΠΎ ΠΏΠΎΠ΄ΡΠΊΠ°Π·ΠΊΠ° ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°Π΅ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΈ Π°ΠΊΡΠΈΠ²Π½ΠΎΠΌ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ.
CTitleTipListBox::OnContentChanged ΠΏΡΡΡΠ΅Ρ ΠΏΠΎΠ΄ΡΠΊΠ°Π·ΠΊΡ ΠΈ Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ ΠΏΠΎ Π½Π°ΡΡΡΠΏΠ»Π΅Π½ΠΈΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ ΡΠΎΠ±ΡΡΠΈΠΉ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠ³ΡΡ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° "ΡΠΏΠΈΡΠΎΠΊ". ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ LB_INSERTSTRING, ΠΊΠΎΡΠΎΡΠΎΠ΅ Π²ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΡΡΠΎΠΊΡ Π² ΡΠΏΠΈΡΠΎΠΊ, ΠΌΠΎΠΆΠ΅Ρ ΡΠ΄Π΅Π»Π°ΡΡ ΠΏΠΎΠ΄ΡΠΊΠ°Π·ΠΊΡ Π½Π΅Π°ΠΊΡΡΠ°Π»ΡΠ½ΠΎΠΉ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΠΏΠΎΡΠ»Π΅ Π²ΡΡΠ°Π²ΠΊΠΈ ΠΊΡΡΡΠΎΡ ΠΌΡΡΠΈ ΠΌΠΎΠΆΠ΅Ρ ΠΎΠΊΠ°Π·Π°ΡΡΡΡ Π½Π°Π΄ ΡΠΎΠ²ΡΠ΅ΠΌ Π΄ΡΡΠ³ΠΎΠΉ ΡΡΡΠΎΠΊΠΎΠΉ. Π‘ΠΏΠΈΡΠΎΠΊ ΡΠ°ΠΊΠΈΡ ΡΠΎΠ±ΡΡΠΈΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ²ΠΈΠ΄Π΅ΡΡ Π² ΠΊΠ°ΡΡΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ (message map) ΠΏΠΎ ΠΌΠ°ΠΊΡΠΎΡΠ°ΠΌ ON_MESSAGE. ΠΡ ΡΠΏΡΠΎΡΠΈΡΠ΅, ΠΏΠΎΡΠ΅ΠΌΡ Ρ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π» CWnd::PreTranslateMessage Π΄Π»Ρ ΠΏΠ΅ΡΠ΅Ρ Π²Π°ΡΠ° ΡΡΠΈΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ? Π§Π΅ΡΡΠ½ΠΎ Π³ΠΎΠ²ΠΎΡΡ, Ρ ΠΏΡΡΠ°Π»ΡΡ ΡΠ°ΠΊ ΠΈ ΡΠ΄Π΅Π»Π°ΡΡ, Π½ΠΎ CWnd::PreTranslateMessage ΠΏΠ΅ΡΠ΅Ρ Π²Π°ΡΡΠ²Π°Π΅Ρ ΡΠΎΠ»ΡΠΊΠΎ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΈΠ· ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ, Π° ΠΈΠ½ΡΠ΅ΡΠ΅ΡΡΡΡΠΈΠ΅ Π½Π°Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΡΠ²Π»ΡΡΡΡΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠΌ Π²ΡΠ·ΠΎΠ²Π° ΡΠ°ΠΌΠΎΠΉ Windows ΡΡΠ½ΠΊΡΠΈΠΈ SendMessage, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΌΠΈΠ½ΡΠ΅Ρ ΠΎΡΠ΅ΡΠ΅Π΄Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ.
CTitleTipListBox::OnMouseMove ΠΏΡΠΎΠ²Π΅ΡΡΠ΅Ρ, Π½Π΅ ΠΏΠΎΠΏΠ°Π΄Π°Π΅Ρ Π»ΠΈ ΠΊΡΡΡΠΎΡ ΠΌΡΡΠΈ Π½Π° ΠΊΠ°ΠΊΡΡ-Π½ΠΈΠ±ΡΠ΄Ρ ΡΡΡΠΎΠΊΡ, ΡΡΠΎΠ±Ρ ΠΏΠΎΠΊΠ°Π·Π°ΡΡ ΠΏΠΎΠ΄ΡΠΊΠ°Π·ΠΊΡ Π΄Π»Ρ ΡΡΠΎΠΉ ΡΡΡΠΎΠΊΠΈ. ΠΡΠ° ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΊΠΎΠ³Π΄Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Ρ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠΌ "ΡΠΏΠΈΡΠΎΠΊ" Π°ΠΊΡΠΈΠ²Π½ΠΎ ΠΈ ΠΊΡΡΡΠΎΡ ΠΌΡΡΠΈ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ» ΡΠ²ΠΎΠ΅ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Π― Π²ΡΡΡΠ½ΠΈΠ», ΡΡΠΎ Windows ΠΈΠ½ΠΎΠ³Π΄Π° ΠΏΠΎΡΡΠ»Π°Π΅Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ WM_MOUSEMOVE Π΄Π»Ρ ΠΎΠ΄Π½ΠΎΠΉ ΠΈ ΡΠΎΠΉ ΠΆΠ΅ ΠΏΠΎΠ·ΠΈΡΠΈΠΈ ΠΊΡΡΡΠΎΡΠ°, ΠΏΠΎΡΡΠΎΠΌΡ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ m_LastMouseMovePosition Π΄Π»Ρ ΡΠΈΠ»ΡΡΡΠ°ΡΠΈΠΈ ΡΡΠΈΡ Π»ΠΈΡΠ½ΠΈΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ. ΠΠ°Π»Π΅Π΅ CTitleTipListBox::OnMouseMove ΠΏΡΠΎΠ²Π΅ΡΡΠ΅Ρ, Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ Π»ΠΈ ΠΊΡΡΡΠΎΡ ΠΌΡΡΠΈ Π² ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΠΎΠΉ ΠΎΠ±Π»Π°ΡΡΠΈ ΡΠΏΠΈΡΠΊΠ°. ΠΡΡΡΠΎΡ Π²ΠΏΠΎΠ»Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ ΠΎΠΊΠ°Π·Π°ΡΡΡΡ Π·Π° ΠΏΡΠ΅Π΄Π΅Π»Π°ΠΌΠΈ ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΠΎΠΉ ΠΎΠ±Π»Π°ΡΡΠΈ ΠΈΠ·-Π·Π° Π·Π°Ρ Π²Π°ΡΠ° ΠΊΡΡΡΠΎΡΠ° ΠΌΡΡΠΈ. ΠΠ°Π±Π°Π²Π½ΡΠΉ ΠΏΠΎΠ±ΠΎΡΠ½ΡΠΉ ΡΡΡΠ΅ΠΊΡ Π½Π°Π±Π»ΡΠ΄Π°Π΅ΡΡΡ, Π΅ΡΠ»ΠΈ Π½Π΅ Π΄Π΅Π»Π°ΡΡ ΡΠ°ΠΊΠΎΠΉ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ β ΠΏΠΎΠ΄ΡΠΊΠ°Π·ΠΊΠ° ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΡΠ²ΠΈΡΡΡΡ Π΄Π»Ρ ΡΡΡΠΎΠΊ, Π½Π΅Π²ΠΈΠ΄ΠΈΠΌΡΡ Π² ΡΠΏΠΈΡΠΊΠ΅ Π² Π΄Π°Π½Π½ΡΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ. ΠΡΠ»ΠΈ ΠΆΠ΅ ΠΊΡΡΡΠΎΡ ΠΌΡΡΠΈ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ Π² ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΠΎΠΉ ΠΎΠ±Π»Π°ΡΡΠΈ ΡΠΏΠΈΡΠΊΠ°, CTitleTipListBox::OnMouseMove ΠΏΡΠΎΡ ΠΎΠ΄ΠΈΡ ΠΏΠΎ ΡΠΏΠΈΡΠΊΡ ΠΈ Π²ΡΡΡΠ½ΡΠ΅Ρ, Π½Π°Π΄ ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠΌΠ΅Π½Π½ΠΎ ΡΡΡΠΎΠΊΠΎΠΉ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ ΠΊΡΡΡΠΎΡ. ΠΡΠ»ΠΈ ΡΡΠΎ ΡΠ°ΠΊ, ΡΡΠ½ΠΊΡΠΈΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΡΡΠΎΡ ΠΈΠ½Π΄Π΅ΠΊΡ Π΄Π»Ρ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠΈ CTitleTipListBox::AdjustTitleTip.
CTitleTipListBox::OnSelchange ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π΅Ρ Π½ΠΎΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΎΠ½Π½ΠΎΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ LBN_SELCHANGE. ΠΡΠ»ΠΈ Π±ΡΠ»Π° Π²ΡΠ±ΡΠ°Π½Π° Π΄ΡΡΠ³Π°Ρ ΡΡΡΠΎΠΊΠ° Π² ΡΠΏΠΈΡΠΊΠ΅, ΡΠΎ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡΡΡΡ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ ΠΏΠΎΠ΄ΡΠΊΠ°Π·ΠΊΡ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π΅ΡΠ»ΠΈ Π²ΡΠ±ΡΠ°Π½Π° ΡΠ° ΠΆΠ΅ ΡΡΡΠΎΠΊΠ°, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΎΡΡΠ°ΠΆΠ°Π΅ΡΡΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠΌ TitleTip, ΡΠΎ TitleTip Π½ΡΠΆΠ½ΠΎ ΠΎΠ±Π½ΠΎΠ²ΠΈΡΡ Π΄Π»Ρ ΠΏΠΎΠΊΠ°Π·Π° Π²ΡΠ±ΡΠ°Π½Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ. ΠΠ°ΠΌΠ΅ΡΡΡΠ΅, ΡΡΠΎ CTitleTipListBox::OnSelchange ΡΠ°Π·Π»ΠΈΡΠ°Π΅Ρ ΡΠΏΠΈΡΠΊΠΈ Ρ ΠΎΠ΄ΠΈΠ½ΠΎΡΠ½ΡΠΌ ΠΈ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π΅Π½Π½ΡΠΌ Π²ΡΠ΄Π΅Π»Π΅Π½ΠΈΠ΅ΠΌ. ΠΠ»Ρ ΡΠΏΠΈΡΠΊΠΎΠ² Ρ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π΅Π½Π½ΡΠΌ Π²ΡΠ΄Π΅Π»Π΅Π½ΠΈΠ΅ΠΌ ΠΎΠ½Π° Π²ΡΠ·ΡΠ²Π°Π΅Ρ CListBox::GetCaretIndex, Π° Π΄Π»Ρ ΡΠΏΠΈΡΠΊΠΎΠ² Ρ ΠΎΠ΄ΠΈΠ½ΠΎΡΠ½ΡΠΌ Π²ΡΠ΄Π΅Π»Π΅Π½ΠΈΠ΅ΠΌ β CListBox::GetCurSel. ΠΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π½ΠΎΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΎΠ½Π½ΠΎΠ³ΠΎ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ LBN_SELCHANGE ΡΠ°ΠΊΠΆΠ΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°ΡΡ ΠΏΠΎΠ΄ΡΠΊΠ°Π·ΠΊΡ, ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π²ΡΠ±ΠΈΡΠ°Π΅Ρ ΡΡΡΠΎΠΊΠΈ ΠΊΠ»Π°Π²ΠΈΠ°ΡΡΡΠΎΠΉ, Π° Π½Π΅ ΠΌΡΡΡΡ.
CTitleTipListBox::OnKillFocus ΠΈ CTitleTipListBox::OnDestroy ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΏΡΠΎΡΡΡ. CTitleTipListBox::OnKillFocus ΠΏΡΡΡΠ΅Ρ ΠΏΠΎΠ΄ΡΠΊΠ°Π·ΠΊΡ, Π΅ΡΠ»ΠΈ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠΊΠ½ΠΎ, ΠΏΠΎΠ»ΡΡΠ°ΡΡΠ΅Π΅ ΡΠΎΠΊΡΡ, Π½Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΠΊΠ½ΠΎΠΌ ΠΏΠΎΠ΄ΡΠΊΠ°Π·ΠΊΠΈ. ΠΡΠΎ Π½ΡΠΆΠ½ΠΎ Π΄Π»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΠΏΡΡΡΠ°ΡΡ ΠΏΠΎΠ΄ΡΠΊΠ°Π·ΠΊΡ, ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ ΡΠΎ ΡΠΏΠΈΡΠΊΠ° ΠΊΠ»Π°Π²ΠΈΡΠ΅ΠΉ Tab. CTitleTipListBox::OnDestroy ΡΠΊΡΡΠ²Π°Π΅Ρ ΠΈ ΡΠ½ΠΈΡΡΠΎΠΆΠ°Π΅Ρ ΡΠ»Π΅ΠΌΠ΅Π½Ρ TitleTip.
CTitleTipListBox::OnLButtonDown ΠΏΠΎΠΌΠ΅ΡΠ°Π΅Ρ ΡΠ»Π΅ΠΌΠ΅Π½Ρ TitleTip Π΄Π»Ρ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠΎΠ²ΠΊΠΈ ΠΏΡΠΈ ΡΠΌΠ΅Π½Π΅ ΡΡΡΠΎΠΊΠΈ. Π― Π²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ ΠΎΡΠΊΠ»ΡΡΠ°Ρ Π·Π°Ρ Π²Π°Ρ ΠΌΡΡΠΈ ΠΏΠ΅ΡΠ΅Π΄ Π²ΡΠ·ΠΎΠ²ΠΎΠΌ ΡΡΠ½ΠΊΡΠΈΠΈ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ°, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ, ΠΊΠ°ΠΊ Π²ΡΡΡΠ½ΠΈΠ»ΠΎΡΡ, Π΅ΡΠ»ΠΈ ΡΡΠΎΠ³ΠΎ Π½Π΅ ΡΠ΄Π΅Π»Π°ΡΡ, Π½Π°ΡΡΡΠ°Π΅ΡΡΡ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌ Π²ΡΠ±ΠΎΡΠ° Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΡΡΡΠΎΠΊ (ΠΊΠΎΠ³Π΄Π° Π²Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ°Π΅ΡΠ΅ ΠΊΡΡΡΠΎΡ ΠΌΡΡΠΈ ΠΏΠΎ ΡΡΡΠΎΠΊΠ°ΠΌ, ΡΠ΄Π΅ΡΠΆΠΈΠ²Π°Ρ Π»Π΅Π²ΡΡ ΠΊΠ½ΠΎΠΏΠΊΡ). ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ Ρ Π½Π΅ ΠΏΠΎΡΠ²ΡΡΠ΅Π½ Π² ΡΠ°ΠΉΠ½Ρ Π²Π½ΡΡΡΠ΅Π½Π½Π΅Π³ΠΎ ΡΡΡΡΠΎΠΉΡΡΠ²Π° ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠ³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° "ΡΠΏΠΈΡΠΎΠΊ", Ρ ΠΌΠΎΠ³Ρ Π»ΠΈΡΡ Π΄ΠΎΠ³Π°Π΄ΡΠ²Π°ΡΡΡΡ ΠΎ ΠΏΡΠΈΡΠΈΠ½Π°Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ. ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΡΠΏΠΈΡΠΎΠΊ ΡΠ°ΠΌ Π·Π°Ρ Π²Π°ΡΡΠ²Π°Π΅Ρ ΠΌΡΡΡ ΠΏΡΠΈ Π½Π°ΠΆΠ°ΡΠΈΠΈ Π»Π΅Π²ΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΠΈ ΠΌΡΡΠΈ Π΄Π»Ρ ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°Π½ΠΈΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ΅Π½ΠΈΠΉ ΠΊΡΡΡΠΎΡΠ°.
CTitleTipListBox::OnLButtonUp Π·Π°Ρ Π²Π°ΡΡΠ²Π°Π΅Ρ ΠΊΡΡΡΠΎΡ ΠΌΡΡΠΈ, Π΅ΡΠ»ΠΈ ΠΎΠΊΠ½ΠΎ ΠΏΠΎΠ΄ΡΠΊΠ°Π·ΠΊΠΈ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½Π° ΡΠΊΡΠ°Π½Π΅ ΠΈ CTitleTipListBox Π΅ΡΠ΅ Π½Π΅ Π·Π°Ρ Π²Π°ΡΠΈΠ» ΠΌΡΡΡ. CTitleTipListBox::PreTranslateMessage ΡΠ»Π΅Π΄ΠΈΡ Π·Π° Π΄ΡΡΠ³ΠΈΠΌΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡΠΌΠΈ ΠΎΡ ΠΌΡΡΠΈ ΠΈ Π΄Π΅Π»Π°Π΅Ρ ΠΎΠΊΠ½ΠΎ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΡ Π°ΠΊΡΠΈΠ²Π½ΡΠΌ, Π΅ΡΠ»ΠΈ ΡΠΏΠΈΡΠΎΠΊ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ Π² ΡΡΠΎΠΌ ΠΎΠΊΠ½Π΅. Π― ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π» ΡΡΠΎ Π΄Π»Ρ ΠΈΠΌΠΈΡΠ°ΡΠΈΠΈ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΡ MFC-ΠΎΠΊΠ½Π° ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΡ, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ΠΎ ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ WM_MOUSEACTIVATE. ΠΠ½Π°ΡΠ΅ ΠΎΠΊΠ½ΠΎ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΎΠΏΡΡΡΠΈΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎΠ± Π°ΠΊΡΠΈΠ²Π°ΡΠΈΠΈ ΠΌΡΡΡΡ, ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΡΠ΅Π»ΠΊΠ°Π΅Ρ Π½Π° ΠΎΠΊΠ½Π΅ ΠΏΠΎΠ΄ΡΠΊΠ°Π·ΠΊΠΈ.
CODListBox ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ±ΠΎΠΉ ΠΏΡΠΈΠΌΠ΅Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΏΠΎΠ΄ΡΠΊΠ°Π·ΠΎΠΊ TitleTips Π΄Π»Ρ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° "ΡΠΏΠΈΡΠΎΠΊ" Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΎΠΉ ΠΎΡΡΠΈΡΠΎΠ²ΠΊΠΎΠΉ (ΡΠΌ. ΡΠΈΡ.13). ΠΠΎΠ½ΡΡΠ°Π½ΡΠ° CODListBox::m_nEdgeSpace ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΡ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΏΠΎ ΠΊΡΠ°ΡΠΌ ΡΠ΅ΠΊΡΡΠ°. ΠΠΎΠ½ΡΡΠ°Π½ΡΠ° CODListBox::m_nFontHeight ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΠΆΠ΅Π»Π°Π΅ΠΌΡΡ Π²ΡΡΠΎΡΡ ΡΡΠΈΡΡΠ° Π΄Π»Ρ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΡΡΡΠΎΠΊ. Π ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ CODListBox::m_Font Ρ ΡΠ°Π½ΠΈΡΡΡ ΡΡΠΈΡΡ Π΄Π»Ρ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΡΡΡΠΎΠΊ. CODListBox::CODListBox ΡΠΎΠ·Π΄Π°Π΅Ρ ΡΡΠΈΡΡ (m_Font) ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ Π΅Π³ΠΎ ΠΏΡΠΈ ΠΎΡΡΠΈΡΠΎΠ²ΠΊΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° "ΡΠΏΠΈΡΠΎΠΊ".
Π ΠΈΡ.13. CODListBox
// ODListBox.h : header file
//
/////////////////////////////////////////////////////////////////////////////
// CODListBox window
#include "TitleTipListBox.h"
class CODListBox : public CTitleTipListBox { // Construction public:
CODListBox();
// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CODListBox)
public:
virtual void DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct);
virtual void MeasureItem(LPMEASUREITEMSTRUCT lpMeasureItemStruct);
//}}AFX_VIRTUAL
// Implementation
public:
virtual ~CODListBox();
protected:
const int m_nEdgeSpace; // ΠΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎΠ΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ Π²ΠΎΠΊΡΡΠ³ ΡΠ΅ΠΊΡΡΠ°
const int m_nFontHeight; // ΠΡΡΠΎΡΠ° ΡΡΠΈΡΡΠ°
CFont m_Font; // Π¨ΡΠΈΡΡ Π΄Π»Ρ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΡΡΡΠΎΠΊ
virtual int GetIdealItemRect(int nIndex, LPRECT lpRect);
// Generated message map functions protected:
//{{AFX_MSG(CODListBox)
// NOTE β the ClassWizard will add and remove member functions here.
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
///////////////////////////////////////////////////////////////////////////// // ODListBox.cpp : implementation file //
#include "stdafx.h"
#include "TTDemo.h"
#include "ODListBox.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CODListBox
CODListBox::CODListBox() : m_nEdgeSpace(4), m_nFontHeight(20) {
VERIFY(m_Font.CreateFont(m_nFontHeight, 0, 0, 0, FW_BOLD, 0, 0, 0, ANSI_CHARSET, OUT_TT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH | FF_DONTCARE, "Arial"));
}
CODListBox::~CODListBox() { }
int CODListBox::GetIdealItemRect(int nIndex, LPRECT lpRect) {
ASSERT(nIndex >= 0);
int nResult = GetItemRect(nIndex, lpRect);
if (nResult != LB_ERR) {
CClientDC DC(this);
CFont* pOldFont = DC.SelectObject(&m_Font);
// Calculate the text length.
CString strItem;
GetText(nIndex, strItem);
CSize TextSize = DC.GetTextExtent(strItem);
// ΠΠ·ΡΡΡ ΠΌΠ°ΠΊΡΠΈΠΌΡΠΌ ΠΎΡ ΠΎΠ±ΡΡΠ½ΠΎΠΉ ΡΠΈΡΠΈΠ½Ρ ΠΈ ΠΈΠ΄Π΅Π°Π»ΡΠ½ΠΎΠΉ ΡΠΈΡΠΈΠ½Ρ.
lpRect->right = max(lpRect->right, lpRect->left + TextSize.cx + (m_nEdgeSpace * 2));
DC.SelectObject(pOldFont);
}
return nResult;
}
BEGIN_MESSAGE_MAP(CODListBox, CTitleTipListBox)
//{{AFX_MSG_MAP(CODListBox)
// NOTE β the ClassWizard will add and remove mapping macros here.
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CODListBox message handlers
void CODListBox::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct) {
CDC* pDC = CDC::FromHandle(lpDrawItemStruct->hDC);
ASSERT_VALID(pDC);
int nSavedDC = pDC->SaveDC();
CString strItem;
if (lpDrawItemStruct->itemID != β1) {
GetText(lpDrawItemStruct->itemID, strItem);
}
COLORREF TextColor;
COLORREF BackColor;
UINT nItemState = lpDrawItemStruct->itemState;
if (nItemState & ODS_SELECTED) {
TextColor = RGB(255, 255, 255); // ΠΠ΅Π»ΡΠΉ
BackColor = RGB(255, 0, 0); // ΠΡΠ°ΡΠ½ΡΠΉ
} else {
TextColor = RGB(255, 0, 0); // ΠΡΠ°ΡΠ½ΡΠΉ
BackColor = RGB(255, 255, 255); // ΠΠ΅Π»ΡΠΉ
}