Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Почему окно окрывается и сразу закрывается в MS 2005 VC++?

548
29 сентября 2007 года
Maximillian_Cavalera
157 / / 16.08.2007
Вот исходник

//-----------------------------------------------------------------------------------
// InitialDirect3D.CPP
// Инициализируем Direct3D
//-----------------------------------------------------------------------------------

#include <windows.h> // Подключаем заголовочный файл Windows
#include <d3d9.h> // Подключаем заголовочный файл DirectX 9 SDK


//-----------------------------------------------------------------------------------
// Глобальные переменные
//-----------------------------------------------------------------------------------
LPDIRECT3D9 pDirect3D = NULL; // Direct3D объект
LPDIRECT3DDEVICE9 pDirect3DDevice = NULL; // Устройство


//-----------------------------------------------------------------------------------
// Функция
// InitialD3D()
// Инициализация Direct3D
//-----------------------------------------------------------------------------------

HRESULT InitialDirect3D( HWND hwnd )
{

if( NULL == ( pDirect3D = Direct3DCreate9( D3D_SDK_VERSION ) ) )
return E_FAIL;

D3DDISPLAYMODE Display;
if( FAILED( pDirect3D->GetAdapterDisplayMode( D3DADAPTER_DEFAULT, &Display ) ) )
return E_FAIL;

D3DPRESENT_PARAMETERS Direct3DParametr;
ZeroMemory( &Direct3DParametr, sizeof(Direct3DParametr) );
Direct3DParametr.Windowed = TRUE;
Direct3DParametr.SwapEffect = D3DSWAPEFFECT_DISCARD;
Direct3DParametr.BackBufferFormat = Display.Format;

if( FAILED( pDirect3D -> CreateDevice( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hwnd,
D3DCREATE_HARDWARE_VERTEXPROCESSING,
&Direct3DParametr, &pDirect3DDevice ) ) )
{
return E_FAIL;
}

return S_OK;
}
//-----------------------------------------------------------------------------------
// Функция
// RenderingDirect3D()
//
//-----------------------------------------------------------------------------------
VOID RenderingDirect3D()
{

if(pDirect3DDevice == NULL) // Проверяем ошибки
return;

pDirect3DDevice->Clear( 0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(255,255,0), 1.0f, 0 );

// Начало сцены
pDirect3DDevice->BeginScene();

// Здесь происходит прорисовка сцены
pDirect3DDevice->EndScene();
//Конец сцены
pDirect3DDevice->Present( NULL, NULL, NULL, NULL );

}
//-----------------------------------------------------------------------------------
// Функция
// DeleteDirect3D()
// Освобождает захваченные ресурсы
//-----------------------------------------------------------------------------------
VOID DeleteDirect3D()
{
if( pDirect3DDevice != NULL)
pDirect3DDevice->Release();

if( pDirect3D != NULL)
pDirect3D->Release();
}

//-----------------------------------------------------------------------------------
// Функция
// MainWinProc()
// Здесь происходит обработка сообщений
//-----------------------------------------------------------------------------------

LRESULT CALLBACK MainWinProc(HWND hwnd, //Дескриптор окна
UINT msg, //идентификатор сообщение
WPARAM wparam, //Дополнительная информация
LPARAM lparam) //Дополнительная информация
{

switch(msg)
{

case WM_PAINT:

RenderingDirect3D();
ValidateRect( hwnd, NULL );
return(0);

case WM_DESTROY:

DeleteDirect3D();
PostQuitMessage(0);
return(0);

}

return (DefWindowProc(hwnd, msg, wparam, lparam));

}

//-----------------------------------------------------------------------------------
// Функция
// WinMain
// Входная точка приложения
//-----------------------------------------------------------------------------------

int WINAPI WinMain( HINSTANCE hinstance,
HINSTANCE hprevinstance,
LPSTR lpcmdline,
int ncmdshow)
{

WNDCLASSEX windowsclass; // Создаем класс
HWND hwnd; // Создаем дескриптор окна
MSG msg; // Идентификатор сообщения


// Определим класс окна WNDCLASSEX
windowsclass.cbSize = sizeof(WNDCLASSEX);
windowsclass.style = CS_DBLCLKS | CS_OWNDC | CS_HREDRAW | CS_VREDRAW;
windowsclass.lpfnWndProc = MainWinProc;
windowsclass.cbClsExtra = 0;
windowsclass.cbWndExtra = 0;
windowsclass.hInstance = hinstance;
windowsclass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
windowsclass.hCursor = LoadCursor(NULL, IDC_ARROW);
windowsclass.hbrBackground = (HBRUSH)GetStockObject(GRAY_BRUSH);
windowsclass.lpszMenuName = NULL;
windowsclass.lpszClassName = "WINDOWSCLASS";
windowsclass.hIconSm = LoadIcon(NULL, IDI_APPLICATION);

// Зарегистрируем класс
if (!RegisterClassEx(&windowsclass))
return(0);

// Теперь когда класс зарегестрирован можно создать окно

if (!(hwnd = CreateWindowEx(NULL, // стиль окна
"WINDOWSCLASS", // класс
"Урок 3. Инициализация Direct3D", // название окна
WS_OVERLAPPEDWINDOW | WS_VISIBLE,
300,150, // левый верхний угол
500,400, // ширина и высота
NULL, // дескриптор родительского окна
NULL, // дескриптор меню
hinstance, // дескриптор экземпляра приложения
NULL))) // указатель на данные окна
return(0);


if( SUCCEEDED( InitialDirect3D( hwnd ) ) )
{

ShowWindow( hwnd, SW_SHOWDEFAULT );
UpdateWindow( hwnd );


while( GetMessage( &msg, NULL, 0, 0 ) )
{
TranslateMessage( &msg );
DispatchMessage( &msg );
}
}

return 0;
}
548
29 сентября 2007 года
Maximillian_Cavalera
157 / / 16.08.2007
Это пример из книги по DirectX на С++. Автор предлагает набирать в ручную текст создания окна.
534
04 октября 2007 года
HarryAxe
448 / / 19.01.2006
Ты гонишь. Пример вполне работоспособный.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог