Здравствуйте, Sov!
Ещё раз дублирую свой код сюда, так как не туда нажал для ответа
Приложение:
#include <tchar.h>
#include <stdio.h>
// в билдере, скорее всего не понадобится
#pragma comment(lib, "ComCtl32.lib")
#include "CommCtrl.h"
// DATA
WNDPROC wndProcNative = NULL;
HWND hTip = NULL;
// прикрепляет тултип ко всем колонкам
void RefreshTips(HWND hListHeader)
{
RECT rc;
GetClientRect (hListHeader, &rc);
TCHAR szText[32] = TEXT("");
TOOLINFO ti;
ti.cbSize = sizeof(TOOLINFO);
ti.uFlags = TTF_SUBCLASS;
ti.hwnd = hListHeader;
ti.hinst = GetModuleHandle(NULL);
ti.lpszText = szText;
int iCount = Header_GetItemCount(hListHeader);
for (int i=0; i<iCount; i++)
{
ti.uId = i;
_stprintf(szText, TEXT("Hello, header #%d"), i+1);
Header_GetItemRect(hListHeader, i, &rc);
ti.rect.left = rc.left;
ti.rect.top = rc.top;
ti.rect.right = rc.right;
ti.rect.bottom = rc.bottom;
SendMessage(hTip, TTM_ADDTOOL, 0, (LPARAM) (LPTOOLINFO) &ti);
}
}
// в своём проекте вместо этого обработку перенести в обработчик окна-родителя для листа
LRESULT CALLBACK ListProc(HWND hList, UINT message, WPARAM wParam, LPARAM lParam)
{
switch(message)
{
case WM_NOTIFY:
{
NMHDR *hdr = (NMHDR *)lParam;
if(hdr->hwndFrom == ListView_GetHeader(hList))
{
if(hdr->code == NM_CUSTOMDRAW)
RefreshTips(ListView_GetHeader(hList));
}
}
break;
}
if(wndProcNative)
return CallWindowProc(wndProcNative, hList, message, wParam, lParam);
else
return DefWindowProc(hList, message, wParam, lParam);
}
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
INITCOMMONCONTROLSEX iccx;
iccx.dwSize = sizeof INITCOMMONCONTROLSEX;
iccx.dwICC = ICC_LISTVIEW_CLASSES|ICC_TREEVIEW_CLASSES;
InitCommonControlsEx(&iccx);
// LISTVIEW
HWND hList = CreateWindow(WC_LISTVIEW, TEXT("List View with Header"), WS_VISIBLE|WS_OVERLAPPEDWINDOW|LVS_REPORT, 100, 100, 300, 200, NULL, 0, GetModuleHandle(NULL), 0);
if(!hList)
return 0;
ListView_SetExtendedListViewStyleEx(hList,LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES,LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES);
// LISTVIEW - COLUMNS
LVCOLUMN lvc;
lvc.mask = LVCF_TEXT|LVCF_WIDTH;
lvc.cx = 120;
lvc.pszText = TEXT("Header 1");
SendMessage(hList, LVM_INSERTCOLUMN,0,(long)&lvc);
lvc.cx = 170;
lvc.pszText = TEXT("Header 2");
SendMessage(hList, LVM_INSERTCOLUMN,1,(long)&lvc);
// LISTVIEW - PROC
wndProcNative = (WNDPROC)SetWindowLong(hList, GWL_WNDPROC, (LONG)ListProc);
// TOOLTIP
hTip = CreateWindow(TOOLTIPS_CLASS, NULL, WS_POPUP | TTS_NOPREFIX | TTS_ALWAYSTIP, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, ListView_GetHeader(hList), 0, GetModuleHandle(NULL), 0);
SetWindowPos(hTip, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE);
RefreshTips(ListView_GetHeader(hList));
// MSG LOOP
MSG msg;
while(GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage (&msg);
DispatchMessage(&msg);
if(!IsWindow(hList))
break;
}
return 0;
}