c++ - 如何获取给定 HWND 的工具提示文本?

标签 c++ c winapi tooltip hwnd

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

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

最佳答案

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

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
}

希望这会有用。

关于c++ - 如何获取给定 HWND 的工具提示文本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1333770/

相关文章:

winapi - 将 boost::thread->native_handle() 转换为 XP ThreadId

打印 header 中声明的变量时 C++ 崩溃

c - 在没有互联网访问的情况下将头文件安装到 linux 机器上

c++ - 为什么 GetQueuedCompletionStatus() 不返回操作类型?

C 中的计算天数函数

c - FCNTL 返回 errno - 参数无效

c++ - 是否可以将来自 Win32 EDIT 控件的文本输入存储在 C++ std::string 中?

.net - ILockBytesOnHGlobal WriteAt 性能随时间降低

c++ - std::condition_variable – 通知一次但等待线程被唤醒两次

c++ - 从 std::ostream_iterator 调用时未找到运算符 << 的重载?