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

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

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

 //{{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); // Π‘Π΅Π»Ρ‹ΠΉ

 }

 CRect ItemRect(lpDrawItemStruct->rcItem);

 // ΠΠ°Ρ€ΠΈΡΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΠΎΠ½

 pDC->FillSolidRect(ItemRect, BackColor);

 // ΠΠ°Ρ€ΠΈΡΠΎΠ²Π°Ρ‚ΡŒ тСкст

 pDC->SetTextColor(TextColor);

 pDC->SetBkMode(TRANSPARENT);

 pDC->SelectObject(&m_Font);

 ItemRect.left += m_nEdgeSpace;

 pDC->DrawText(strItem, ItemRect, DT_LEFT | DT_SINGLELINE | DT_VCENTER);

 ItemRect.left –= m_nEdgeSpace;

 // ΠΠ°Ρ€ΠΈΡΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎ нСобходимости Ρ€Π°ΠΌΠΊΡƒ фокуса

 if (nItemState & ODS_FOCUS) {

  pDC->DrawFocusRect(ItemRect);

 }

 pDC->RestoreDC(nSavedDC);

}


void CODListBox::MeasureItem(LPMEASUREITEMSTRUCT lpMeasureItemStruct) {

 lpMeasureItemStruct->itemHeight = m_nFontHeight + (m_nEdgeSpace * 2);

}

CODListBox::GetIdealItemRect ΠΏΠ΅Ρ€Π΅ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ Ρ‚Π°ΠΊΠΎΠΉ ΠΆΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π² классС CTitleTipListBox. Как Π²Ρ‹ Π²ΠΈΠ΄ΠΈΡ‚Π΅, Π΅Π³ΠΎ рСализация ΠΏΠΎΡ…ΠΎΠΆΠ° Π½Π° Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π² Π±Π°Π·ΠΎΠ²ΠΎΠΌ классС, Π·Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Π½ΠΎΠ²Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ для ΡˆΡ€ΠΈΡ„Ρ‚Π° ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ m_Font. ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, я ΠΌΠΎΠ³ Π±Ρ‹ Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π° ΠΈ Π±Π΅Π· пСрСопрСдСлСния ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса, Ссли Π±Ρ‹ воспользовался CWnd::SetFont для установки ΡˆΡ€ΠΈΡ„Ρ‚Π° для списка. Однако я Ρ…ΠΎΡ‚Π΅Π» ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅ΠΊΡ€Ρ‹Π²Π°Ρ‚ΡŒ этот ΠΌΠ΅Ρ‚ΠΎΠ΄ Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… случаях. НапримСр, Π²Π°ΠΌ придСтся ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ CTitleTipListBox::GetIdealItemRect, Ссли Π²Ρ‹ Π·Π°Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π² спискС ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠΈ.

CODListBox::DrawItem рисуСт строку ΠΏΠΎ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΈΠ· структуры DrawItemStruct. Π­Ρ‚ΠΎΡ‚ ΠΊΠΎΠ΄ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π΅Π½ ΠΊΠΎΠ΄Ρƒ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ CTitleTip::OnPaint, Π·Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ вмСсто Ρ†Π²Π΅Ρ‚ΠΎΠ² ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ красный ΠΈ Π±Π΅Π»Ρ‹ΠΉ Ρ†Π²Π΅Ρ‚Π°. ΠŸΠΎΠΌΠ½ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ этот ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒΡΡ ΠΈΠ· класса CTitleTip для рисования Π²Π½ΡƒΡ‚Ρ€ΠΈ Π΅Π³ΠΎ ΠΎΠΊΠ½Π°.

CODListBox::MeasureItem вычисляСт высоту строки Π½Π° основС ΡˆΡ€ΠΈΡ„Ρ‚Π° ΠΈ Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ пустого пространства Π²ΠΎΠΊΡ€ΡƒΠ³ тСкста. Π­Ρ‚ΠΎΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ вызываСтся Windows Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π·, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Ρƒ этого элСмСнта "список" установлСн ΡΡ‚ΠΈΠ»ΡŒ LBS_OWNERDRAWFIXED. Π’ случаС со стилСм LBS_OWNERDRAWVARIABLE ΠΌΠ΅Ρ‚ΠΎΠ΄ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒΡΡ для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ строки.

