Podwójne buforowanie rysowania
Stronę tą wyświetlono już: 3049 razy
Wstęp
Ci z pośród Was, którzy przerobili projekt do tego miejsca zapewne zauważyli, że przy rysowaniu elementy programu mrugają dość nieprzyjemnie. Wyeliminowanie tego nieprzyjemnego zjawiska wymaga czegoś co nazywa się podwójnym buforowaniem rysowania. Co to oznacza? Oznacza to to, że trzeba utworzyć dodatkowy kontekst urządzenia HDC oraz uchwyt bitmapy HBITMAP, który za pomocą funkcji SelectObject powinien zostać przypisany do pomocniczego kontekstu urządzenia. Teraz wszystkie operacje rysowania muszą być wykonywane na kontekście urządzenia pomocniczego a następnie całość już odrysowanego obszaru powinna zostać przerysowana na kontekst urządzenia związany z samym oknem programu.
Innymi słowy, najpierw odrysowuję obszar na bitmapie, później bitmapę przerysowuję do okna programu.
Implementacja podwójnego buforowania
W kodzie programu w pliku winmain.cpp w funkcji WinMain należy usunąć następującą linijkę kodu:
Powyższa linijka zarysowywała tło okna rysowania na czarno, ten jednak efekt nas nie interesuje a interesuje nas jedynie to aby program w ogóle nie zamalowywał tła.
W funkcji procedury okna WndDrawingProc należy dodać trzy następujące nowe zmienne:
W komunikacie WM_CREATE należy dodać linijkę kodu, w którym utworzony zostanie pomocniczy kontekst urządzenia:
I dodajemy obsługę komunikatu WM_SIZE, która będzie wyglądała następująco:
Ostatnim krokiem do wyeliminowania mrugania rysowanych obiektów w oknie programu jest zmiana kodu w komunikacie WM_PAINT:
Jak wynika z powyższego kodu, teraz wszystko jest rysowane na kontekście urządzenia mem a nie jak poprzednio na hdc. Dopiero na samym końcu funkcją BitBlt przerysowany został obszar bitmapy przypisanej do mem do kontekstu urządzenia hdc okna programu.
Tytuł:
C++ Zbiór zadań z rozwiązaniami
Autor:
Tomasz Jaśniewski
Tytuł:
Mikrokontrolery dla hobbystów. Projekty DIY w języku C i C++
Autor:
Miguel Angel Garcia-Ruiz, Pedro Cesar Santana Mancilla
Tytuł:
Architektura oprogramowania bez tajemnic. Wykorzystaj język C++ do tworzenia wydajnych aplikacji i systemów
Autor:
Adrian Ostrowski, Piotr Gaczkowski
Tytuł:
Wprowadzenie do C++
Autor:
Michał Matlak
Tytuł:
Opus magnum C++ 11. Programowanie w języku C++. Wydanie II poprawione (komplet)
Autor:
Jerzy Grębosz
Tytuł:
Programowanie wieloplatformowe z C++ i wxWidgets 3
Autor:
Bartosz W. Warzocha
Tytuł:
Język C++ i przetwarzanie współbieżne w akcji. Wydanie II
Autor:
Anthony Williams
Tytuł:
C++ dla bystrzaków. Wydanie VII
Autor:
Stephen R. Davis
Tytuł:
Tablice informatyczne. Podstawy C++
Autor:
Radosław Sokół
Tytuł:
Opus magnum C++11. Programowanie w języku C++ (komplet)
Autor:
Jerzy Grębosz