[C/C++]Przewijanie okna dialogowego

0

Elo Bracia w bitach

mam następujący kłopot:zrobiłem sobie tak duże okno dialogowe,że nie mieści się na ekranie w rozdzielczości 1024x768.Wobec tego postanowiłem dodać do niego kontrolkę paska przewijania,i przewijać część obszaru niezawierającą tegoż paska.Robię to poleceniem API:
ScrollWindowEx(hwndDlg,0,-5,&rt,NULL,NULL,NULL,SW_ERASE|SW_INVALIDATE);
i sęk teraz w tym,że po przewinięciu dołu,a nasytępnie do góry nie odrysowuje zawartości okna,przewijanie w dół działa cacy.Natomiast o dziwo nie ma tego problemu,kiedy przewijam cały obszar roboczy okna dialogowego(wprawdzie wtedy mi i ten pasek jedzie,ale to szczegół).
Kombinowałem z różnymi funkcjami,jak UpdateWindow,InvalidateRect czy InvalidateRgn,próbowałem wpisywać obszary zamiast parametrów NULL ScrollWindowEx,i NIC...:/
Bardzo proszę Was Bracia,wspomóżcie mnie wyjaśnieniem,o co tu do grzyba ciężkiego chodzi!?

0

Zamiast scrolowac, postaw przezroczyste okno na dialogu (np static) jako child, a na tym oknie postaw jeszcze jedno okno ze wszystkimi kontrolkami, tez jako child.
Ustaw zakres max scrollbara na wysokosc okna z kontrolkami MINUS widoczna wysokosc.
I teraz w OnVScroll po prostu zrob MoveWindow(hwnd_z_kontrolkami,0, -scrollpos...

0

Zaraz,a nie mogę po prostu użyć MoveWindow zamiast ScrollWindow,bez kombinacji z oknami child?
W każdym razie,dzięki Bracie za podpowiedź :)

0

Jesli nie rozumiesz po co tyle okien, to wyjasniam:
Jak zapewne wiesz, okno child nigdy nie bedzie wystawalo poza RECT parenta, wiec jedna sprawa juz jest jasna.
Zalozmy ze masz dialog na caly ekran i jakies pole 400x400 z przewijanym oknem.
W tym polu stawiasz swoje okno z kontrolkami jako child tego pola, w pozycji 0,0 i ustawiasz scrollbara jak wyzej.
Zalozmy ze okno z kontrolkami ma rozmiar 400x800.
Scrollbar ma wtedy zakres 0-400, a gdy go ustawisz na koncu, to okno z kontrolkami ustawi sie w pozycji 0,-400 - wiec bedzie widoczne od polowy do konca.
Gorna czesc okna bedzie "niewidzialna" bo wystaje poza obszar parenta :P

0

Hmmm Bracie Sapero,a czy wiesz może,dlaczego kiedy używam ScrollWindow z parametrem obszaru scrolowania NULL,co wpływa na przesunięcie całego obszaru roboczego,to wtedy mi to działa dobrze,natomiast kiedy deklaruję obszar przesuwu,który nie pokrywa 100% obszaru roboczego okna,wtedy się pojawia ww defekt?

ScrollWindow(hwnd,0,y,NULL,NULL);-działa doskonale,i w górę i w dół
ScrollWindow(hwnd,0,y,&obszar,NULL);-działa dobrze tylko scrolling w dół,kiedy coś wyjedzie poza górną granicę obszaru roboczego jest (tak na moje oko) czyszczone domyślnym pędzlem systemowym :/

0

Nigdy nie uzywalem ScrollWindow, piszac edytor tekstu z poczatku uzywalem ScrollDC ale bylo to duzo wolniejsze od kompletnego odmalowania wszystkich linijek tekstu [glowa]
w PSDK pize ze dziury powstale po scrolowaniu sa dodawane do 'update region' i ze masz sobie wywolac UpdateWindow zeby je odmalowac.

0

owszem,tak pisze i tak robiłem(patrz 1 post),ale owo UpdateWindow nie pomagało mi :/

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