WTL TreeView如何实现ToolTip显示
在WTL TreeView中实现ToolTip显示需要进行以下步骤:
- 创建TreeView控件,并为其添加扩展风格 TVS_INFOTIP。
- 响应NM_CUSTOMDRAW消息,在需要显示ToolTip的节点上返回CDRF_NOTIFYITEMDRAW。
- 响应TTN_GETDISPINFO消息,设置ToolTip的文本信息。
- 在程序结束时销毁ToolTip控件。
下面是示例代码:
// 在头文件中声明
CToolTipCtrl m_toolTip;
HTREEITEM m_hItem;
// 在创建TreeView控件时添加扩展风格
DWORD dwStyle = WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | TVS_HASBUTTONS | TVS_LINESATROOT | TVS_HASLINES | TVS_INFOTIP;
m_treeView.Create(m_hWnd, rcDefault, NULL, dwStyle, WS_EX_CLIENTEDGE);
// 在处理NM_CUSTOMDRAW消息时,返回CDRF_NOTIFYITEMDRAW
LRESULT OnCustomDraw(int /*idCtrl*/, LPNMHDR pNMHDR, BOOL& bHandled)
{
LPNMTVCUSTOMDRAW pNMTVCD = reinterpret_cast(pNMHDR);
if (pNMTVCD->nmcd.dwDrawStage == CDDS_PREPAINT)
{
bHandled = TRUE;
return CDRF_NOTIFYITEMDRAW;
}
if (pNMTVCD->nmcd.dwDrawStage == CDDS_ITEMPREPAINT)
{
m_hItem = reinterpret_cast(pNMTVCD->nmcd.dwItemSpec);
if (m_hItem != NULL)
{
bHandled = TRUE;
return CDRF_NOTIFYITEMDRAW;
}
}
return CDRF_DODEFAULT;
}
// 在处理TTN_GETDISPINFO消息时,设置ToolTip的文本信息
LRESULT OnToolTipGetDispInfo(int /*idCtrl*/, LPNMHDR pNMHDR, BOOL& bHandled)
{
LPNMTTDISPINFO pNMTTDI = reinterpret_cast(pNMHDR);
if (pNMTTDI->hdr.idFrom == static_cast(m_toolTip.GetToolInfo().uId))
{
CString strTipText = _T("ToolTip Text");
_tcscpy_s(pNMTTDI->szText, strTipText.GetLength() + 1, strTipText);
pNMTTDI->hinst = NULL;
}
return 0;
}
// 在程序结束时销毁ToolTip控件
void OnDestroy()
{
m_toolTip.DestroyWindow();
}
用户评论