Листинг 16.2

void InitRenderCHWND hWnd) {
HDC hdc - GetDC(hWnd);
hdcMem - CreateCompatibleDC(hdc);
ReleaseDC(hWnd.hdc);

hBrush - CreateHatchBrush(HS_CROSS.RGB(190.190.110)); //Кисть для корпуса

hFon - CreateSolidBrush(RGB(240.230.255)); //Кисть для очистки фона

hOldBrush - SelectBrush(hdcMem.hBrush);

//Кисть для корпуса тележки заносится в контекст

}

Объект Bitmap при этом не создается. Чтобы размеры битовой карты, используемой в качестве невидимой поверхности рисования, соответствовали размерам окна, она уничтожается и заново создается по сообщениям WMSIZE, получаемым оконной процедурой при любом изменении окна, как показано в листинге 16.3.

Листинг 16.3

#include <windows.h> extern HDC hdcMem;

Двойная буферизация

extern HBITMAP hBit; RECT r;
static HBITMAP hOldBit:
void 0nSize(HWND hWnd.UINT message,WPARAM wParam.LPARAM lParam) {

if(hBit) //Если битовая карта существовала, то она уничтожается

DeleteObject(hBit); HDC hdc - GetDC(hWnd);

GetClientRect(hWnd.&r): //В структуру г читаются размеры рабочей области Bit - CreateCompatibleBitmap(hdc.г.right.г.bottom); ReleaseDC(hWnd.hdc);

OldBit - (HBITMAP)SelectObject(hdcMem, hBit): }

//Пуск и останов таймера выполняются выбором соответствующих пунктов меню. //При включенном таймере периодически вызывается функция моделирования //и отображения объектов: void SimulWheel(RECT rClient);

void OnTimer(HWND hWnd.UINT message.WPARAM wParam.LPARAM lParam) {

SimulWheel(r); //Моделирование объектов. //Отображение модельного мира

ClearActivePage(hdcMem): //Очистка поверхности рисования

RenderObjects(hdcMem): //отображение объектов

FlipPages( hWnd.hdcMem, г): //Переключение страниц

}

Обычно описание каждого объекта мира содержит его координаты, полученные в результате моделирования. Модель SimulWheel (г) содержит не координаты трех обектов (двух колес и корпуса), а координаты тележки хС ,уС и угол поворота колеса Al fa. Размеры окна RECT г передаются ей для проверки выхода тележки за правый край. Тексты функций, связанных с моделированием движения и отображением колеса, можно найти в файле RotateWeel.cpp.


⇐ Предыдущая| |Следующая ⇒