W moim programie nie działa NM_HOVER, a jest tak zadeklarowany:
#define NM_HOVER (NM_FIRST-13)
a NM_FIRST wynosi 0. Używam Dev-C++. Zła deklaracja, czy coś innego?
- Rejestracja:prawie 14 lat
- Ostatnio:prawie 12 lat
- Postów:22

- Rejestracja:prawie 14 lat
- Ostatnio:prawie 12 lat
- Postów:22
To co, jakaś flaga nie ustawiona? Bo już sam nie wiem...

- Rejestracja:ponad 21 lat
- Ostatnio:prawie 13 lat
- Postów:7923
pisałem to już ze sto razy ale napiszę raz jeszcze - W moim programie nie działa NM_HOVER
TO NIE JEST OPISANIE PROBLEMU!!!!!! NIE DZIAŁA to możesz powiedzieć jak Ci nie stanie przy dziewczynie. Poza tym wiesz po ile ostatnio chodzą szklane kule? A bez takowej wgląd w Twój kod jest mocno utrudniony
- Rejestracja:prawie 14 lat
- Ostatnio:prawie 12 lat
- Postów:22
Dobra, nie działa, to znaczy, że nie reaguje jak nad niego najadę myszką. Sorry za niedokładność :)
- Rejestracja:prawie 14 lat
- Ostatnio:prawie 12 lat
- Postów:22
case WM_NOTIFY:
switch(((LPNMHDR)lParam)->code)
{
if((((LPNMHDR)lParam)->hwndFrom) == h_files_list)
{
case NM_DBLCLK:
//...
break;
case NM_CLICK:
//...
break;
case NM_RCLICK:
//...
ShowPopupMenu(h_files_list, lParam);
break;
case NM_HOVER:
info("test");
CreateTooltip(hwnd, "test");
break;
}
}
break;
Wszystkie pozostałe komunikaty działają.
- Rejestracja:prawie 14 lat
- Ostatnio:prawie 12 lat
- Postów:22
Dalej to samo - nie reaguje.
//EDIT
Z drugiej strony, chyba tylko ListView wysyła WM_NOTIFY, więc ten if niczego nie zmienia; dałem go tylko po to, że gdybym kiedyś tworzył drugiego, to żebym miał wtedy łatwiej.
- Rejestracja:około 21 lat
- Ostatnio:ponad 9 lat
- Postów:513
The hover time only affects list-view controls that have the LVS_EX_TRACKSELECT, LVS_EX_ONECLICKACTIVATE, or LVS_EX_TWOCLICKACTIVATE extended list-view style.
ListView_SetExtendedListViewStyle(g_hwndList, LVS_EX_TRACKSELECT);
ListView_SetHoverTime(g_hwndList, 100);
...
case NM_HOVER: // przykład
SendMessageA(g_hwndStatus, SB_SETTEXTA, 0, TIME$())
Dla zwykłego tooltipu w stylu "shellowym" użyj stylu LVS_EX_INFOTIP, wtedy obsługujesz tylko LVN_GETINFOTIP, gdzie lParam wskazuje na strukturę NMLVGETINFOTIP:
case LVN_GETINFOTIP:
ListGetFileInfoTip((NMLVGETINFOTIP*)lParam);
...
void ListGetFileInfoTip(NMLVGETINFOTIP *tip)
{
CShellHelper helper;
itstring path[MAX_PATH];
LPWSTR pwszTip;
IQueryInfo info;
// initialize CShellHelper
if (ListGetItemPath(tip->iItem, &path) && helper.SetFilePath(path))
{
if (!helper.GetUIObjectOf(IID_IQueryInfo, &info))
{
if (!info->GetInfoTip(QITIPF_DEFAULT, &pwszTip)) // text tooltipa
{
#ifdef UNICODE
wcsncpy(tip->pszText, pwszTip, tip->cchTextMax);
#else
WideCharToMultiByte(0, 0, pwszTip, -1, tip->pszText, tip->cchTextMax, 0, 0);
#endif
CoTaskMemFree(pwszTip);
}
info->Release();
}
}
}
Mam przed nosem kod programu, który w list view trzyma listę plików. Po najechaniu myszą na itema, po chwili widać tooltip z właściwościami pliku. Działa to właśnie ze stylem LVS_EX_INFOTIP.
- Rejestracja:prawie 14 lat
- Ostatnio:prawie 12 lat
- Postów:22
sapero napisał(a)
Mam przed nosem kod programu, który w list view trzyma listę plików. Po najechaniu myszą na itema, po chwili widać tooltip z właściwościami pliku. Działa to właśnie ze stylem LVS_EX_INFOTIP.
Właśnie ja też mam takie ListView :), ale tooltipa wolę zrobić samemu, żeby nie mieszać w kodzie :) Co do rozwiązania, sprawdzę i napiszę, czy działa...
//EDIT
działa tylko z LVS_EX_TRACKSELECT, a ja nie chcę, żeby podświetlało wiersz po najechaniu myszką, tylko żeby tooltip był :( Pozostałe 2 nie działają. Da się jeszcze coś zrobić?
Zarejestruj się i dołącz do największej społeczności programistów w Polsce.
Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.