Obsidian Napisano Grudzień 11, 2019 Autor Zgłoś Udostępnij Napisano Grudzień 11, 2019 Witam... Od niedawna zajmuję się programowaniem w WinAPI, a korzystam przy tym z języka C++. I napisałem sobie program. Robi wszystko to co chcę, poza tym jednym - nie wiem jak zmusić scrolla do działania. Mój program to prosta baza danych - zawiera dane uczniów i ich oceny. Ich dane zapisane są w kontrolkach edit (każda dana w osobnym) i chodzi o to, że gdy dodam więcej tych kontrolek, to nie mieszczą się w oknie programu. Dlatego muszę utworzyć pionowy pasek przewijania, ale opis na winapi.org jest dla mnie - zielonego - zbyt lakoniczny... Ilość uczniów jest określona przez zmienną int a. Gdy chcę dodać nowy wpis wywołuję funkcję nowy_rekord. Każdy edit ma wysokość 30 + 10 przerwy. Do tego na górze są pola static - jako nagłówki kolumn. Będę bardzo wdzięczny o wyjaśnienie jak w tej sytuacji utworzyć pasek przewijania... Cytuj Link do komentarza Udostępnij na innych stronach More sharing options...
Phantasm Napisano Grudzień 27, 2019 Zgłoś Udostępnij Napisano Grudzień 27, 2019 hmm ciężko to opisać po krótce, ale postaram się naprowadzić otóż pierwsza rzecz jaką robisz to przy wywołaniu CreateWindow (głównego okna) dodajesz styl WS_VSCROLL i teraz przechwytujesz dwa komunikaty: WM_SIZE oraz WM_VSCROLL; obsługa pierwszego zwykle wygląda tak: cxOkno = LOWORD(lParam); cyOkno = HIWORD(lParam). A teraz coś wiecej o paskach otóż każdy pasek przewijania ma swój że tak powiem zasięg, tzn istnieje x pozycji tego szarego prostokąta w tym pasku, np zakładając że okno ma 160 pikseli wysokości to możesz w nim wyświetlić tylko 4 rzędy swoich kontrolek edit, a zakładając że wszystkich rzędów masz 10 to suwak może być ustawiony w 6 pozycjach, gdy jest w pozycji 0 wyświetla pierwsze cztery, gdy jest w pozycji 1 wyświetla od drugiego do 5 rzędu, a gdy jest w pozycji 5 wyświetla ostatnie 4 rzędy kontrolek. Właśnie ilość tych pozycji ustawiasz za pomocą funkcji SetScrollRange (w tym przypadku podasz jej wartość ilośćwszystkich - cxOkno/40 - 1). Przechwytując komunikat WM_VSCROLL z wyrażnie LOWORD(wParam) otrzymujesz jakieś powiadomienie, może to być SB_LINEUP, SB_PAGEDOWN itp gdy otrzymasz np SB_LINEDOWN to wiesz że musisz teraz wyświetlić o kolejny rząd niżej tych kontrolek. Ukrywać kontrolki możesz np za pomocą funkcji ShowWindow. Jak widzisz nie jest to zbyt krótki temat, więc starałem się tylko dać Ci jakiś obraz tej sytuacji, po szczegóły odsyłam do dokumentacji poszczególnych funkcji, bądź do Petzolda :) Pozdrawiam 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.