Шаг 9 - Создаем Direct3D при помощи MFC

Надеюсь Вы читали шаги по MFC и немножко ориентируетесь в нем. Возьмем за основу проект "Шаг 1 - Минимальный проект" из раздела MFC, все сделайте, как там рассказано. Теперь смотрим "Шаг 2 - Вставка элемента управления в окно (Controls)" и делаем.

Инициализируем глобально библиотеки и указатели:

#include "afxwin.h"	// MFC Основные и стандартные компоненты
#define APPNAME "http://www.firststeps.ru Первые Шаги Урок 9 - Создаем Direct3D при помощи MFC"

#include <d3d8.h>
#pragma comment (lib, "d3d8.lib")

LPDIRECT3D8 p_d3d = NULL;	// наш главный интерфейс
d3d8LPDIRECT3DDEVICE8 p_d3d_Device = NULL;	// наше устройство d3d8

Строка #include "afxwin.h" должна быть подключена перед #include <d3d8.h>, ОБЯЗАТЕЛЬНО.

Переходим в CMainWnd::CMainWnd() и после функции Create - создания окна, добавляем:

p_d3d = Direct3DCreate8 (D3D_SDK_VERSION);
	
D3DDISPLAYMODE d3ddm;
p_d3d->GetAdapterDisplayMode (D3DADAPTER_DEFAULT, &d3ddm);

D3DPRESENT_PARAMETERS d3dpp; 
ZeroMemory (&d3dpp, sizeof(d3dpp));
d3dpp.Windowed = true;
d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
d3dpp.BackBufferFormat = d3ddm.Format;

p_d3d->CreateDevice (D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd, 
    D3DCREATE_SOFTWARE_VERTEXPROCESSING, &d3dpp, &p_d3d_Device);

Скомпонуйте, запустите. И не тут то было, приложение не хочет компилироваться ссылаясь, что не определен идентификатор hWnd. Исправим. Для начала нам нужно знать, где этот HWND (дескриптор родительского окна) находится. Заходим в меню View->Class View:

9_1.gif (2903 b)

В появившемся окне Class View, если он у Вас не был до этого активирован, раскройте дерево (ветку) CMainWnd:

9_2.gif (2984 b)

Далее CFrameWnd, т.к. CMainWnd является прямым наследником CFrameWnd, раскрываем снова его родителя CWnd:

9_3.gif (2675 b)

И находим m_hWnd, вот его нам и нужно вписать.

Еще проще найти, это нажать правую кнопку мышки в окне редактирования кода, скажем в классе CMainWnd или в одной из его функций, выбрать List Members:

Появится список всех доступных значений для данного класса и найдите m_hWnd.

Бежим в наш код и прописываем:

p_d3d->CreateDevice (D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, m_hWnd, 
	D3DCREATE_SOFTWARE_VERTEXPROCESSING, &d3dpp, &p_d3d_Device);

Компилируем и запускаем. Ура!!! Заработало!!!


Загрузить проект | Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Хавов Евгений Валерьевич - 10.08.2002