Π’ Π΄ΠΈΠ°Π»ΠΎΠ³Π΅ CTTDemoDlg ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‚ ΠΎΠ±Π° рассмотрСнных элСмСнта "список", ΠΈ большая Ρ‡Π°ΡΡ‚ΡŒ ΠΊΠΎΠ΄Π° Π±Ρ‹Π»Π° сгСнСрирована AppWizard'ΠΎΠΌ (см. рис.14). Π― Π΄ΠΎΠ±Π°Π²ΠΈΠ» Π² класс ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ m_RegListBox ΠΈ m_ODListBox для ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠ³ΠΎ списка ΠΈ списка с ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠΉ отрисовкой, соотвСтствСнно. Π•Ρ‰Π΅ я Π΄ΠΎΠ±Π°Π²ΠΈΠ» ΠΊΠΎΠ΄ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ CTTDemoDlg::OnInitDialog, Π³Π΄Π΅ производится сабклассинг ΠΎΠ±ΠΎΠΈΡ… элСмСнтов "список" Π²Ρ‹Π·ΠΎΠ²ΠΎΠΌ CWnd::SubclassWindow. Π― Π·Π°Π³Ρ€ΡƒΠΆΠ°ΡŽ ΠΎΠ±Π° списка ΠΈΠ· статичСского массива pszItemArray.

Рис.14. CTTDemoDlg

// TTDemoDlg.h : header file /////////////////////////////////////////////////////////////////////////////

// CTTDemoDlg dialog


#include "TitleTipListBox.h"

#include "ODListBox.h"

class CTTDemoDlg : public CDialog { // Construction public:

 CTTDemoDlg(CWnd* pParent = NULL); // standard constructor

// Dialog Data

 //{{AFX_DATA(CTTDemoDlg)

 enum { IDD = IDD_TTDEMO_DIALOG };

 // NOTE: the ClassWizard will add data members here

 //}}AFX_DATA

 // ClassWizard generated virtual function overrides

 //{{AFX_VIRTUAL(CTTDemoDlg)

protected:

 virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support

 //}}AFX_VIRTUAL

 // Implementation

protected:

 HICON m_hIcon;

 CTitleTipListBox m_RegListBox; // ΠžΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ список

 CODListBox m_ODListBox; // Бписок с ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠΉ отрисовкой

 // Generated message map functions

 //{{AFX_MSG(CTTDemoDlg)

 virtual BOOL OnInitDialog();

 afx_msg void OnPaint();

 afx_msg HCURSOR OnQueryDragIcon();

 //}}AFX_MSG

 DECLARE_MESSAGE_MAP()

};


// TTDemoDlg.cpp : implementation file

#include "stdafx.h"

#include "TTDemo.h"

#include "TTDemoDlg.h"


#ifdef _DEBUG

#define new DEBUG_NEW

#undef THIS_FILE

static char THIS_FILE[] = __FILE__;

#endif


/////////////////////////////////////////////////////////////////////////////

// CTTDemoDlg dialog

CTTDemoDlg::CTTDemoDlg(CWnd* pParent /*=NULL*/) : CDialog(CTTDemoDlg::IDD, pParent) {

 //{{AFX_DATA_INIT(CTTDemoDlg)

 // NOTE: the ClassWizard will add member initialization here

 //}}AFX_DATA_INIT

 // Note that LoadIcon does not require a subsequent DestroyIcon in Win32

 m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);

}


void CTTDemoDlg::DoDataExchange(CDataExchange* pDX) {

 CDialog::DoDataExchange(pDX);

 //{{AFX_DATA_MAP(CTTDemoDlg)

 // NOTE: the ClassWizard will add DDX and DDV calls here

 //}}AFX_DATA_MAP

}


BEGIN_MESSAGE_MAP(CTTDemoDlg, CDialog)

 //{{AFX_MSG_MAP(CTTDemoDlg)

 ON_WM_PAINT()

 ON_WM_QUERYDRAGICON()

 //}}AFX_MSG_MAP

END_MESSAGE_MAP()


/////////////////////////////////////////////////////////////////////////////

