Π ΠΈΡ.10. ΠΠΈΠ°Π³ΡΠ°ΠΌΠΌΠ° ΠΊΠ»Π°ΡΡΠΎΠ² Π΄Π»Ρ ΠΏΡΠΈΠΌΠ΅ΡΠ° ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² ToolTip
ΠΠ»Π°ΡΡ CTitleTip ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΠΎΠΊΠ½ΠΎ ΠΏΠΎΠ΄ΡΠΊΠ°Π·ΠΊΠΈ (ΡΠΌ. ΡΠΈΡ.11). Π ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠΉ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ CTitleTip::m_pszWndClass Ρ ΡΠ°Π½ΠΈΡΡΡ Π·Π°ΡΠ΅Π³ΠΈΡΡΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΈΠΌΡ ΠΊΠ»Π°ΡΡΠ° ΠΎΠΊΠ½Π°. ΠΠΌΡ Ρ ΡΠ°Π½ΠΈΡΡΡ Π² ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠΉ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΠΊΠ»Π°ΡΡ ΠΎΠΊΠ½Π° Π½ΡΠΆΠ½ΠΎ Π·Π°ΡΠ΅Π³ΠΈΡΡΡΠΈΡΠΎΠ²Π°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΡΠ°Π· Π΄Π»Ρ Π²ΡΠ΅Ρ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠΎΠ² CTitleTip. CTitleTip::m_nItemIndex β ΡΡΠΎ ΠΈΠ½Π΄Π΅ΠΊΡ ΡΡΡΠΎΠΊΠΈ Π² ΡΠΏΠΈΡΠΊΠ΅, Π΄Π»Ρ ΠΊΠΎΡΠΎΡΠΎΠΉ Π² Π΄Π°Π½Π½ΡΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ Π²ΡΠ²ΠΎΠ΄ΠΈΡΡΡ ΠΏΠΎΠ΄ΡΠΊΠ°Π·ΠΊΠ°. ΠΡΠ° ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΡ CTitleTip::m_nNoIndex, Π΅ΡΠ»ΠΈ ΠΏΠΎΠ΄ΡΠΊΠ°Π·ΠΊΠ° Π½Π΅ Π²ΡΠ²ΠΎΠ΄ΠΈΡΡΡ Π½ΠΈ Π΄Π»Ρ ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· ΡΡΡΠΎΠΊ. CTitleTip::m_pListBox Ρ ΡΠ°Π½ΠΈΡ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΡΠΎΠ΄ΠΈΡΠ΅Π»ΡΡΠΊΠΎΠ΅ ΠΎΠΊΠ½ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° TitleTip. Π ΠΎΠ΄ΠΈΡΠ΅Π»ΡΡΠΊΠΎΠ΅ ΠΎΠΊΠ½ΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±ΡΡΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠΌ "ΡΠΏΠΈΡΠΎΠΊ", ΡΡΠΎΠ±Ρ Ρ ΡΠΌΠΎΠ³ Π²Π·ΡΡΡ ΠΎΡΡΡΠ΄Π° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π΄Π»Ρ ΠΏΠΎΠ΄ΡΠΊΠ°Π·ΠΊΠΈ.
Π ΠΈΡ.11. CTitleTip
/////////////////////////////////////////////////////////////////////////////
// CTitleTip window
class CTitleTip : public CWnd {
public:
CTitleTip();
virtual BOOL Create(CListBox* pParentWnd);
virtual void Show(CRect DisplayRect, int nItemIndex);
virtual void Hide();
// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CTitleTip)
//}}AFX_VIRTUAL
// Implementation
public:
virtual ~CTitleTip();
protected:
const int m_nNoIndex; // ΠΡΡΡΠΎΠΉ ΠΈΠ½Π΄Π΅ΠΊΡ
static LPCSTR m_pszWndClass; // ΠΠΌΡ Π·Π°ΡΠ΅Π³ΠΈΡΡΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ°
int m_nItemIndex; // ΠΠ½Π΄Π΅ΠΊΡ ΡΡΡΠΎΠΊΠΈ, Π΄Π»Ρ ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ ΠΏΠΎΠ΄ΡΠΊΠ°Π·ΠΊΠ°
CListBox* m_pListBox; // Π ΠΎΠ΄ΠΈΡΠ΅Π»ΡΡΠΊΠΎΠ΅ ΠΎΠΊΠ½ΠΎ
BOOL IsListBoxOwnerDraw();
// Generated message map functions
protected:
//{{AFX_MSG(CTitleTip)
afx_msg void OnPaint();
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
/////////////////////////////////////////////////////////////////////////////
// TitleTip.cpp : implementation file //
#include "stdafx.h"
#include "TitleTip.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CTitleTip
LPCSTR CTitleTip::m_pszWndClass = NULL;
CTitleTip::CTitleTip() : m_nNoIndex(-1) {
// ΠΠ°ΡΠ΅Π³ΠΈΡΡΡΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠ»Π°ΡΡ ΠΎΠΊΠ½Π°, Π΅ΡΠ»ΠΈ ΠΎΠ½ Π΅ΡΠ΅ Π½Π΅ Π·Π°ΡΠ΅Π³ΠΈΡΡΡΠΈΡΠΎΠ²Π°Π½
// Π΄ΡΡΠ³ΠΈΠΌ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠΎΠΌ CTitleTip.
if (m_pszWndClass == NULL) {
m_pszWndClass = AfxRegisterWndClass(CS_SAVEBITS | CS_HREDRAW | CS_VREDRAW);
}
m_nItemIndex = m_nNoIndex;
m_pListBox = NULL;
}
CTitleTip::~CTitleTip() { }
BOOL CTitleTip::Create(CListBox* pParentWnd) {
ASSERT_VALID(pParentWnd);
m_pListBox = pParentWnd;
// ΠΠ΅ ΡΠΈΡΠΎΠ²Π°ΡΡ ΡΠ°ΠΌΠΊΡ Π΄Π»Ρ ΠΎΠ±ΡΡΠ½ΡΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² "ΡΠΏΠΈΡΠΎΠΊ", ΡΠ°ΠΊ ΠΊΠ°ΠΊ
// ΡΡΡΠΎΠΊΠΈ Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΎΠΉ ΠΎΡΡΠΈΡΠΎΠ²ΠΊΠΎΠΉ Π΄ΠΎΠ±Π°Π²Π»ΡΡΡ ΡΠ°ΠΌΠΊΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ.
DWORD dwStyle = WS_POPUP;
if (!IsListBoxOwnerDraw()) {
dwStyle |= WS_BORDER;
}
return CreateEx(0, m_pszWndClass, NULL, dwStyle, 0, 0, 0, 0, pParentWnd->GetSafeHwnd(), NULL, NULL);
}
BOOL CTitleTip::IsListBoxOwnerDraw() {
ASSERT_VALID(m_pListBox);
DWORD dwStyle = m_pListBox->GetStyle();
return (dwStyle & LBS_OWNERDRAWFIXED) || (dwStyle & LBS_OWNERDRAWVARIABLE);
}
void CTitleTip::Show(CRect DisplayRect, int nItemIndex) {
ASSERT_VALID(m_pListBox);
ASSERT(nItemIndex < m_pListBox->GetCount());
ASSERT(nItemIndex >= 0);
ASSERT(::IsWindow(m_hWnd));
ASSERT(!DisplayRect.IsRectEmpty());
// ΠΠΎΠΌΠ΅ΡΠΈΡΡ Π΄Π»Ρ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ, Π΅ΡΠ»ΠΈ Π½ΠΎΠ²Π°Ρ ΡΡΡΠΎΠΊΠ°.
if (m_nItemIndex != nItemIndex) {
m_nItemIndex = nItemIndex;
InvalidateRect(NULL);
}
// Π£ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΠΏΠΎΠ·ΠΈΡΠΈΡ ΠΈ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡΡ ΠΎΠΊΠ½Π°.
CRect WindowRect;
GetWindowRect(WindowRect);
int nSWPFlags = SWP_SHOWWINDOW | SWP_NOACTIVATE;
if (WindowRect == DisplayRect) {
nSWPFlags |= SWP_NOMOVE | SWP_NOSIZE;
}
VERIFY(SetWindowPos(&wndTopMost, DisplayRect.left, DisplayRect.top, DisplayRect.Width(), DisplayRect.Height(), nSWPFlags));
}
void CTitleTip::Hide() {
ASSERT(::IsWindow(m_hWnd));
ShowWindow(SW_HIDE);
}
BEGIN_MESSAGE_MAP(CTitleTip, CWnd)
//{{AFX_MSG_MAP(CTitleTip)
ON_WM_PAINT()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CTitleTip message handlers
void CTitleTip::OnPaint() {
ASSERT(m_nItemIndex != m_nNoIndex);
CPaintDC DC(this);
int nSavedDC = DC.SaveDC();
CRect ClientRect;
GetClientRect(ClientRect);
if (IsListBoxOwnerDraw()) {
// ΠΠΎΠ²Π΅ΡΠΈΠΌ ΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ "ΡΠΏΠΈΡΠΎΠΊ".
DRAWITEMSTRUCT DrawItemStruct;
DrawItemStruct.CtlType = ODT_LISTBOX;
DrawItemStruct.CtlID = m_pListBox->GetDlgCtrlID();
DrawItemStruct.itemID = m_nItemIndex;
DrawItemStruct.itemAction = ODA_DRAWENTIRE;
DrawItemStruct.hwndItem = m_pListBox->GetSafeHwnd();
DrawItemStruct.hDC = DC.GetSafeHdc();
DrawItemStruct.rcItem = ClientRect;
DrawItemStruct.itemData = m_pListBox->GetItemData(m_nItemIndex);
DrawItemStruct.itemState = (m_pListBox->GetSel(m_nItemIndex) > 0 ? ODS_SELECTED : 0);
if (m_pListBox->GetStyle() & LBS_MULTIPLESEL) {
if (m_pListBox->GetCaretIndex() == m_nItemIndex) {
DrawItemStruct.itemState |= ODS_FOCUS;
}
} else {
DrawItemStruct.itemState |= ODS_FOCUS;
}
m_pListBox->DrawItem(&DrawItemStruct);
} else {
// Π ΠΈΡΡΠ΅ΠΌ ΡΠ°ΠΌΠΎΡΡΠΎΡΡΠ΅Π»ΡΠ½ΠΎ
CFont* pFont = m_pListBox->GetFont();
ASSERT_VALID(pFont);
DC.SelectObject(pFont);
COLORREF clrBackground = RGB(255, 255, 255);
if (m_pListBox->GetSel(m_nItemIndex) > 0) {
DC.SetTextColor(::GetSysColor(COLOR_HIGHLIGHTTEXT));
clrBackground = ::GetSysColor(COLOR_HIGHLIGHT);
}
// Π ΠΈΡΡΠ΅ΠΌ ΡΠΎΠ½
DC.FillSolidRect(ClientRect, clrBackground);
// Π ΠΈΡΡΠ΅ΠΌ ΡΠ΅ΠΊΡΡ ΡΡΡΠΎΠΊΠΈ
CString strItem;
m_pListBox->GetText(m_nItemIndex, strItem);
ASSERT(!strItem.IsEmpty());
DC.SetBkMode(TRANSPARENT);
DC.TextOut(1, β1, strItem);
}
DC.RestoreDC(nSavedDC);
// ΠΠ΅ Π²ΡΠ·ΡΠ²Π°Π΅ΠΌ CWnd::OnPaint() Π΄Π»Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ ΠΎΡΡΠΈΡΠΎΠ²ΠΊΠΈ
}
CTitleTip::CTitleTip ΡΠ΅Π³ΠΈΡΡΡΠΈΡΡΠ΅Ρ ΠΊΠ»Π°ΡΡ ΠΎΠΊΠ½Π° Π²ΡΠ·ΠΎΠ²ΠΎΠΌ ΡΡΠ½ΠΊΡΠΈΠΈ AfxRegisterWndClass ΠΈ ΡΠΎΡ ΡΠ°Π½ΡΠ΅Ρ ΠΈΠΌΡ ΠΊΠ»Π°ΡΡΠ° Π² ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ CTitleTip::m_pszWndClass. Π― ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΡΡΠ½ΠΊΡΠΈΡ AfxRegisterWndClass, ΡΡΠΎΠ±Ρ ΠΈΠΌΠ΅ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π·Π°ΡΠ΅Π³ΠΈΡΡΡΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠ»Π°ΡΡ ΠΎΠΊΠ½Π° Ρ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π½ΡΠΌ ΡΡΠΈΠ»Π΅ΠΌ CS_SAVEBITS. Π€Π»Π°Π³ CS_SAVEBITS ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ β Windows ΡΠΎΡ ΡΠ°Π½ΡΠ΅Ρ ΠΊΡΡΠΎΠΊ ΠΎΠΊΠ½Π°, Π·Π°ΡΠ»ΠΎΠ½Π΅Π½Π½ΠΎΠ³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠΌ TitleTip, ΠΊΠ°ΠΊ ΠΊΠ°ΡΡΠΈΠ½ΠΊΡ. Π ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅, ΡΡΠΎΠΌΡ ΠΎΠΊΠ½Ρ Π½Π΅ Π½ΡΠΆΠ½ΠΎ ΠΏΠΎΡΡΠ»Π°ΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ WM_PAINT, ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΠ΄ΡΠΊΠ°Π·ΠΊΠ° ΡΠ±ΠΈΡΠ°Π΅ΡΡΡ Ρ ΡΠΊΡΠ°Π½Π°. CTitleTip::Create ΡΠΎΠ·Π΄Π°Π΅Ρ ΠΏΠΎΠ΄ΡΠΊΠ°Π·ΠΊΡ Π² Π²ΠΈΠ΄Π΅ popup-ΠΎΠΊΠ½Π°. Π ΠΎΠΊΠ½Ρ ΠΏΠΎΠ΄ΡΠΊΠ°Π·ΠΊΠΈ ΡΠ°ΠΌΠΊΠ° Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π΅ΡΠ»ΠΈ ΡΠ»Π΅ΠΌΠ΅Π½Ρ "ΡΠΏΠΈΡΠΎΠΊ" ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΠ±ΡΡΠ½ΡΠΌ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ Windows Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅Ρ ΡΠ°ΠΌΠΊΡ ΠΊ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΠΌ "ΡΠΏΠΈΡΠΎΠΊ" Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΎΠΉ ΠΎΡΡΠΈΡΠΎΠ²ΠΊΠΎΠΉ ΠΏΠ΅ΡΠ΅Π΄ ΠΏΠΎΡΡΠ»ΠΊΠΎΠΉ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ WM_DRAWITEM. ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ CTitleTip::m_pszWndClass ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΡΡΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΈΠΌΠ΅Π½ΠΈ ΠΊΠ»Π°ΡΡΠ° ΠΎΠΊΠ½Π° Π² ΡΡΠ½ΠΊΡΠΈΡ CWnd::CreateEx. CTitleTip::IsListBoxOwnerDraw Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ TRUE, Π΅ΡΠ»ΠΈ ΡΠΎΠ΄ΠΈΡΠ΅Π»ΡΡΠΊΠΈΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ "ΡΠΏΠΈΡΠΎΠΊ" ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠΌ Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΎΠΉ ΠΎΡΡΠΈΡΠΎΠ²ΠΊΠΎΠΉ. Π€ΡΠ½ΠΊΡΠΈΡ ΡΠ·Π½Π°Π΅Ρ ΠΎΠ± ΡΡΠΎΠΌ ΠΏΠΎ ΡΡΠΈΠ»Ρ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° "ΡΠΏΠΈΡΠΎΠΊ".
Π€ΡΠ½ΠΊΡΠΈΡ CTitleTip::Show ΠΎΡΠ²Π΅ΡΠ°Π΅Ρ Π·Π° ΠΏΠΎΠΊΠ°Π· ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° TitleTip. ΠΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ DisplayRect ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ Π½Π° ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΡ ΠΈ ΡΠ°Π·ΠΌΠ΅ΡΡ ΠΏΠΎΠ΄ΡΠΊΠ°Π·ΠΊΠΈ Π² ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΠ΅ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°Ρ ΡΠΎΠ΄ΠΈΡΠ΅Π»ΡΡΠΊΠΎΠ³ΠΎ ΠΎΠΊΠ½Π°. ΠΠ°ΡΠ°ΠΌΠ΅ΡΡ nItemIndex ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ ΠΈΠ½Π΄Π΅ΠΊΡ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°Π΅ΠΌΠΎΠΉ ΡΡΡΠΎΠΊΠΈ Π² ΡΠΏΠΈΡΠΊΠ΅. Π― ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠΎΠ²Π°Π» ΡΡΠ½ΠΊΡΠΈΡ, ΡΡΠΎΠ±Ρ ΠΎΠ½Π° ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΠΌΠ΅ΡΠ°Π»Π° Π΄Π»Ρ ΠΎΡΡΠΈΡΠΎΠ²ΠΊΠΈ ΠΈ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π»Π° ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΡ ΠΈ ΡΠ°Π·ΠΌΠ΅ΡΡ ΠΏΠΎΠ΄ΡΠΊΠ°Π·ΠΊΠΈ ΡΠΎΠ»ΡΠΊΠΎ Π΅ΡΠ»ΠΈ ΠΎΠ½Π° ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ»Π°ΡΡ. ΠΠ»Ρ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΡΠ°Π·ΠΌΠ΅ΡΠΎΠ² ΠΏΠΎΠ΄ΡΠΊΠ°Π·ΠΊΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ CWnd::SetWindowPos. Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π΅Π΅ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ wndTopMost, ΡΡΠΎΠ±Ρ ΠΎΠΊΠ½ΠΎ ΠΏΠΎΠ΄ΡΠΊΠ°Π·ΠΊΠΈ ΡΠ°ΡΠΏΠΎΠ»Π°Π³Π°Π»ΠΎΡΡ ΠΏΠΎΠ²Π΅ΡΡ Π²ΡΠ΅Ρ ΠΎΡΡΠ°Π»ΡΠ½ΡΡ ΠΎΠΊΠΎΠ½. Π§ΡΠΎΠ±Ρ ΠΏΡΠ΅Π΄ΠΎΡΠ²ΡΠ°ΡΠΈΡΡ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΡΠΎΠΊΡΡΠ° Π²Π²ΠΎΠ΄Π° ΡΡΠΈΠΌ ΠΎΠΊΠ½ΠΎΠΌ (ΠΎΠΊΠ½Ρ ΠΏΠΎΠ΄ΡΠΊΠ°Π·ΠΊΠΈ Π² Π»ΡΠ±ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π½Π΅ Π½ΡΠΆΠ΅Π½ ΠΊΠ»Π°Π²ΠΈΠ°ΡΡΡΠ½ΡΠΉ Π²Π²ΠΎΠ΄), ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΡΠ»Π°Π³ SWP_NOACTIVATE. Π€ΡΠ½ΠΊΡΠΈΡ CTitleTip::Hide ΠΏΡΡΡΠ΅Ρ TitleTip Π²ΡΠ·ΠΎΠ²ΠΎΠΌ ΡΡΠ½ΠΊΡΠΈΠΈ CWnd::ShowWindow Ρ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠΌ SW_HIDE.
CTitleTip::OnPaint ΠΏΠΎ-ΡΠ°Π·Π½ΠΎΠΌΡ ΡΠΈΡΡΠ΅Ρ ΠΏΠΎΠ΄ΡΠΊΠ°Π·ΠΊΡ Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ Π²ΠΈΠ΄Π° ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ "ΡΠΏΠΈΡΠΎΠΊ". ΠΡΠ»ΠΈ ΡΠΎΠ΄ΠΈΡΠ΅Π»ΡΡΠΊΠΈΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ "ΡΠΏΠΈΡΠΎΠΊ" ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΡΡ ΠΎΡΡΠΈΡΠΎΠ²ΠΊΡ, ΡΡΠ½ΠΊΡΠΈΡ ΡΠΎΠ·Π΄Π°Π΅Ρ ΠΈ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΠ΅Ρ ΡΡΡΡΠΊΡΡΡΡ DrawItemStruct ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎ ΡΠΎΠΌΡ, ΠΊΠ°ΠΊ ΡΡΠΎ ΠΏΡΠΎΠ΄Π΅Π»ΡΠ²Π°Π΅Ρ Windows ΠΏΠ΅ΡΠ΅Π΄ ΠΎΡΠΏΡΠ°Π²ΠΊΠΎΠΉ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ WM_DRAWITEM. Π Π°Π·Π½ΠΈΡΠ° Π»ΠΈΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎ Π²ΠΌΠ΅ΡΡΠΎ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΠΏΠΎΠ»Π΅ hDC ΡΡΠΎΠΉ ΡΡΡΡΠΊΡΡΡΡ ΡΠ°Π²Π½ΡΠΌ Ρ ΡΠ½Π΄Π»Ρ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ° ΡΡΡΡΠΎΠΉΡΡΠ²Π° ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° "ΡΠΏΠΈΡΠΎΠΊ", CTitleTip::OnPaint ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΠ΅Ρ ΡΡΠΎ ΠΏΠΎΠ»Π΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ Ρ ΡΠ½Π΄Π»Π° ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ° ΡΡΡΡΠΎΠΉΡΡΠ²Π° ΠΎΠΊΠ½Π° ΠΏΠΎΠ΄ΡΠΊΠ°Π·ΠΊΠΈ. ΠΠΎΡΠ»Π΅ ΡΡΠΎΠ³ΠΎ Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ m_pListBox->DrawItem, ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΡΡΡ Π°Π΄ΡΠ΅Ρ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½Π½ΠΎΠΉ ΡΡΡΡΠΊΡΡΡΡ DrawItemStruct. Π Π΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠΌ Π²ΡΠ΅Ρ ΡΡΠΈΡ Π΄Π΅ΠΉΡΡΠ²ΠΈΠΉ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠΎ, ΡΡΠΎ ΡΠ»Π΅ΠΌΠ΅Π½Ρ "ΡΠΏΠΈΡΠΎΠΊ" ΡΠΈΡΡΠ΅Ρ ΠΎΠ΄Π½Ρ ΠΈΠ· ΡΠ²ΠΎΠΈΡ ΡΡΡΠΎΠΊ Π² ΠΎΠΊΠ½Π΅ ΠΏΠΎΠ΄ΡΠΊΠ°Π·ΠΊΠΈ. ΠΡΠ΅Π½Ρ ΡΠΌΠ½ΠΎ! ΠΠΎΡ Π² ΡΠ΅ΠΌ ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ½ΠΎ-ΠΎΡΠΈΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΈ Ρ ΠΎΡΠΎΡΠΎ ΠΏΡΠΎΠ΄ΡΠΌΠ°Π½Π½ΡΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠ². ΠΠ»Π΅ΠΌΠ΅Π½Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ "ΡΠΏΠΈΡΠΎΠΊ" Π½Π΅ Π·Π½Π°Π΅Ρ β ΠΈΠ»ΠΈ Π½Π΅ Ρ ΠΎΡΠ΅Ρ Π·Π½Π°ΡΡ β Π³Π΄Π΅ ΠΎΠ½ ΡΠΈΡΡΠ΅Ρ ΡΡΡΠΎΠΊΡ, ΠΎΠ½ Π·Π½Π°Π΅Ρ ΡΠΎΠ»ΡΠΊΠΎ, ΠΊΠ°ΠΊ Π΅Π΅ Π½ΡΠΆΠ½ΠΎ ΡΠΈΡΠΎΠ²Π°ΡΡ. CTitleTip Π½Π΅ ΡΠΌΠ΅Π΅Ρ ΡΠΈΡΠΎΠ²Π°ΡΡ ΡΡΡΠΎΠΊΡ ΡΠΏΠΈΡΠΊΠ° Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΎΠΉ ΠΎΡΡΠΈΡΠΎΠ²ΠΊΠΎΠΉ, Π½ΠΎ ΠΎΠ½ Π·Π½Π°Π΅Ρ ΠΊΠ°ΠΊ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ DrawItemStruct ΠΈ Π²ΡΠ·Π²Π°ΡΡ CListBox::DrawItem. Π‘ Π΄ΡΡΠ³ΠΎΠΉ ΡΡΠΎΡΠΎΠ½Ρ, Π΅ΡΠ»ΠΈ ΡΠΎΠ΄ΠΈΡΠ΅Π»ΡΡΠΊΠΈΠΉ ΡΠΏΠΈΡΠΎΠΊ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΠ±ΡΡΠ½ΡΠΌ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠΌ "ΡΠΏΠΈΡΠΎΠΊ", ΠΊΠ»Π°ΡΡ CTitleTip ΡΠΈΡΡΠ΅Ρ Π²ΡΠ΅ ΡΠ°ΠΌ. Π ΡΡΠ°ΡΡΡΡ, ΡΡΠΎ Π½Π΅ ΡΠ°ΠΊ ΡΠ»ΠΎΠΆΠ½ΠΎ. Π€ΡΠ½ΠΊΡΠΈΡ ΠΎΡΡΠΈΡΠΎΠ²ΠΊΠΈ ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ Π½ΡΠΆΠ½ΡΠΉ ΡΠ΅ΠΊΡΡ ΠΈ ΡΡΠΈΡΡ ΠΎΡ ΡΠΎΠ΄ΠΈΡΠ΅Π»ΡΡΠΊΠΎΠ³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° "ΡΠΏΠΈΡΠΎΠΊ", ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ ΡΡΡΡΠΎΠΉΡΡΠ²Π°, Π·Π°ΠΏΠΎΠ»Π½ΡΠ΅Ρ ΡΠΎΠ½ ΠΈ ΡΠΈΡΡΠ΅Ρ ΡΠ΅ΠΊΡΡ.