[PR]大人気の無料恋愛コミュニティ:掲示板に写メにメールも0円使い放題



ウィンドウを表示?


さぁーて,いきなり詰まった!
何から始めたらいいかが分からない…
まぁ,DirectXの初期化云々の前に先ずはWindowの表示からやってみることにした.

とりあえず、全体で使いそうな変数とかは大域変数の構造体としてまとめておきましょ。

---- D3D_LAP 構造体 ----

typedef struct TD3DLap { HINSTANCE hinst ; HWND hwnd ; int screenW, screenH ; // Screen Width & Height. int bpp ; // Bit per Pixel. } D3D_LAP ;
んで、WinMain。

/********************************************************************************/ /* WinMain */ /********************************************************************************/
int PASCAL WinMain ( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { MSG msg ; // ここで D3D_LAP 構造体を初期化 // D3DLAP_Init (); // Create Window. // if (! LAP_CreateWindow ( hInstance, nCmdShow ) ) return 1 ; // メッセージループ // while ( GetMessage( &msg, NULL, 0, 0 ) ) { TranslateMessage ( &msg ); DispatchMessage ( &msg ); } return msg.wParam ; }
この中↑でつかってる D3DLAP_Init でD3D_LAP構造体の変数の初期化をしてまっす。
LAP_CreateWindow ってのはウインドウを作る関数をラップしてあるだけ。
んで、その内容は次の通り。

/********************************************************************************/ /* D3DLAP_Init */ /* D3D_LAP 構造体の初期化。 */ /* WinMain の最初ぐらいに呼び出して! */ /********************************************************************************/
void D3DLAP_Init () { memset ( (void*)&D3Dlap, 0, sizeof(D3Dlap) ); // Zero Reset. // Set Default Value // D3Dlap.screenW = 640 ; D3Dlap.screenH = 480 ; D3Dlap.bpp = 8 ; // 8 bit per Pixel. 256 colors. }
とりあえず、このサイズなら 大概のビデオカードでサポートしてるんじゃないのかにゃー?
そう言えば、DirectXで使えるモードっていうのと、「画面のプロパティ」で設定できるモードっていうのは 違うのかな?

/********************************************************************************/ /* LAP_CreateWindow */ /* ウインドウを作成する。 */ /* 成功したら TRUE、失敗すればFALSE を返す。 */ /********************************************************************************/
static BOOL LAP_CreateWindow ( HINSTANCE hInstance, int nCmdShow ) { D3Dlap.hinst = hInstance ; // ウインドウクラスの登録 // WNDCLASS wc ; wc.style = CS_HREDRAW | CS_VREDRAW ; wc.lpfnWndProc = WndProc ; wc.cbClsExtra = 0 ; wc.cbWndExtra = 0 ; wc.hInstance = hInstance ; wc.hIcon = NULL ; wc.hCursor = LoadIcon ( NULL, IDC_ARROW ); wc.hbrBackground = (HBRUSH) GetStockObject ( BLACK_BRUSH ); wc.lpszMenuName = NULL ; wc.lpszClassName = "D3D_LAP_TEST" ; if ( !RegisterClass ( &wc ) ) return FALSE ; // ウインドウを作成する // D3Dlap.hwnd = CreateWindow ( "D3D_LAP_TEST", // Class Name. "D3D_LAP_TEST", // Title Caption. WS_POPUP | WS_VISIBLE, // Window Style. 0, 0, // Window Position. D3Dlap.screenW, // Window Width & Height. D3Dlap.screenH, NULL, // Parent window. NULL, // Menu Handle. hInstance, // Instance Handle. NULL // WM_CREATE Infomation. ); if ( D3Dlap.hwnd == NULL ) return FALSE ; else return TRUE ; }
ほっほっほ。 これにて Windowの作成は完成!!
あ! ウインドウプロシージャをつくるのを忘れておったわ。
一応、いつでもESCで終了できるようにしーとこ。

/********************************************************************************/ /* WndProc ウインドウプロシージャ */ /********************************************************************************/
HRESULT CALLBACK WndProc ( HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam ) { switch ( message ) { case WM_KEYDOWN : switch ( wparam ) { case VK_ESCAPE : PostMessage ( hwnd, WM_CLOSE, 0, 0 ); break ; } break ; case WM_DESTROY : PostQuitMessage ( 0 ); break ; } return DefWindowProc ( hwnd, message, wparam, lparam ); }
…なんか、めっちゃ不安。
これで ええんかのぅ…
ま・・まぁ、とりあえず実行だ!!!

普通なら、「さぁ、ウインドウが表示されましたね。」 ってな感じで次のステップに進むのでしょうなぁ。

しかし!!
さすが(何が?)へっぽこプログラマーNao。 ウインドウすら表示されない!!
「あらー、どうしましょ。どうしましょ。」
でも、ウインドウ自体は存在しているらしい。
その 証拠(?)にウインドウが本来あるべき場所にカーソルを移動すると、カーソルが変化する。
(なんで 変化するのかは さらに不明。 なんだコレ、こんなカーソル見たことない!!
設定ではフツーのカーソルになるはずなのにぃ!!)
こんなカーソルこんなカーソル。

うーん、ESCで終了できるようにしといて良かった。 ちゃんと終了できました。

(00/4/29)訂正
カーソルの謎、解けました。
ていうか、コーディングミスでした。あっはっは。(泣)
ウインドウ作成のところで、LoadIcon じゃなくて、LoadCursor です。
いやー、なんでこんな間違いしたんだろ・・・それにアノカーソルはなんなんじゃろう?

うーむむ、まぁ、コレはほっといて次回は DirectX SDK のサンプルをコンパイルしてみよー。
それにしてもこのページ 読みにくいな。なんとかせねば!!

「はじめて」にも書いてたように、意見とか 指摘とか
こっそり(メール)あるいは 大胆に(BBS)に書いてくださいましね。
おねがいしまーす。


< Back to Diary.

[PR]生年月日で2010年占い鑑定:初回無料!貴女の運命運勢を占う