// CTTDemoDlg message handlers

BOOL CTTDemoDlg::OnInitDialog() {

 CDialog::OnInitDialog();

 // Set the icon for this dialog. The framework does this automatically

 // when the application's main window is not a dialog

 SetIcon(m_hIcon, TRUE); // Set big icon

 SetIcon(m_hIcon, FALSE); // Set small icon

 // Бабклассинг ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠ³ΠΎ элСмСнта "список"

 HWND hwndRegListBox = ::GetDlgItem(GetSafeHwnd(), IDC_REGLISTBOX);

 ASSERT(hwndRegListBox);

 VERIFY(m_RegListBox.SubclassWindow(hwndRegListBox));

 // Бабклассинг списка с ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠΉ отрисовкой

 HWND hwndODListBox = ::GetDlgItem(GetSafeHwnd(), IDC_ODLISTBOX);

 ASSERT(hwndODListBox);

 VERIFY(m_ODListBox.SubclassWindow(hwndODListBox));

 // Π—Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΎΠ±ΠΎΠΈΡ… списков строками

 static char* pszItemArray[] = {

  "The C++ Programming Language",

  "C++ Primer",

  "OLE Controls Inside Out",

  "Inside OLE 2nd Edition",

  "Inside ODBC",

  "Code Complete",

  "Rapid Software Development",

  "The Design Of Everyday Things",

  "Object-Oriented Analysis And Design",

  "MFC Internals",

  "Animation Techniques In Win32",

  "Inside Visual C++",

  "Writing Solid Code",

  "Learn Java Now"

 };

 static int nItemArrayCount = sizeof(pszItemArray) / sizeof(pszItemArray[0]);

 for (int n = 0; n < nItemArrayCount; n++) {

  VERIFY(m_RegListBox.AddString(pszItemArray[n]) != LB_ERR);

  VERIFY(m_ODListBox.AddString(pszItemArray[n]) != LB_ERR);

 }

 return TRUE; // return TRUE unless you set the focus to a control

}


// If you add a minimize button to your dialog, you will need the code below

// to draw the icon. For MFC applications using the document/view model,

// this is automatically done for you by the framework.

void CTTDemoDlg::OnPaint() {

 if (IsIconic()) {

  CPaintDC dc(this); // device context for painting

  SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);

  // Center icon in client rectangle

  int cxIcon = GetSystemMetrics(SM_CXICON);

  int cyIcon = GetSystemMetrics(SM_CYICON);

  CRect rect;

  GetClientRect(&rect);

  int x = (rect.Width() – cxIcon + 1) / 2;

  int y = (rect.Height() – cyIcon + 1) / 2;

  // Draw the icon

  dc.DrawIcon(x, y, m_hIcon);

 } else {

  CDialog::OnPaint();

 }

}


// The system calls this to obtain the cursor to display while the user drags

// the minimized window.

HCURSOR CTTDemoDlg::OnQueryDragIcon() {

 return (HCURSOR) m_hIcon;

}

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

Π˜Ρ‚Π°ΠΊ, я Π΄Π°Π» Π²Π°ΠΌ ΠΏΡΡ‚ΡŒ совСтов ΠΏΠΎ использованию подсказок. НадСюсь, ΠΎΠ½ΠΈ вдохновят вас Π½Π° Π±ΠΎΠ»Π΅Π΅ ΡˆΠΈΡ€ΠΎΠΊΠΎΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ подсказок ToolTips, TitleTips ΠΈ DataTips Π² Π²Π°ΡˆΠΈΡ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°Ρ… ΠΈ Web-страницах. А ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ, Π²Ρ‹ Π΄Π°ΠΆΠ΅ ΠΏΡ€ΠΈΠ΄ΡƒΠΌΠ°Π΅Ρ‚Π΅ Π½ΠΎΠ²Ρ‹ΠΉ Π²ΠΈΠ΄ подсказок, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΠΏΠΎΠ΄Π΅Π»ΠΈΡ‚Π΅ΡΡŒ со всСми Π½Π°ΠΌΠΈ!

