Saber Napisano Marzec 15, 2019 Autor Zgłoś Udostępnij Napisano Marzec 15, 2019 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? Cytuj Link do komentarza Udostępnij na innych stronach More sharing options...
Nemo Napisano Marzec 15, 2019 Zgłoś Udostępnij Napisano Marzec 15, 2019 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. Cytuj Link do komentarza Udostępnij na innych stronach More sharing options...
Saber Napisano Marzec 17, 2019 Autor Zgłoś Udostępnij Napisano Marzec 17, 2019 Dzięki, ale: 1. Jak wymusić wysłanie WM_PAINT, skoro muszę to umieścić w WinProc, pod WM_LMBUTTONDOWN? 2. Co to jest WS_SETFOCUS? Cytuj Link do komentarza Udostępnij na innych stronach More sharing options...
Complex Napisano Marzec 17, 2019 Zgłoś Udostępnij Napisano Marzec 17, 2019 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 Cytuj Link do komentarza Udostępnij na innych stronach More sharing options...
Saber Napisano Marzec 17, 2019 Autor Zgłoś Udostępnij Napisano Marzec 17, 2019 Ok, dzięki Wam obu. Cytuj Link do komentarza Udostępnij na innych stronach More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.