とりあえず初期化!


※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。

#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);
}
 
ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。