В this MSDN Пример кода:В чем смысл прохождения двух HWND-ручек при выполнении TTM_ADDTOOL в объект всплывающей подсказки?
// Description:
// Creates a tooltip for an item in a dialog box.
// Parameters:
// idTool - identifier of an dialog box item.
// nDlg - window handle of the dialog box.
// pszText - string to use as the tooltip text.
// Returns:
// The handle to the tooltip.
//
HWND CreateToolTip(int toolID, HWND hDlg, PTSTR pszText)
{
if (!toolID || !hDlg || !pszText)
{
return FALSE;
}
// Get the window of the tool.
HWND hwndTool = GetDlgItem(hDlg, toolID);
// Create the tooltip. g_hInst is the global instance handle.
HWND hwndTip = CreateWindowEx(NULL, TOOLTIPS_CLASS, NULL,
WS_POPUP |TTS_ALWAYSTIP | TTS_BALLOON,
CW_USEDEFAULT, CW_USEDEFAULT,
CW_USEDEFAULT, CW_USEDEFAULT,
hDlg, NULL,
g_hInst, NULL);
if (!hwndTool || !hwndTip)
{
return (HWND)NULL;
}
// Associate the tooltip with the tool.
TOOLINFO toolInfo = { 0 };
toolInfo.cbSize = sizeof(toolInfo);
toolInfo.hwnd = hDlg; // first HWND
toolInfo.uFlags = TTF_IDISHWND | TTF_SUBCLASS;
toolInfo.uId = (UINT_PTR)hwndTool; // second HWND
toolInfo.lpszText = pszText;
SendMessage(hwndTip, TTM_ADDTOOL, 0, (LPARAM)&toolInfo);
return hwndTip;
}
мы с ассоциированной TTM_ADDTOOL
операции два HWND ручки, один является DialogBox (hDlg), другой элемент управления внутри DialogBox. Я пробовал и обнаружил, что комментирование toolInfo.hwnd = hDlg;
все еще может появиться всплывающей подсказкой при наведении указателя мыши на элемент управления toolID.
Тогда в чем смысл прохождения двух ручек HWND? Является ли это обязательным или полезным в других случаях?
Вы фактически не использовали два ручка окна, вы просто указали * id * кончика. Это может быть полезно позже, когда вам нужно динамически генерировать текст всплывающей подсказки. Вы получаете флаг и идентификатор обратно в уведомлениях TTN_GETDISPINFO и TTN_NEEDTEXT. –
@ HansPassant: «Идентификатор» действительно является * HWND * при использовании флага 'TTF_IDISHWND' (что делает этот код). – IInspectable
Несомненно. Уведомление также передает флаг, чтобы обработчик сообщения знал, что он имеет действительный дескриптор окна. В операционной системе все равно, какой идентификатор вы используете. –