Skocz do zawartości

Problem natury "quasi-menu'owej" ;)


Recommended Posts

Napisano

Hej!

Mój problem jest taki: potrzebuję wykonać w oknie kilka elementów o kształcie, dajmy na to prostokąta, które, po kliknięciu w nie, wykonają konkretną czynność (w tym przypadku ma się zmienić ich wygląd), ale musi się dać przechodzić między nimi za pomocą klawiatury - takie coś na kształt "menu".
Próbowałem za pomocą WM_LBUTTONDOWN, a później odczytywania współrzędnych myszy -bla blabla - czasochłonne, brzydkie rozwiązanie, które na dodatek nie działa, bo nie uwzględnia klawiatury.
Myślałem co nieco o potworzeniu małych "okienek", ale:
1. Nie mogę przebrnąć przez wyrzucenie całej tej otoczki (obiekt ma być jednolity).
2. Odpada używanie klawiatury - jak tu przechodzić między tymi okienkami?

W związku z powyższymi problemami, proszę Was o sugestie. Czy nie dałoby się jakoś tak skonfigurować przycisku, aby spełniał powyższe warunki?

Napisano

Hmm.. moze spróbuj tak. Daj sobie jakas tablice w ktorej bedziesz przechowywal dane o tych elementach oraz jakas zmienna globalna (lub cos podobnego) która będzie zawierała numer aktualnie zaznaczonego elementu. I jak klikniesz na jakis element msyzka to sprawdzasz który to element i ustawiasz wartosc tej zmiennej globalnej na numer kliknietego elementu. A z klawiatura tez podobnie - sprawdzasz czy został nacisniety jakis guzik odpowiedzilany za zmiane aktywnego elementu i poprostu zmieniasz wartosc tej zmiennje globalenj.

Po kazdej zmianie wymuszasz aby okno sie odmalowalo i w WM_PAINT rysujesz sobie wszystkie elementy z zaznaczeniem aktywnego lementu bo znasz jego nuemr w tablicy ;)

Z oknami jets podobnie. Tworzysz okienka typu WS_CHILD|WS_VISIBLE|WS_POPUP i takze masz taka zmienna globalan a dane mozesz przechowywac w specjalnym miejscu kazdego malego okienka (nie umie tego nazwac ale o tym duzo bylo na forum) lub poprostyu tazke w tablicach. I jak odbierzesz komuniakt malych okienek WS_SETFOCUS to powinienes go automatycznie zmienic na okno głowne bo dzieki temu głowne okno bedzie panowalo nad wszystkim (bedzie odbieralo komuniakty myszy i klawiatury i bedziesz mogl wtedy reagowac na zmiany i zmieniac wyglady tych okienke.

Napisano

ad 1 Komunikat WM_PAINT wymusisz funkcja InvalidateRect(hWnd, NULL, TRUE);

ad 2. WM_SETFOCUS jest to komunikat ktory dociera do okna jak dostanie focus (focus = aktywne okno). A Piasiu poleca bys go przekazal czyli SetFocus(hWnd);

pozdro

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Gość
Odpowiedz...

×   Wkleiłeś zawartość bez formatowania.   Usuń formatowanie

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Utwórz nowe...