DirectX 8. Начинаем работу с DirectX Graphics (Ваткин, Dempski) - страница 2

Функция WinMain()

Самая главная функция. Именно с нее начинается выполнение любой программы, написанной под Windows. В нашем случае она делает вот что:

Описываем переменные.

>HWND hWnd; //Handle окна

>MSG msg;

Затем идет настройка параметров класса, регистрация класса в системе и создание окна, представляющего этот класс.

>//Настраиваем параметры класса wclass перед его регистрацией в системе

>wclass.cbSize=sizeof(wndclassex);

>wclass.style=CS_DBLCLKS;

>wclass.lpfnWndProc=&MessageProc;

>//Функция обрабатывающая сообщения

>wclass.cbClsExtra=0;

>wclass.cbWndExtra=0;

>wclass.hInstance=hInst;

>wclass.hIcon=LoadIcon(NULL, IDI_APPLICATION);

>wclass.hCursor=LoadCursor(NULL, IDC_ARROW);

>wclass.hbrBackground=GetSysColorBrush(COLOR_APPWORKSPACE);

>wclass.lpszMenuName=NULL;

>wclass.lpszClassName="InitClass";

>wclass.hIconSm=NULL;


>//Выходим, если не удалось зарегистрировать класс

>if (!RegisterClassEx(&wclass)) return 0;

>//Теперь создадим окно и занесем его handle в hWnd

>hWnd =

> CreateWindow("InitClass", "D3D Init", WS_SYSMENU|WS_OVERLAPPED|WS_MINIMIZEBOX,  100, 100, 420, 300, NULL, NULL, hInst, NULL);

Подробное описание структуры WNDCLASSEX и параметров функции CreateWindow() смотри в статье JM'а "Введение в программирование под Windows". Стоит обратить внимание на то, что мы после всех манипуляций будем иметь в hWnd дескриптор окна, в котором затем сможем отображать нашу сцену.

Теперь обратимся к функции инициализации D3D:

>Init(hWnd);

Остается только показать на экране наше окно

>ShowWindow(hWnd, nCmdShow);

>//Рисуем окошко

>UpdateWindow(hWnd);

и организовать цикл обработки сообщений окну

>while (GetMessage(&msg, NULL, 0, 0)) //Цикл обработки сообщений

>{

> TranslateMessage(&msg);

> DispatchMessage(&msg);

>}

>return (msg.wParam);

Функция Init()

Теперь, когда у нас есть окно, мы готовы к инициализации объекта Direct3D. Зачем он нужен? Как только будет создан объект Direct3D, мы сможем использовать метод IDirect3D8::CreateDevice() для создания устройства Direct3D (предварительно настроив его параметры), т.е. нашего устройства рендеринга. Параметры устройства задаются непосредственно перед его созданием с помощью структуры D3DPRESENT_PARAMETERS, и передаются в метод IDirect3D8::CreateDevice(). Рассмотрим этот процесс подробнее. Итак, создаем объект Direct3D:

>g_pD3D=Direct3DCreate8(D3D_SDK_VERSION);

Единственным параметром функции Direct3DCreate8 является UINT SDKVersion, который должен быть D3D_SDK_VERSION. Это необходимо для того, чтобы при компиляции программы были использованы правильные заголовочные файлы [*.h] (замечание: если после создания объекта были подключены новые адаптеры, необходимо повторно инициализировать объект Direct3D, чтобы использовать их). Если в процессе инициализации произошла ошибка, то Direct3DCreate8 возвращает NULL (т.е. пустой указатель).