В моей программе есть кнопка подкласса:
Fhwnd = CreateWindowExW(NULL, L"Button", NULL, WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON | BS_OWNERDRAW, X, Y, Width, Height, parentHwnd, (HMENU)ID, 0, 0);
SetWindowSubclass(Fhwnd, &MyButtonSubclassProc, 0, (DWORD_PTR)this);
Я добавляю всплывающую подсказку для этой кнопки со значением LPSTR_TEXTCALLBACKW
:
toolInfo.lpszText = LPSTR_TEXTCALLBACKW;
И я заметил, что когда всплывающая подсказка всплывающие окна, OutputDebugString()
печатается дважды (т.е. TTN_NEEDTEXTW встречается дважды):
case WM_NOTIFY:
{
switch(((LPNMHDR)lParam)->code)
{
case TTN_NEEDTEXTW:
{
NMTTDISPINFOW *pTT = (NMTTDISPINFOW*)lParam;
if(pTT->uFlags && TTF_IDISHWND)
{
pTT->lpszText = FTooltipText;
OutputDebugStringW(L"TTN_NEEDTEXTW\r\n");
break;
}
break;
}
}
break;
}
Я хочу спросить - это нормально?
Обновление: Даже если я настроил всплывающую подсказку для главного окна, TTN_NEEDTEXTW также появляется дважды.
case WM_CREATE:
{
HWND FTooltipHwnd = CreateWindowExW(NULL, TOOLTIPS_CLASS, NULL,
WS_POPUP |TTS_ALWAYSTIP,
CW_USEDEFAULT, CW_USEDEFAULT,
CW_USEDEFAULT, CW_USEDEFAULT,
hWnd, NULL,
hInst, NULL);
if(FTooltipHwnd)
{
TOOLINFOW toolInfo = {0};
toolInfo.cbSize = sizeof(TOOLINFOW);
toolInfo.hwnd = hWnd;
toolInfo.uFlags = TTF_IDISHWND | TTF_SUBCLASS;
toolInfo.uId = (UINT_PTR)hWnd;
toolInfo.lpszText = LPSTR_TEXTCALLBACKW;
BOOL res = SendMessageW(FTooltipHwnd, TTM_ADDTOOLW, 0, (LPARAM)&toolInfo);
}
}
Вроде нормально. Не правда ли?