我正在寻找一种方法来获得工具提示控件(如果有),这是与给定的HWND相关联的。工具提示控件的文本也足够了。我找到的最接近的消息是TTM_GETTEXT消息,但它应该发送到工具提示控件本身,而不是与之关联的工具。不过,我没有工具提示控件的句柄。有人知道怎么做吗?
所有这些都是在C++中使用纯Windows API完成的。
发布于 2009-08-26 11:20:22
似乎没有特定的消息来从控件中获取提示或其文本,但这就是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
}希望这将是有用的。
发布于 2009-08-26 13:46:40
要从某个控件获取工具提示文本,可以使用TTN_NEEDTEXT message。它被设计为供ToolTip控件使用,但我看不出有任何理由不能从其他地方发送它。
发布于 2009-10-24 22:15:15
您可以枚举窗口,查找具有所需窗口的父级的工具提示控件。您需要提供窗口和工具id (通常来自GetDlgCtrlID)...:
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;
}https://stackoverflow.com/questions/1333770
复制相似问题