ListView - NM_HOVER

0

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?

0

deklaracja OK - tak samo jest w Delphi. Złe coś innego

0

To co, jakaś flaga nie ustawiona? Bo już sam nie wiem...

0

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

0

Dobra, nie działa, to znaczy, że nie reaguje jak nad niego najadę myszką. Sorry za niedokładność :)

0

KOD - daj kod jak próbujesz przechwycić ten komunikat!!

0
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ą.

0

a jesteś pewny, że np. forma nie 'zabiera' NM_HOVER - wywal tamtego ifa po switchu i zobacz

0

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.

0

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.

0
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ć?

1 użytkowników online, w tym zalogowanych: 0, gości: 1