特定のHWNDに関連付けられているツールチップコントロール(存在する場合)を取得する方法を探しています。ツールチップコントロールのテキストも十分です。私が見つけた最も近いものはTTM_GETTEXTメッセージですが、関連付けられているツールではなく、ツールチップコントロール自体に送信されることを意図しています。ただし、ツールチップコントロールのハンドルはありません。誰かがこれを行う方法を知っていますか?
これはすべて、C++のプレーンなWindowsAPIを使用して行われます。
コントロールからヒントまたはそのテキストを取得するための特定のメッセージはないようですが、これは 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
}
うまくいけば、これは役に立ちます。
コントロールからツールチップ テキストを取得するには、TTN_NEEDTEXT
メッセージを使用できます。ToolTip コントロールで使用するように設計されていますが、他の場所から送信できない理由がわかりません。
ツールチップを取得したいウィンドウが、作成したウィンドウの子ウィンドウかどうかわかりません。
この場合、NM_TOOLTIPSCREATED 通知を処理できます。これは、子ウィンドウがツールチップを作成するときに子ウィンドウから親に送信されます (または送信する必要があります。一般的なコントロールには当てはまりますが、他の種類のウィンドウについてはわかりません)。ウィンドウズ)。この通知には、ツールヒント ウィンドウへのハンドルが含まれます。