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

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«Π˜ΡΡ‡Π΅Ρ€ΠΏΡ‹Π²Π°ΡŽΡ‰Π΅Π΅ руководство ΠΏΠΎ написанию Π²ΡΠΏΠ»Ρ‹Π²Π°ΡŽΡ‰ΠΈΡ… подсказок». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 9

Автор Π ΠΎΠ΄ΠΆΠ΅Ρ€ Π”ΠΆΠ΅ΠΊ

Π—Π°Ρ€ΡƒΡ‡ΠΈΠ²ΡˆΠΈΡΡŒ Ρ‚Π°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΎΠΉ, Π΄Π°Π²Π°ΠΉΡ‚Π΅ посмотрим, ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠΈ ΠΊ написанным Π²Π°ΠΌΠΈ подсказкам. Π― ΠΏΠΎΠΊΠ°ΠΆΡƒ, ΠΊΠ°ΠΊ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ эквивалСнт 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 – ΠΏΡ€ΠΈΠΌ.ΠΏΠ΅Ρ€.