Листинг 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.