Автор Π²Ρ‹Ρ€Π°ΠΆΠ°Π΅Ρ‚ Π±Π»Π°Π³ΠΎΠ΄Π°Ρ€Π½ΠΎΡΡ‚ΡŒ Π‘ΠΈΠ»Π»Ρƒ Кинсли ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠΌ ΠΈΠ· ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ AM Communications, Inc.

Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π·Π°Π΄Π΅Ρ€ΠΆΠ΅ΠΊ ΠΊ подсказкам

Π­Π»Π΅ΠΌΠ΅Π½Ρ‚ TitleTip, созданный ΠΌΠ½ΠΎΠΉ, Π½Π΅ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ возмоТностСй добавлСния Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠΈ ΠΏΠ΅Ρ€Π΅Π΄ ΠΏΠΎΠΊΠ°Π·ΠΎΠΌ подсказки, прСдоставляСмых стандартным элСмСнтом ToolTip с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ сообщСния TTM_SETDELAYTIME. Π― Π½Π΅ стал Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ Π·Π°Π΄Π΅Ρ€ΠΆΠ΅ΠΊ ΠΏΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ Microsoft, которая Ρ‚Π°ΠΊΠΆΠ΅ Π½Π΅ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π»Π° Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠΈ Π² своих TitleTip'Π°Ρ…. Однако, Π² Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ Π΄Ρ€ΡƒΠ³ΠΈΡ… Π²ΠΈΠ΄ΠΎΠ² подсказок эта Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠ° присутствуСт, поэтому Ссли Π²Ρ‹ ΠΆΠ΅Π»Π°Π΅Ρ‚Π΅ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π·Π°Π΄Π΅Ρ€ΠΆΠΊΡƒ ΠΏΠ΅Ρ€Π΅Π΄ ΠΏΠΎΠΊΠ°Π·ΠΎΠΌ Π²Π°ΡˆΠΈΡ… самописных подсказок, я объясню, ΠΊΠ°ΠΊ это ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ.

Π’ ΠΎΠ±Ρ‰Π΅ΠΌ случаС, Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠΈ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‚ΡΡ Ρ‡Π΅Ρ€Π΅Π· Windows-Ρ‚Π°ΠΉΠΌΠ΅Ρ€Ρ‹. Π’ классС CWnd Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹ Π΄Π²Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ относятся ΠΊ Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π°ΠΌ: CWnd::SetTimer ΠΈ CWnd::KillTimer. CWnd::SetTimer устанавливаСт Ρ‚Π°ΠΉΠΌΠ΅Ρ€, ΠΈ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π² качСствС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ID Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π°, Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π» Π² миллисСкундах ΠΈ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌΡƒΡŽ ΠΏΠΎ ΠΈΡΡ‚Π΅Ρ‡Π΅Π½ΠΈΡŽ ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»Π°. Если ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Ρ€Π°Π²Π΅Π½ NULL, Ρ‚ΠΎ Ρ‚Π°ΠΉΠΌΠ΅Ρ€ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ сообщСниС WM_TIMER для увСдомлСния ΠΎΠΊΠ½Π° ΠΎ Π½Π°ΡΡ‚ΡƒΠΏΠΈΠ²ΡˆΠ΅ΠΌ событии. CWnd::KillTimer останавливаСт Ρ‚Π°ΠΉΠΌΠ΅Ρ€, принимая Π² качСствС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° ID Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π°.

Π—Π°Ρ€ΡƒΡ‡ΠΈΠ²ΡˆΠΈΡΡŒ Ρ‚Π°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΎΠΉ, Π΄Π°Π²Π°ΠΉΡ‚Π΅ посмотрим, ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠΈ ΠΊ написанным Π²Π°ΠΌΠΈ подсказкам. Π― ΠΏΠΎΠΊΠ°ΠΆΡƒ, ΠΊΠ°ΠΊ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ эквивалСнт TTDT_AUTOPOP сообщСния TTM_SETDELAYTIME. Π‘ΠΎΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ с этим ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ устанавливаСт врСмя Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠΈ ΠΏΠ΅Ρ€Π΅Π΄ скрытиСм подсказки, Ссли курсор ΠΌΡ‹ΡˆΠΈ Π½Π΅ΠΏΠΎΠ΄Π²ΠΈΠΆΠ΅Π½.