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

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

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

void DX_OnDestroy(HWND hwnd);
void DXOnTi mer (HWND hwnd, UINT id);
void DX_OnActivate(HWND hwnd, UINT state, HWND hwndActDeact, BOOL fMinimized); void DX_OnKey(HWND hwnd, UINT vk, BOOL fDown, int cRepeat. UINT flags); void DX_OnIdle(HWND hwnd);
//Оконная процедура
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM. LPARAM);
//Характеристики таймера #define TIMERID 1 #define TIMER RATE 50
//Флаг активности нашего приложения BOOL bActive;
int WINAPI WinMain(HINSTANCE hlnst, HINSTANCE hPrevInst, LPSTR IpszCmdLine, int ^nCmdShow)
{
WNDCLASSEX wndClass;
HWND hWnd;
MSG msg:
//Регистрация оконного класса
wndClass.cbSi ze *si zeof(wndClass);
wndCl ass. styl e -CSHREDRAW | CS_VREDRAW;
Главная часть приложения
133
wndClass.lpfnWndProc -WndProc;
wndClass.cbClsExtra *0;
wndClass.cbWndExtra *0:
wndClass.hlnstance -hlnst:
wndClass.hlcon -LoadIcon(NULL.IDI_WINLOGO);
wndClass.hCursor -LoadCursor(NULL.IDC_ARROW);
wndClass.hbrBackground-NULL;//Обратите внимание!!!
wndClass.lpszMenuName «NULL;
wndClass.1pszClassName-С!assName;
wndClass.hlconSm -LoadIcon(NULL.IDI_WINLOGO);
RegisterClassEx(&wndClass);
//Создание окна на основе класса hWnd-CreateWi ndowEx(
o.//ws_ex_topmost.
ClassName.
AppName,
WS_P0PUP.
0.0.
GetSystemMet ri cs (SMCXSCREEN). GetSystemMetrics(SMCYSCREEN), NULL.
NULL.
hlnst,
NULL);
ShowWi ndow(hWnd.nCmdShow); UpdateWindow(hWnd);
//Дополнительный стиль окна //Класс окна //Текст заголовка //Стиль окна //Координаты X и Y
//Ширина и высота //Дескриптор родительского окна //Дескриптор меню //Описатель экземпляра //Дополнительные данные
//Инициализация компонентов, связанных с DirectDraw if (!InitDirectDraw(hWnd)) return FALSE:
//Главный цикл программы while (TRUE)
{
if (PeekMessage(&msg.NULL.0.0.PM_REM0VE))
{
if (msg.message—WM_QUIT) break:
TranslateMessage(&msg):
DispatchMessage(&msg):
}
el se
if (bActive)//Только если приложение активно! {
DXOnldle(hWnd):
}
}
return (msg.wParam);
}
//.........................................................
// Оконная процедура //
LRESULT CALLBACK WndProc(HWND hWnd, UINT msg. WPARAM wParam. LPARAM IParam)
{
switch(msg)
^ продолжение xf>
134
Урок 4 • Основы использования DirectDraw
Листинг 4.4 (продолжение)
HANDLE_MSG(hWnd .WMCREATE. DX_OnCreate);
HANDLE_MSG(hWnd.WM_DESTROY.DX_0nDestroy);
HANDLE_MSG(hWnd,WMTIMER,DX_0nT1mer);
HANDLE_MSG( hWnd. WMACTIVATE. DX_0nActi vate):
HANDLE_MSG(hWnd. WMJCEYDOWN, DXOnKey); default:
return DefWlndowProc(hWnd.msg.wParam.lParam);
}
}
/* Обработчики сообщений */
//.........................................................
BOOL DX_OnCreate(HWND hwnd. LPCREATESTRUCT IpCreateStruct)
{
//Установка таймера
i f (! SetTlmer(hwnd.TIMER_ID,TIMERRATE. NULL)) return (FALSE): return (TRUE):
}
//.........................................................
void DX_OnDestroy(HWND hwnd)
{
//Убрать после себя KinT1mer(hwnd,TIMER_ID);
RemoveD1rectDraw();
PostQuitMessage(O);
}
//.........................................................
void DX_OnTimer(HWND hwnd. UINT id)
{
//Изменение номера активного кадра 1f (bActive)
NextTickO:
>
//.........................................................
void DX_OnIdle(HWND hwnd)
{
//Прорисовка кадра OrawFrameO:
}
//.........................................................
void DX_OnKey(HWND hwnd. UIMT vk. BOOL fDown, 1nt cRepeat. UINT flags)
{
//При наматии пробела прекратить работу программы if (vk—VK_SPACE)
DestroyWindow(hwnd);
}
//.........................................................
void DXOnActi vate (HWND hwnd. UINT state. HWND hwndActDeact. BOOL minimized) {
//Обновить флаг состояния активности if (state—WAJNACTIVE) bActlve-FALSE; else
bActive-TRUE;
>
Подводя итоги
135
По сравнению со стандартным приложением Windows, файл main.cpp претерпел некоторые изменения. Мы добавили вызовы графических функций при возникновении определенных событий.
Так как единственное, что требуется функции InitDirectDrawO, это дескриптор окна hWnd, она вызывается сразу после создания окна.
При возникновении события WM CREATE происходит установка таймера, который вызывает функцию NextTick(), отвечающую за циклическое изменение номера текущего кадра.
При возникновении события WMACTIVATE происходит проверка состояния окна. Если оно свернуто, изображение не будет выводиться на экран. Обратите внимание, что полноэкранное приложение, в отличие от выполняющегося в окне, может быть неактивным только в свернутом состоянии.
При нажатии любой клавиши проверяется, был ли нажат пробел. Если да, приложение завершает работу. Перед выходом из программы происходит вызов функции RemoveDirectDrawO, которая уничтожает все экземпляры интерфейсов.
При отсутствии каких-либо системных событий происходит вызов функции DX_0nIdle, на которую мы и возложили обязанности по выводу графики. Этот подход обеспечивает выполнение прорисовки изображения, пока приложение не занято основной работой, позволяя максимально увеличить производительность программы и сделать ее независимой от скорости вывода графики.
Предыдущая << 1 .. 53 54 55 56 57 58 < 59 > 60 61 62 63 64 65 .. 229 >> Следующая
Книги
Web-программирован-
ие
Аппаратное обеспечение Графика Руководство по П.О. Самоучитель Теория программирования Фотошоп Языки программирования
Новые книги
Вирт Н. "Систематическое программирование " (Теория программирования)

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

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

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

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