「とりあえず初期化!」の編集履歴(バックアップ)一覧はこちら
「とりあえず初期化!」(2008/07/24 (木) 15:40:43) の最新版変更点
追加された行は緑色になります。
削除された行は赤色になります。
//C++
#include <windows.h>
#include <d3d9.h>
#pragma comment(lib, "d3d9.lib")
//定数いろいろ
const LPCTSTR WIN_CLASS_NAME = TEXT("RDD");
const LPCTSTR WINDOW_NAME = TEXT("RozenMaidenDuoDectet!!");
const LPCTSTR TEXT_OUTPUT = TEXT("Under Constructions...");
//関数のプロトタイプ宣言
HWND createWindow(HINSTANCE hInstance, LPCTSTR className);
int resisterWindowClass(HINSTANCE hInstance, LPCTSTR className);
LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp);
HRESULT initD3D(HWND hWnd);
//グローバル変数
IDirect3D9* pDirect3D; //Direct3Dインターフェース。デバイスの作成、情報の取得などを担当
IDirect3DDevice9* pD3Device; //Direct3Dデバイスインターフェース。
/////////////////////////////////////////////////////////////////////////
// エントリポイント
/////////////////////////////////////////////////////////////////////////
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
PSTR lpCmdLine, int nCmdShow)
{
HWND hWnd; //ウィンドウのIDを保持するとこ
MSG msg; //メッセージを保持するとこ
if(!resisterWindowClass(hInstance,WIN_CLASS_NAME))
return 0;
if((hWnd = createWindow(hInstance, WIN_CLASS_NAME)) == NULL)
return 0;
if(initD3D(hWnd) != D3D_OK){
MessageBox(hWnd, TEXT("DirectXの初期化に失敗しました!"), TEXT("Error"), MB_ICONINFORMATION);
return 0;
}
while(GetMessage(&msg, NULL, 0, 0)){//MSG構造体にメッセージをゲットだぜ
TranslateMessage(&msg);
DispatchMessage(&msg); //メッセージをウィンドウプロシージャにお裾分けする
}
pDirect3D->Release();
pD3Device->Release();
return msg.wParam;
}
////////////////////////////////////////////////////////////////////////////
// ウィンドウプロシージャ
////////////////////////////////////////////////////////////////////////////
LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp){
HDC hdc;
PAINTSTRUCT ps;
switch(msg){
case WM_DESTROY:
MessageBox(NULL, TEXT("続きは製品版で!"), TEXT("RDD"), MB_ICONINFORMATION);
PostQuitMessage(0);
return 0;
case WM_PAINT:
hdc = BeginPaint(hWnd, &ps);
TextOut(hdc, 10, 10, TEXT_OUTPUT, lstrlen(TEXT_OUTPUT));
EndPaint(hWnd, &ps);
return 0;
}
return DefWindowProc(hWnd, msg, wp, lp);
}
////////////////////////////////////////////////////////////////////////////
//DirectXを初期化
////////////////////////////////////////////////////////////////////////////
HRESULT initD3D(HWND hWnd){
D3DDISPLAYMODE d3ddm; //ディスプレイモードを格納するとこ
D3DPRESENT_PARAMETERS d3dpp; //DirectXをどのように初期化するかのパラメータを格納するとこ
//D3Dインタフェースの取得、ここから色んな準備を行う
if((pDirect3D = Direct3DCreate9(D3D_SDK_VERSION)) == NULL)
return FALSE;
//バッファのサーフェイスフォーマットを指定するために、ディスプレイモードを取得する。
pDirect3D->GetAdapterDisplayMode(D3DADAPTER_DEFAULT, &d3ddm);
ZeroMemory(&d3dpp, sizeof(D3DPRESENT_PARAMETERS)); //動的確保~
d3dpp.BackBufferFormat = d3ddm.Format; //バッファのサーフェスフォーマット。D3DFORMATを参照
d3dpp.BackBufferCount = 1; //確保するバッファ数、1ならダブルバッファ
d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD; //ダブルバッファリングのスワップ動作指定。D3DSWAPEFFECTを参照
d3dpp.Windowed = TRUE; //FALSEでフルスクリーン
//D3Dデバイスを取得する
return pDirect3D->CreateDevice( D3DADAPTER_DEFAULT, //使用するグラフィックアダプタの指定
D3DDEVTYPE_HAL, //デバイスタイプ指定、D3DDEVTYPE参照
hWnd, //アプリのウィンドウハンドラ
D3DCREATE_SOFTWARE_VERTEXPROCESSING, //デバイスの動作を指定するフラグ
&d3dpp, //先ほど初期化したD3DPRESENT_PARAMETERSを指定
&pD3Device); //デバイスインターフェースを格納するポインタを指定
}
////////////////////////////////////////////////////////////////////////////
//ウィンドウ作成
////////////////////////////////////////////////////////////////////////////
HWND createWindow(HINSTANCE hInstance, LPCTSTR className){
return CreateWindow(className,
WINDOW_NAME,
WS_OVERLAPPEDWINDOW | WS_VISIBLE,
CW_USEDEFAULT, CW_USEDEFAULT, //初期位置x,y
640, 480, //横幅、縦幅
NULL, NULL,
hInstance,
NULL);
}
////////////////////////////////////////////////////////////////////////////
//ウィンドウクラス登録
////////////////////////////////////////////////////////////////////////////
int resisterWindowClass(HINSTANCE hInstance, LPCTSTR className){
WNDCLASS winc;
winc.style =CS_HREDRAW | CS_VREDRAW;
winc.lpfnWndProc = WndProc; //自分で作ったウィンドウプロシージャの関数ポインタを指定する
winc.cbClsExtra = winc.cbWndExtra = 0;
winc.hInstance = hInstance;
winc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
winc.hCursor = LoadCursor(NULL, IDC_ARROW);
winc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
winc.lpszClassName = className;
//ウィンドウクラスを登録して使えるようにします
return RegisterClass(&winc);
}