Freigeben über


Adding ToolTips to a List-View control

Adding a tooltip to an entry in a list-view is far simpler than MSDN would have you belive. In fact, the list-view control already supports tooltips, you just need to enable it by setting the extended list-view style and then setting the tooltip when Windows asks for one.

Given a dialog with a list-view control, the following code snippet shows what needs to be added to enable tooltips for each item:

char g_szToolTip[100] = {0};

BOOL CALLBACK DlgProc (
HWND hwndDlg,
UINT uMsg,
WPARAM wParam,
LPARAM lParam
)
{
switch (uMsg)
{
case WM_INITDIALOG:
{
HWND hListView = GetDlgItem(hwndDlg, IDC_YOUR_LIST_VIEW_CONTROL);

// LVS_EX_INFOTIP enables tooltips
// LVS_EX_LABELTIP ensures the full tooltip is shown
// and is not partially hidden
ListView_SetExtendedListViewStyle(hListView, LVS_EX_INFOTIP |
LVS_EX_LABELTIP);
}
break;

case WM_NOTIFY :
{
LPNMHDR lpnm = (LPNMHDR) lParam;

switch (lpnm->code)
{
case LVN_GETINFOTIP:
{
LPNMLVGETINFOTIP pGetInfoTip = (LPNMLVGETINFOTIP)lParam;

if (pGetInfoTip != NULL)
{
// this is where the tooltip text is set
g_szToolTip[0] = '\0';
StringCchPrintf(
g_szToolTip,
ARRAYSIZE(g_szToolTip),
"%s",
"Some helpful tooltip");

pGetInfoTip->pszText = g_szToolTip;
}

}
break;

default:
break;
}
}
break;

default:
break;
}

return FALSE;
}

Check out the following links for more information about the list-view control and tooltips:

ListView_SetExtendedListViewStyle Macro
https://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/commctls/listview/macros/listview_setextendedlistviewstyle.asp

Extended List-View Styles
https://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/commctls/listview/ex_styles.asp

LVN_GETINFOTIP Notification
https://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/commctls/listview/notifications/lvn_getinfotip.asp

Comments

  • Anonymous
    January 01, 2012
    This will not work, at least for me it didn't.You have to copy your text into the buffer pointed by pGetInfoTip->pszText, but not just assign a new value to this pointer.