Сначала создайте всплывающую подсказку следующим образом:
HWND CreateToolTip(HWND hwndParent)
{
// Create a tooltip.
HWND hwndTT = CreateWindowEx(WS_EX_TOPMOST, TOOLTIPS_CLASS, NULL,
WS_POPUP | TTS_NOPREFIX | TTS_ALWAYSTIP,
CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
hwndParent, NULL, hInst, NULL);
SetWindowPos(hwndTT, HWND_TOPMOST, 0, 0, 0, 0,
SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE);
//Set up "tool" information. In this case, the "tool" is the entire parent window
TOOLINFO ti = { 0 };
ti.cbSize = sizeof(TOOLINFO);
ti.uFlags = TTF_SUBCLASS;
ti.hwnd = hwndParent;
ti.hinst = hInst;
ti.lpszText = LPSTR_TEXTCALLBACK; // this to use tooltip notify message
GetClientRect(hwndParent, &ti.rect);
SendMessage(hwndTT, TTM_SETMAXTIPWIDTH, 0, 500);
// Associate the tooltip with the "tool" window.
SendMessage(hwndTT, TTM_ADDTOOL, 0, (LPARAM)(LPTOOLINFO)&ti);
}
Примечание: использование LPSTR_TEXTCALLBACK означает, что вы должны определить обработчик сообщения TTN_NEEDTEXT
ON_NOTIFY(TTN_NEEDTEXT, 0, HandleTooltipText)
Наконец, мы определяем обработчик сообщения TTN_NEEDTEXT как:
void HandleTooltipText(NMHDR* nmhdr, LRESULT*)
{
NMTTDISPINFO* toolTip = (NMTTDISPINFO*)nmhdr;
CString prices = GetPrices();
if (toolTip->hdr.code == TTN_GETDISPINFO)
{
toolTip->lpszText = new TCHAR[prices.GetLength() + 1];
memset(toolTip->lpszText, 0, (prices.GetLength() + 1) * sizeof(TCHAR));
_tcscpy_s(toolTip->lpszText, prices.GetLength() + 1, prices.GetString());
toolTip->hinst = 0;
}
}