ΠΠ°ΡΡΡΠΈΠ²ΡΠΈΡΡ ΡΠ°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΎΠΉ, Π΄Π°Π²Π°ΠΉΡΠ΅ ΠΏΠΎΡΠΌΠΎΡΡΠΈΠΌ, ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ Π·Π°Π΄Π΅ΡΠΆΠΊΠΈ ΠΊ Π½Π°ΠΏΠΈΡΠ°Π½Π½ΡΠΌ Π²Π°ΠΌΠΈ ΠΏΠΎΠ΄ΡΠΊΠ°Π·ΠΊΠ°ΠΌ. Π― ΠΏΠΎΠΊΠ°ΠΆΡ, ΠΊΠ°ΠΊ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ ΡΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½Ρ TTDT_AUTOPOP ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ TTM_SETDELAYTIME. Π‘ΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Ρ ΡΡΠΈΠΌ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠΌ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ Π²ΡΠ΅ΠΌΡ Π·Π°Π΄Π΅ΡΠΆΠΊΠΈ ΠΏΠ΅ΡΠ΅Π΄ ΡΠΊΡΡΡΠΈΠ΅ΠΌ ΠΏΠΎΠ΄ΡΠΊΠ°Π·ΠΊΠΈ, Π΅ΡΠ»ΠΈ ΠΊΡΡΡΠΎΡ ΠΌΡΡΠΈ Π½Π΅ΠΏΠΎΠ΄Π²ΠΈΠΆΠ΅Π½.
ΠΠΎ-ΠΏΠ΅ΡΠ²ΡΡ , Π΄ΠΎΠ±Π°Π²ΠΈΠΌ protectedβ ΠΈΠ»ΠΈ private-ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ Π² Π½Π°Ρ ΠΊΠ»Π°ΡΡ, ΡΡΠΎΠ±Ρ Ρ ΡΠ°Π½ΠΈΡΡ ID ΡΠ°ΠΉΠΌΠ΅ΡΠ° ΠΈ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΡ ΠΊΡΡΡΠΎΡΠ° ΠΌΡΡΠΈ, ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΠ΄ΡΠΊΠ°Π·ΠΊΠ° Π²ΠΈΠ΄Π½Π° Π½Π° ΡΠΊΡΠ°Π½Π΅. Π’Π°ΠΊΠΆΠ΅ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΡ, Π² ΠΊΠΎΡΠΎΡΠΎΠΉ Π±ΡΠ΄Π΅Ρ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡΡ Π²ΡΠ΅ΠΌΡ Π·Π°Π΄Π΅ΡΠΆΠΊΠΈ Π΄ΠΎ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΡΠΊΡΡΡΠΈΡ ΠΏΠΎΠ΄ΡΠΊΠ°Π·ΠΊΠΈ. ΠΠΎΠ΄ Π±ΡΠ΄Π΅Ρ Π²ΡΠ³Π»ΡΠ΄Π΅ΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ:
class CCustomTip: public CWnd {
.
.
.
protected:
const int m_nAutoPopDelay; // Π ΠΌΠΈΠ»Π»ΠΈΡΠ΅ΠΊΡΠ½Π΄Π°Ρ .
UINT m_nTimerId;
CPoint m_LastMousePosition;
.
.
.
};
Π ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ΅ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΠ΅ΠΌ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΡ m_nAutoPopDelay Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ 10000 (Π΄Π΅ΡΡΡΡ ΡΠ΅ΠΊΡΠ½Π΄), Π° m_nTimerId ΡΡΡΠ°Π½ΠΎΠ²ΠΈΠΌ Π² 0.
CCustomTip::CCustomTip : m_nAutoPopDelay(10000), m_LastMousePosition(0, 0) {
.
.
.
m_nTimerId = 0;
.
.
.
}
ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ Π»ΡΠ±ΠΎΠΉ ΠΈΠ½ΡΠ΅ΡΠ²Π°Π» β Ρ Π·Π°Π΄Π°Π» 10 ΡΠ΅ΠΊΡΠ½Π΄ ΡΠΎΠ»ΡΠΊΠΎ Π² ΡΠ΅Π»ΡΡ Π΄Π΅ΠΌΠΎΠ½ΡΡΡΠ°ΡΠΈΠΈ Π·Π°Π΄Π΅ΡΠΆΠΊΠΈ.
ΠΠΎΠ±Π°Π²ΡΡΠ΅ ΠΊΠΎΠ΄, ΠΊΠΎΡΠΎΡΡΠΉ Π·Π°ΠΏΡΡΠΊΠ°Π΅Ρ ΡΠ°ΠΉΠΌΠ΅Ρ, ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ ΠΏΠΎΠ΄ΡΠΊΠ°Π·ΠΊΠ°. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π΅ΡΠ»ΠΈ Π±Ρ ΡΡΡΠ΅ΡΡΠ²ΠΎΠ²Π°Π»Π° ΡΡΠ½ΠΊΡΠΈΡ CCustomTip::Show, Π²Ρ Π±Ρ Π΄ΠΎΠ±Π°Π²ΠΈΠ»ΠΈ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΠΊΠΎΠ΄ Π² ΠΌΠ΅ΡΠΎΠ΄, ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°ΡΡΠΈΠΉ ΠΎΠΊΠ½ΠΎ:
void CCustomTip::Show {
.
.
.
if (m_nTimerId > 0) {
VERIFY(KillTimer(m_nTimerId));
m_nTimerId = 0;
}
VERIFY(::GetCursorPos(&m_LastMousePosition));
m_nTimerId = SetTimer(1, m_nAutoPopDelay, NULL);
ASSERT(m_nTimerId != 0);
.
.
.
}
ΠΠΎΠ±Π°Π²ΡΡΠ΅ ΠΊΠΎΠ΄ Π΄Π»Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ ΡΠ°ΠΉΠΌΠ΅ΡΠ°. ΠΠΎΠ±Π°Π²ΡΡΠ΅ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ WM_TIMER Ρ ΠΏΠΎΠΌΠΎΡΡΡ ClassWizard. ΠΠΎΠ΄ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ° Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²ΡΠ³Π»ΡΠ΄Π΅ΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ:
void CTitleTip::OnTimer(UINT nIDEvent) {
CPoint CurrentMousePosition;
VERIFY(::GetCursorPos(&CurrentMousePosition));
if (CurrentMousePosition == m_LastMousePosition) {
Hide();
} else {
m_LastMousePosition = CurrentMousePosition;
}
}
ΠΠ°ΠΊΠΎΠ½Π΅Ρ, Π΄ΠΎΠ±Π°Π²ΡΡΠ΅ Π² CCustomTip::Hide ΠΊΠΎΠ΄, ΠΎΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°ΡΡΠΈΠΉ ΡΠ°ΠΉΠΌΠ΅Ρ:
void CCustomTip::Hide() {
if (m_nTimerId > 0) {
VERIFY(KillTimer(m_nTimerId));
m_nTimerId = 0;
} ShowWindow(SW_HIDE);
}
Π’Π°ΠΊΠΈΠΌ ΠΆΠ΅ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ Π΄ΡΡΠ³ΠΈΠ΅ ΡΠΈΠΏΡ Π·Π°Π΄Π΅ΡΠΆΠ΅ΠΊ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² ToolTip, Π½ΠΎ ΠΏΡΠΈΠ΄Π΅ΡΡΡ ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°ΡΡ Π±ΠΎΠ»ΡΡΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ, ΡΠ΅ΠΌ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΡ ΠΊΡΡΡΠΎΡΠ° ΠΌΡΡΠΈ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π΄Π»Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΡΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½ΡΠ° TTDT_RESHOW (ΠΈΠ½ΡΠ΅ΡΠ²Π°Π» Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΏΠ΅ΡΠ΅Π΄ ΠΏΠΎΠΊΠ°Π·ΠΎΠΌ ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ ΠΏΠΎΠ΄ΡΠΊΠ°Π·ΠΊΠΈ ΠΏΡΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ΅Π½ΠΈΠΈ ΠΊΡΡΡΠΎΡΠ° ΠΌΡΡΠΈ Π½Π° Π΄ΡΡΠ³ΡΡ ΡΡΡΠΎΠΊΡ, ΠΈΠ»ΠΈ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ) Π½ΡΠΆΠ½ΠΎ Π±ΡΠ΄Π΅Ρ ΡΠΎΠ·Π΄Π°ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ Π΄Π»Ρ Ρ ΡΠ°Π½Π΅Π½ΠΈΡ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΡΠΊΡΡΡΠΈΡ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅ΠΉ ΠΏΠΎΠ΄ΡΠΊΠ°Π·ΠΊΠΈ ΠΈ Π΅Π΅ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ³ΠΎ.
ΠΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ:
ΠΡΠΊΠ°Π» ΡΠΏΠΎΡΠΎΠ± ΠΏΠΎΠΏΡΠΎΡΠ΅ Π²ΠΊΠ»ΡΡΠΈΡΡ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΡ ToolTips Π±Π΅Π· ΡΠ²Π½ΠΎΠ³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΊΠ»Π°ΡΡΠ° CToolTipCtrl. Π Π² ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ ΡΠ°ΠΌ ΡΠ΄Π΅Π»Π°Π» ΡΠ»Π΅Π΄ΡΡΡΠ΅Π΅:
int CContentWnd::OnToolHitTest(CPoint point, TOOLINFO* pTI) const {
int nHit=0;
CString csText;
csText="ΠΠ°ΠΊΡΡΡΡ ΠΎΠΊΠ½ΠΎ";
HWND m_hWnd=this->GetSafeHwnd();
pTI->hwnd = m_hWnd;
pTI->uId = (UINT)m_hWnd;
pTI->uFlags = TTF_IDISHWND;
pTI->lpszText=new char[csText.GetLength()+1];
lstrcpy(pTI->lpszText,(LPCTSTR)csText);
return nHit;
}
ΠΠΎΠ΄ΡΠΊΠ°Π·ΠΊΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π²ΡΠ²ΠΎΠ΄ΠΈΡΡ Π² Π»ΡΠ±ΠΎΠΌ ΠΌΠ΅ΡΡΠ΅ ΠΎΠΊΠ½Π°
OLEGus1 15.8.2002 14:23ΠΡΠΈΠΌΠ΅ΡΠ°Π½ΠΈΡ
1
ΠΡΠ° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΡΡΠ°ΡΠ΅Π»Π°. Π‘Π΅ΠΉΡΠ°Ρ Π² ΠΊΠ»Π°ΡΡ CToolTipCtrl Π²Ρ ΠΎΠ΄ΠΈΡ ΡΡΠ½ΠΊΡΠΈΡ SetDelayTime, ΡΡΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΡΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½ΡΠ½Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΠΌ TTM_SETDELAYTIME β ΠΏΡΠΈΠΌ. ΠΏΠ΅ΡΠ΅Π².
2
Π΄Π»Ρ ΡΡΠΎΠΉ ΡΠ΅Π»ΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ°ΠΊΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ CToolTipCtrl::SetMaxTipWidth β ΠΏΡΠΈΠΌ.ΠΏΠ΅Ρ.
3
ΡΡΠΎ ΡΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½ΡΠ½ΠΎ CToolTipCtrl::SetDelayTime β ΠΏΡΠΈΠΌ.ΠΏΠ΅Ρ.
4
ΡΠΏΡΠ°Π²Π΅Π΄Π»ΠΈΠ²ΠΎΡΡΠΈ ΡΠ°Π΄ΠΈ Π½ΡΠΆΠ½ΠΎ ΡΠΊΠ°Π·Π°ΡΡ, ΡΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ SHRT_MAX Π΄Π°Π΅Ρ Π·Π°Π΄Π΅ΡΠΆΠΊΡ ΠΏΠΎΡΡΠ΄ΠΊΠ° 30 ΡΠ΅ΠΊΡΠ½Π΄, Π° Π½Π΅ ΠΎΡΠΊΠ»ΡΡΠ°Π΅Ρ Π°Π²ΡΠΎΠΈΡΡΠ΅Π·Π°Π½ΠΈΠ΅ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ β ΠΏΡΠΈΠΌ.ΠΏΠ΅Ρ.
5
ΡΡΠΎ ΡΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½ΡΠ½ΠΎ CToolTipCtrl::SetTipTextColor β ΠΏΡΠΈΠΌ.ΠΏΠ΅Ρ.