とりあえず初期化!

「とりあえず初期化!」の編集履歴(バックアップ)一覧はこちら

とりあえず初期化!」(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); }

表示オプション

横に並べて表示:
変化行の前後のみ表示:
ツールボックス

下から選んでください:

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