1.listwiew, 2.synchronizacja wątków

0

Witam. Mam kontrolkę List view i używam w swoim programie funkcji : ListView_HitTest. Zwraca ona indeks elementu , na którym został naciśnięty przycisk . Jako parametry przyjmuje uchwyt okna i strukturę LV_HITTESTINFO. I wszystko by było dobrze, gdyby nie to, że zwraca ona indeks elementu, ale nie zawsze tego, na którym został kliknięty przycisk myszki. Uzależnione to jest od pozycji myszki, tzn. jeśli ustawie kursor myszki przy górnej granicy elemetnu w listview to zwracany jest dobry indeks, a jeśli przesunę kursor mniejwięcej do połowy wysokości elementu to zwracany jest indeks kolejnego elemetnu:( . Zamieszczam fragment kodu :

POINT punkt;
GetCursorPos(&punkt); //pobieranie pozycji kursora

ScreenToClient(hListView,&punkt) ;// zmiana współrzędnych ekranowych na współrzędne kontrolki.

LV_HITTESTINFO str; //struktura potrzebna jako argument do funckcji

str.pt.x=5; //przypisanie współrzędnych myszki
str.pt.y=punkt.y;
str.flags= LVHT_ONITEMLABEL ;//flaga odpowiedzialna za znajdowanie elemetu na podstawie tekstu( czy coś takiego)

return ListView_HitTest(hListView,&str);

Jeśli ktoś robił już coś takiego ,nawet innym sposobem to proszę o fragmenty kodu. dzięki.

Co do drugiego pytania: czy ktoś mi może powiedzieć gdzie mam znaleźć opis co do sekcji krytycznej przy programowaniu wielowątkowym pod windowsem?? Znaczy chodzi mi o coś takiego jak semafor pod linuxem. Szukłem po różnych stronacha tematu synchronizacji wątków, ale jakoś nie natrafiłem na nic. Będe wdzięczny za cokolwiek

0

Zrobiłem znajdowanie elementu innym sposobem(bez tej funkcji). Zamieszczam kod, moze komuś sie przyda:
case WM_NOTIFY: {
switch (((NMHDR *)lParam)->idFrom) { //stwierdzenie od którego okan przyszedł komunikat
case ID_LISTVIEW:{
switch(((NMHDR *)lParam)->code) {// stwierdzenie na podstawie zmiennej code jaka zaszła akcja
case NM_RCLICK: {
ktory_item= ((NMLISTVIEW *)lParam)->iItem; // w przypadku naciśnięcia prawego przycisku myszy zpisanie do zmiennej który_item numeru elementu w oknie ListView

return 0;
}
}
}
}
}

p.s.
ten msdn jest fenomenalny:)

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