[C++][MFC] Zaznaczenie pozycji w listboxie prawym klikiem

0

W jaki sposob moge uzyskac taki efekt: mam list boxa, mozge zaznaczac jego elementy myszka jak klikne lewym przyciskiem, ale zalezy mi zeby mozna bylo to zrobic tez prawym. Nie moge tego znalezc w MSDN wiec prosze o pomoc Was! Pozdro.

Hmm, widze ze zapomnialem napisac tytul. Nie wiem jak sie edytuje tytuly wiec moge tylko przeprosic za to przeoczenie. Jesli moderatorzy maja taka moc to tytul powinien brzmiec:
"Zaznaczenie pozycji w listboxie prawym klikiem" lub jakos tak. Dzieki za wyrozumialosc!

0

subclassing się kłania: podmiana WM_RBUTTON* na WM_LBUTTON*
Ewentualnie zmień też wParam na MK_LBUTTON

//sprawdzone!
oLB = SetWindowLong(GetDlgItem(d1.hwnd,ID_LISTBOX), GWL_WNDPROC, &sLB)

sub sLB(hwnd:uint, uMsg:uint, wParam:uint, lParam:uint),uint
	if uMsg=WM_RBUTTONDOWN then uMsg = WM_LBUTTONDOWN
	if uMsg=WM_RBUTTONUP then uMsg = WM_LBUTTONUP
	return CallWindowProc(oLB, hwnd, uMsg, wParam, lParam)
endsub

Tylko dopasuj sobie typy zmiennych do swoich includów

0

Mozesz przetlumaczyc to na C++? I jesli to mozliwe to po krotce napisac o tym subclassingu - tylko jak to zrobic na potrzeby tego problemu? Dzieki za odpowiedz!

Aha, subclassing w WinApi znam, tylko to ma byc w MFC. Jesli znajzie sie jakas dobra dusza ktora potrafi to przelozyc na MFC + C++ byloby super.

0

Ok, udalo mi sie cos wymyslic co prawie dziala jak chce. Stworzylem klase MyListBox ktora dziedziczy po klasie CListBox, dodalem do tej klasy obsluge komunikatu WM_RBUTTONDOWN ktora wyglada tak:

void MyListBox::OnRButtonDown(UINT nFlags, CPoint point)
{
	SendMessage(WM_LBUTTONDOWN, 0, point.x & (point.y << 16));
}

Jest tylko jeden problem - jak przewine list boxa tak ze nie widac aktualnego zaznaczenia i klikne prawym przyciskiem to zawsze zaznaczane jest pierwsze widoczne od gory, dopiero kolejne kliki dzialaja tak jak powinny. Czy ktos ma jakis pomysl jak temu zaradzic?

0

Male sprostowanie - zaznaczanie pierwszego widocznego elementu listy jest wtedy kiedy poprzednia operacja miala cokolwiek wspolnego ze scrollowaniem - np kliknalem w scrolla lub uzylem kolek na myszce.

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