Компьютерные книги
Главное меню
Главная Поиск по сайту Добавить материал О нас Карта книг Карта сайта
Реклама
computersbooks.net -> Добавить материал -> Графика -> Гончаров Д. -> "DirectX 7.0 Для программистов" -> 65

DirectX 7.0 Для программистов - Гончаров Д.

Гончаров Д., Салихо Т. DirectX 7.0 Для программистов — Спб.: Питер, 2001. — 528 c.
ISBN 5-318-00173-4
Скачать (прямая ссылка): dirext7dlyaprogrammistov2001.djvu
Предыдущая << 1 .. 59 60 61 62 63 64 < 65 > 66 67 68 69 70 71 .. 229 >> Следующая

hRet-pDD->CreateSurface(&ddSurfaceDesc, &pPicFrames[i], NULL); if(hRet!-DD_OK)
{
wsprintf(szErrorMessage, "*s". "Create Frames"); return (FALSE);
}
}
return (TRUE):
}
//......................................................
//Создание палитры //
LPDIRECTDRAWPALETTE CreateDirectDrawPalette(LPDIRECTDRAW7 pDD)
{
LPDIRECTDRAWPALETTE pDirectDrawPal;
PALETTEENTRY palEntries[256];
HRESULT hRet;
LPRGBQUAD pColorTable;
UINT uMemNeed-sizeof(RGBQUAD)*256;
DWORD nBytesRead;
//Открытие графического файла для чтения палитры
HANDLE hFi 1 e-CreateFi 1 e(pF1leNames[0], GENERICREAD, FILE SHARE READ, NULL, MDPENEXISTING, 0. NULL); if (hFile—INVALID_HANDLE_VALUE)
{
pDi rectDrawPal-NULL; return (pDirectDrawPal);
}
//Выделение памяти для палитры из файла pColorTable- (LPRGBQUAD) mall ос(uMemNeed);
//Установка файлового указателя на начало палитры
SetFi1ePointer(hFi1e. sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER). NULL. ^?FILEBEGIN);
//Чтение палитры из файла в память
ReadFile(hFile, (LPVOID)pColorTable, uMemNeed, «.nBytesRead, NULL);
//Закрытие графического файла с палитрой CloseHandlе(hFile);
Создание программы
151
//Заполнение структуры PALETTEENTRY for (int х-0;х<256;++х)
{
palEntries[x].peRed-pColorTable[x].rgbRed: palEntries[x].peBlue-pColorTable[x].rgbBlue; palEntries[x].peGreen-pColorTable[x].rgbGreen;
//Создание палитры DirectDraw
hRet-pDD->CreatePalette(DDPCAPS_8BIT. palEntries. &pDirectDrawPal. NULL); if (hRet!*DD_0K)
pDi rectDrawPal-NULL;
//Освобождение памяти free(pColorTable);
return (pDi rectDrawPal);
//Подготовка поверхностей
//
BOOL PrepareSurfacesO {
//Получение палитры из графического файла p0DPal*Create01rectDrawPalette(p00): if (pDDPal—NULL)
{
wsprintf(szErrorMessage. "*s", "Create Palette"); return (FALSE):
>
//Установка палитры для внеэкранных поверхностей for (int i-0; i<FRAMES_COUNT; i++)
{
if (!LoadBMP(pPicFrames[1]. pFileNames[i]))
{
wsprintf(szErrorMessage. "*s". "Load Surfaces"): return (FALSE);
}
pPicFrames[i]->SetPalette(pDDPal):
}
return (TRUE);
//......................................................
//Загрузка изображения
//
BOOL LoadBMP(LPDIRECTDRAWSURFACE7 pSurface. char* filename) {
BYTE* pBmp;
DWORD dwBmpSize;
DWORD dwFileLength;
DWORD nBytesRead;
BITMAPINFO* pBmpInfo: .
BYTE* pPixels;
продолжение &
152
Урок 5 • Создание оконных приложений
Листинг 5.4 (продолжение)
HDC hdc;
//Открытие графического файла для чтения данных HANDLE hFi1e-CreateFi1e(fi1ename. GENERIC_READ, FILE_SHARE_READ, NULL. OPEN_EXISTING, 0. NULL);
if (hFile—INVALID_HANDLE_VALUE) return (FALSE);
//Получение размера файла
dwFi1eLength-GetFi1eSize (hFile, NULL) ;
//Получение размера графических данных dwBmpSize-dwFi1eLength*sizeof(BITMAPFILEHEADER);
//Выделение памяти для данных pBmp- (BYTE*) malloc(dwBmpSize);
//Установка файлового указателя на начало данных
SetFi1ePointer(hFi1e. sizeof(BITMAPFILEHEADER). NULL. FILE_BEGIN);
//Чтение данных из файла
ReadFile(hFile, (LPVOID)pBmp. dwBmpSize. AnBytesRead. NULL);
//Закрытие файла CloseHandle(hFile);
pBmpInf0е(ВITMAPINFO*)pBmp;
pP i xels-pBmp+s i zeo f(ВITMAPINFOHEADER)+s i zeof(RGBQUAD)*256;
//Копирование графических данных на поверхность при помощи GDI if ((pSurface->GetDC(&hdc)) — DD OK)
{
StretchDIBits(hdc. 0. 0. FRAME_WIDTH. FRAME_HEI6HT. 0. 0. FRAHE WIDTH. k*FRAHE_HEIGHT. pPixels. pBmpInfo, 0. SRCC0PY); pSurface->ReleaseDC(hdc):
}
free(pBmp); return (TRUE);
//Подготовка кадра //
void PrepareFrameO {
//Проверка первичной поверхности на "потерю" if (pPrimarySurface->IsLost())
{
//Восстановление поверхности pPrimarySurface->Restore();
for (int i-0; i<FRAMES_C0UNT; i++)
{
//Проверка внеэкранных поверхностей на "потерю" if (pPicFrames[i]->IsLost())
{
//Восстановление внеэкранных поверхностей pPicFrames[i]->Restore();
//Загрузка данных на внеэкранные поверхности LoadBMP(pPi cFrames[i]. pFi1eNames[i]);
>
Создание программы
153
}
}
}
//......................................................
//Вывод кадра //
void DrawFrameO {
HRESULT hRet;
//Подготовка кадра к выводу
PrepareFrameO;
//Вывод изображения
hRet-pPrimarySurface->Blt(&rPic. pPicFrames[frame], &rPic2, DDBLT WAIT, NULL);
}
//........-.............................................
//Циклическое изменение номера выводимого кадра
//
void NextTickO {
frame++;
if (frame—FRAMES_COUNT) frame-0:
}
//......................................................
//Установка координат вывода изображения
//
void SetRectangleO {
POINT point -{0.0};
SetRect(&rPic2, 0. 0. FRAME WIDTH, FRAME HEIGHT);
GetClientRectChMainWnd. &rPic);
ClientToScreenChMainWnd. &point);
OffsetRect(&rPic. point.x. point.y);
rPi с. r i ght-rPi с. 1 eft+FRAMEWIDTH;
rPi с.bottom-rPi с.top+FRAME_HEIGHT;
}
Мы не будем подробно описывать все функции этого приложения, так как они уже были описаны в предыдущем уроке. Заметим лишь, что в оконных приложениях не существует вторичного буфера, поэтому мы вынуждены использовать только первичный. Иногда вторичный буфер заменяют внеэкранным, например, если изображение перерисовывается не полностью, а только частично. Если производить вывод сразу на экран, проявится мерцание отдельных участков изображения. Но так как в нашем приложении перерисовывается только одна часть экрана, созданием внеэкранного вторичного буфера можно пренебречь.
Предыдущая << 1 .. 59 60 61 62 63 64 < 65 > 66 67 68 69 70 71 .. 229 >> Следующая
Книги
Web-программирован-
ие
Аппаратное обеспечение Графика Руководство по П.О. Самоучитель Теория программирования Фотошоп Языки программирования
Новые книги
Вирт Н. "Систематическое программирование " (Теория программирования)

Эком "Microsoft Excel 2000 шаг за шагом Русская версия самоучитель " (Самоучитель)

Поляков А.Ю. "Методы и алгоритмы компьютерной графики в примерах Vizual C++" (Графика)

Баяковский Ю.М. "Графическая библиотека Open GL " (Графика)

Валиков А. "Технология " (Языки программирования)
Авторские права © 2013 ComputersBooks. Все права защищены.