首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何获取给定HWND的工具提示文本?

如何获取给定HWND的工具提示文本?
EN

Stack Overflow用户
提问于 2009-08-26 10:34:42
回答 4查看 7K关注 0票数 4

我正在寻找一种方法来获得工具提示控件(如果有),这是与给定的HWND相关联的。工具提示控件的文本也足够了。我找到的最接近的消息是TTM_GETTEXT消息,但它应该发送到工具提示控件本身,而不是与之关联的工具。不过,我没有工具提示控件的句柄。有人知道怎么做吗?

所有这些都是在C++中使用纯Windows API完成的。

EN

回答 4

Stack Overflow用户

发布于 2009-08-26 11:20:22

似乎没有特定的消息来从控件中获取提示或其文本,但这就是MFC的CWnd类实现OnToolHitTest()的方式,您应该能够适应Win32:

代码语言:javascript
运行
复制
INT_PTR SomeFunction(HWND hWndChild, TOOLINFO *pTI)
{
    if (hWndChild != NULL) // Your HWND being tested
    {
        // return positive hit if control ID isn't -1
        INT_PTR nHit = _AfxGetDlgCtrlID(hWndChild);
        // Replace with GetDlgCtrlID().

        // hits against child windows always center the tip
        if (pTI != NULL && pTI->cbSize >= sizeof(AFX_OLDTOOLINFO))
        {
            // setup the TOOLINFO structure
            pTI->hwnd = m_hWnd;
            pTI->uId = (UINT_PTR)hWndChild;
            pTI->uFlags |= TTF_IDISHWND;
            pTI->lpszText = LPSTR_TEXTCALLBACK;

            // set TTF_NOTBUTTON and TTF_CENTERTIP if it isn't a button
            if (!(::SendMessage(hWndChild, WM_GETDLGCODE, 0, 0) & DLGC_BUTTON))
                pTI->uFlags |= TTF_NOTBUTTON|TTF_CENTERTIP;
        }
        return nHit;
    }
    return -1;  // not found
}

希望这将是有用的。

票数 2
EN

Stack Overflow用户

发布于 2009-08-26 13:46:40

要从某个控件获取工具提示文本,可以使用TTN_NEEDTEXT message。它被设计为供ToolTip控件使用,但我看不出有任何理由不能从其他地方发送它。

票数 1
EN

Stack Overflow用户

发布于 2009-10-24 22:15:15

您可以枚举窗口,查找具有所需窗口的父级的工具提示控件。您需要提供窗口和工具id (通常来自GetDlgCtrlID)...:

代码语言:javascript
运行
复制
HWND hToolTipWnd = NULL;

BOOL GetToolTipText(HWND hWnd, UINT nId, std::wstring& strTooltip)
{
    hToolTipWnd = NULL;
    EnumWindows(FindToolTip, (LPARAM)hWnd);

    if (hToolTipWnd == NULL)
        return FALSE;

    WCHAR szToolText[256];
    TOOLINFO ti;
    ti.cbSize = sizeof(ti);
    ti.hwnd = hWnd;
    ti.uId = nId;
    ti.lpszText = szToolText;

    SendMessage(hToolTipWnd, TTM_GETTEXT, 256, (LPARAM)&ti);
    strTooltip = szToolText;

    return TRUE;
}

BOOL CALLBACK FindToolTip(HWND hWnd, LPARAM lParam)
{
    WCHAR szClassName[256];
    if (GetClassName(hWnd, szClassName, 256) == 0)
        return TRUE;

    if (wcscmp(szClassName, L"tooltips_class32") != 0)
        return TRUE;
    if (GetParent(hWnd) != (HWND)lParam)
        return TRUE;

    hToolTipWnd = hWnd;

    return FALSE;
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1333770

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档