windows.cpp
// --- Обязательный включаемый файл
#include <windows.h>
#include"Include.h"
#include"Render.h"
DXRender MainRender;
LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);
// --- Глобальные переменные
HINSTANCE hInst; // Дескриптор экземпляра приложения
char ClassName[]="Window"; // Название класса окна
char AppTitle[]="Application Win32"; // Заголовок главного окна
bool fscreen=true;
MSG msg;
LPDIRECT3D9 pD3D = NULL; // Direct3D. Используется для создания Устройство рендеринга
LPDIRECT3DDEVICE9 pDevice = NULL; // Устройство рендеринга
D3DPRESENT_PARAMETERS d3dpp; // Параметры для создания Direct3D
void Render()
{
if(pDevice == NULL)
return;
// Очистка и закраска фона в красный цвет.
pDevice->Clear( 0, NULL, D3DCLEAR_TARGET,
D3DCOLOR_XRGB(255, 0, 0), 3.0f, 0 );
// Начало отрисовки сцены.
if(SUCCEEDED(pDevice->BeginScene()))
{
// Тут будем писать код для рисования.
//..
// Конец отрисовки сцены.
pDevice->EndScene();
}
// Вывод из следующего буфера на экран.
pDevice->Present( NULL, NULL, NULL, NULL );
}
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)
{
WNDCLASS wc; // Структура для информации о класса окна
HWND hWnd; // Дескриптор главного окна приложения
hInst=hInstance;
// Заполнение структуры WNDCLASS для регистрации класса окна.
memset(&wc, 0, sizeof(wc));
wc.lpszClassName=ClassName; // Имя класса окон
wc.lpfnWndProc=(WNDPROC)WndProc; // Адрес оконной функции
wc.style=CS_HREDRAW|CS_VREDRAW; // Стиль класса окон
wc.hInstance=hInstance; // Экземпляр приложения
wc.hIcon=LoadIcon(NULL,IDI_APPLICATION); // Пиктограмма для окон
wc.hCursor=LoadCursor(NULL,IDC_ARROW); // Курсор мыши для окон
wc.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH); // Кисть для окон
wc.lpszMenuName=NULL; // Ресурс меню окон
wc.cbClsExtra=0; // Дополнительная память
wc.cbWndExtra=0; // Дополнительная память
// Pегистрация класса окна.
RegisterClass(&wc);
// Создаем главное окно приложения.
hWnd=CreateWindow(
ClassName, // Имя класса окон
AppTitle, // Заголовок окна
WS_OVERLAPPEDWINDOW, // Стиль окна
CW_USEDEFAULT, // X-координаты
CW_USEDEFAULT, // Y-координаты
CW_USEDEFAULT, // Ширина окна
CW_USEDEFAULT, // Высота окна
NULL, // Дескриптор окна-родителя
NULL, // Дескриптор меню окна
hInst, // Дескриптор экземпляра приложения
NULL); // Дополнительная информация
if(!hWnd)
{
// Окно не создано, выдаем предупреждение.
MessageBox(NULL,"Create: error",AppTitle,MB_OK|MB_ICONSTOP);
return FALSE;
}
if(!SUCCEEDED(MainRender.InitD3D(hWnd,pD3D,pDevice,d3dpp)))
{
return 0;
}
// Отображаем окно.
ShowWindow(hWnd, nCmdShow);
// Обновляем содержимое клиентской области окна.
UpdateWindow(hWnd);
MSG msg;
while(GetMessage(&msg, NULL, 0, 0))
{
// Преобразование некоторых сообщений, полученных с помощью клавиатуры
TranslateMessage(&msg);
// Отправляем сообщение оконной процедуре
DispatchMessage(&msg);
}
return msg.wParam;
}
// --- Функция окна
LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
char *str="First Windows aplication";
switch(msg)
{
// Необходимо обновить содержимое клиентской области окна.
case WM_PAINT:
{
Render();
};
break;
// Нажата левая клавиша мыши в клиентской области окна.
case WM_LBUTTONDOWN:
{
}; break;
// Пользователь удалил окно.
case WM_DESTROY:
{
// Если данная функция является оконной функцией главного окна, то
// следует в очередь сообщений приложения послать сообщение WM_QUIT
PostQuitMessage(0);
MainRender.ReleaseD3D(pD3D,pDevice);
}; break;
// Необработанные сообщения передаем в стандартную
// функцию обработки сообщений по умолчанию.
default: return DefWindowProc(hWnd, msg, wParam, lParam);
}
return 0l;
}
|