ListView - NM_HOVER

Odpowiedz Nowy wątek
2011-09-01 14:23
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?

edytowany 1x, ostatnio: new Programer, 2011-09-01 14:33
Najpierw polecałbym użycie normalnego środowiska, czy lepszego kompilatora... Za używanie Dev-C++ powinno się nakładać grzywny... - Patryk27 2011-09-01 14:54
W Code::Blocks jest to samo. - new Programer 2011-09-01 14:56

Pozostało 580 znaków

2011-09-01 14:38
0

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


- Ciemna druga strona jest.
- Nie marudź Yoda, tylko jedz tego tosta.
Google NIE GRYZIE!
Pomogłem - kliknij

Pozostało 580 znaków

2011-09-01 14:41
0

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

Pozostało 580 znaków

2011-09-01 14:46
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


- Ciemna druga strona jest.
- Nie marudź Yoda, tylko jedz tego tosta.
Google NIE GRYZIE!
Pomogłem - kliknij

Pozostało 580 znaków

2011-09-01 14:50
0

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

Pozostało 580 znaków

2011-09-01 14:52
0

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


- Ciemna druga strona jest.
- Nie marudź Yoda, tylko jedz tego tosta.
Google NIE GRYZIE!
Pomogłem - kliknij

Pozostało 580 znaków

2011-09-01 14:55
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ą.

Pozostało 580 znaków

2011-09-01 15:15
0

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


- Ciemna druga strona jest.
- Nie marudź Yoda, tylko jedz tego tosta.
Google NIE GRYZIE!
Pomogłem - kliknij

Pozostało 580 znaków

2011-09-01 15:26
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.

edytowany 1x, ostatnio: new Programer, 2011-09-01 15:38
A debugowałeś? W ogóle nie wyłapuje NM_HOVER? - stfu 2011-09-01 19:06

Pozostało 580 znaków

2011-09-02 06:29
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.

edytowany 1x, ostatnio: sapero, 2011-09-02 06:32

Pozostało 580 znaków

2011-09-02 11:39
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ć?

edytowany 1x, ostatnio: new Programer, 2011-09-03 09:45

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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