1. 首页
  2. 操作系统
  3. 桌面系统
  4. WTL TreeView如何实现ToolTip显示

WTL TreeView如何实现ToolTip显示

上传者: 2023-03-06 11:18:16上传 ZIP文件 714.67KB 热度 17次

在WTL TreeView中实现ToolTip显示需要进行以下步骤:

  1. 创建TreeView控件,并为其添加扩展风格 TVS_INFOTIP。
  2. 响应NM_CUSTOMDRAW消息,在需要显示ToolTip的节点上返回CDRF_NOTIFYITEMDRAW。
  3. 响应TTN_GETDISPINFO消息,设置ToolTip的文本信息。
  4. 在程序结束时销毁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();
}

用户评论