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.

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