ウィンドウから渡されるメッセージには、次のようなものがある。(抜粋)
メッセージ 意味 WM_COMMAND ユーザがメニューからコマンドを選択したとき、コントロールが親ウィンドウに通知を出すとき、アクセラレータキーストロークが変換されたときに送られる。 WM_CHAR WM_KEYDOWNメッセージがTranslateMessage関数によって変換されたとき、キーボードフォーカスを持っているウィンドウにポストされる。 WM_CLOSE ウィンドウやアプリケーションの終了の合図として送られる。 WM_CREATE アプリケーションがCreateWindowEX関数やCreateWindow関数を使ってウィンドウの作成を要求したときに送られる。ウィンドウプロシージャはウィンドウが内部的に生成された後、かつ、実際に画面に表示される前にこのメッセージを受け取る。 WM_DESTROY ウィンドウが破棄されようとしているときに送られる。ウィンドウプロシージャはウィンドウが画面から取り除かれた後、かつ、内部的に破棄される前にこのメッセージを受け取る。 WM_DROPFILES ユーザがファイルをドロップしたときに送られる。DragAcceptFiles関数によってファイルのドロップを受け入れることを宣言したアプリケーションに対して送られる。 WM_GETTEXT ウィンドウのタイトルやエディットコントロールのテキストなどを取得するために送る。 WM_HELP ユーザが[F1]キーを押したときに送られる。 WM_HSCROLL ウィンドウの水平スクロールバー(または水平スクロールバーコントロール)でスクロールイベントが発生したときに送られる。 WM_INITDIALOG ダイアログボックスが表示される前にダイアログプロシージャに送られる。 WM_KEYDOWN ユーザがキーを押したときに、キーボードフォーカスを持つウィンドウに送られる(システムキーが押されたときは除く)。 WM_KEYUP ユーザがキーを放したときに、キーボードフォーカスを持つウィンドウに送られる(システムキーが押されたときは除く)。 WM_LBUTTONDBCLK ユーザがマウスの左ボタンをダブルクリックしたときにポストされる。 WM_LBUTTONDOWN ユーザがマウスの左ボタンを押したときにポストされる。 WM_LBUTTONUP ユーザがマウスの左ボタンを離したときにポストされる。 WM_MOUSEMOVE ユーザがマウスカーソルを動かしたときにポストされる。 WM_MOVE ウィンドウの位置が変わったときに送られる。 WM_PAINT ウィンドウの再描画が要求されたときに送られる。 WM_QUIT アプリケーションが自分自身を終了するためにPostQuitMessage関数を呼び出したときに生成される。 WM_RBUTTONDBCLK ユーザがマウスの右ボタンをダブルクリックしたときにポストされる(ウィンドウクラスのスタイルでCS_DBLCLKSを指定のこと)。 WM_RBUTTONDOWN ユーザがマウスの右ボタンを押したときにポストされる。 WM_RBUTTONUP ユーザがマウスの左ボタンを離したときにポストされる。 WM_SETTEXT ウィンドウのタイトルやエディットコントロールのテキストなどを設定するために送る。 WM_SIZE ウィンドウのサイズが変わったときに送られる。 WM_SYSCOMMAND ユーザがウィンドウメニューからコマンドを選択したときや、最大化ボタン、最小化ボタンをクリックしたときに送られる。 WM_TIMER タイマーのタイムアウト時間が経過したときにポストされる。タイマーを設定するにはSetTimer関数を使う。 WM_USER アプリケーション独自のメッセージを定義するために用意されている定数。通常はWM_USER + 0x101以上、WM_USER + 0x7FFF以下を利用する。 WM_VSCROLL ウィンドウの垂直スクロールバー(または垂直スクロールバーコントロール)でスクロールイベントが発生したときに送られる。
どのキーが押されているかを調べるには、通常のキー(英数字のキー)であれば'A'、'3'と指定すればよい。では、SpaceキーやEnterキーはどのように調べればよいのだろうか?
SpaceキーやEnterキーなどの特殊キーには、仮想キーコードが割り当てられている。仮想キーコードは、Visual BasicのKeyCodeのことであり、定数である。
以下は、SDKで定義されている仮想キーコードとVisual BasicのKeyCode定数とを対比させたリストである。
SDK定数 VB定数 値(10進数) 内容 VK_LBUTTON vbKeyLButton 1 マウスの左ボタン VK_RBUTTON vbKeyRButton 2 マウスの右ボタン VK_CANCEL vbKeyCancel 3 Cancelキー VK_MBUTTON vbKeyMButton 4 マウスの中央ボタン VK_BACK vbKeyBack 8 BackSpaceキー VK_TAB vbKeyTab 9 Tabキー VK_CLEAR vbKeyClear 12 Clearキー VK_RETURN vbKeyReturn 13 Enterキー VK_SHIFT vbKeyShift 16 Shiftキー VK_CONTROL vbKeyControl 17 Ctrlキー VK_MENU vbKeyMenu 18 Alt(Menu)キー VK_PAUSE vbKeyPause 19 Pauseキー VK_CAPITAL vbKeyCapital 20 CapsLockキー VK_ESCAPE vbKeyEscape 27 Escキー VK_SPACE vbKeySpace 32 Spaceキー VK_PRIOR vbKeyPageUp 33 PageUpキー VK_NEXT vbKeyPageDown 34 PageDownキー VK_END vbKeyEnd 35 Endキー VK_HOME vbKeyHome 36 Homeキー VK_LEFT vbKeyLeft 37 ←キー VK_UP vbKeyUp 38 ↑キー VK_RIGHT vbKeyRight 39 →キー VK_DOWN vbKeyDown 40 ↓キー VK_SELECT vbKeySelect 41 Selectキー VK_PRINT vbKeyPrint 42 PrintScreenキー VK_EXECUTE vbKeyExecute 43 Executeキー VK_SNAPSHOT vbKeySnapshot 44 Snapshotキー VK_INSERT vbKeyInsert 45 Insキー VK_DELETE vbKeyDelete 46 Delキー VK_HELP vbKeyHelp 47 Helpキー VK_NUMPAD0 vbKeyNumpad0 96 テンキーの0キー VK_NUMPAD1 vbKeyNumpad1 97 テンキーの1キー VK_NUMPAD2 vbKeyNumpad2 98 テンキーの2キー VK_NUMPAD3 vbKeyNumpad3 99 テンキーの3キー VK_NUMPAD4 vbKeyNumpad4 100 テンキーの4キー VK_NUMPAD5 vbKeyNumpad5 101 テンキーの5キー VK_NUMPAD6 vbKeyNumpad6 102 テンキーの6キー VK_NUMPAD7 vbKeyNumpad7 103 テンキーの7キー VK_NUMPAD8 vbKeyNumpad8 104 テンキーの8キー VK_NUMPAD9 vbKeyNumpad9 105 テンキーの9キー VK_MULTIPLY vbKeyMultiply 106 テンキーの乗算記号(*)キー VK_ADD vbKeyAdd 107 テンキーのプラス記号(+)キー VK_SEPARATOR vbKeySeparator 108 テンキーのEnterキー VK_SUBTRACT vbKeySubtract 109 テンキーのマイナス記号(−)キー VK_DECIMAL vbKeyDecimal 110 テンキーの小数点(.)キー VK_DEVIDE vbKeyDevide 111 テンキーの除算記号(/)キー VK_F1 vbKeyF1 112 ファンクションキーのF1キー VK_F2 vbKeyF2 113 ファンクションキーのF2キー VK_F3 vbKeyF3 114 ファンクションキーのF3キー VK_F4 vbKeyF4 115 ファンクションキーのF4キー VK_F5 vbKeyF5 116 ファンクションキーのF5キー VK_F6 vbKeyF6 117 ファンクションキーのF6キー VK_F7 vbKeyF7 118 ファンクションキーのF7キー VK_F8 vbKeyF8 119 ファンクションキーのF8キー VK_F9 vbKeyF9 120 ファンクションキーのF9キー VK_F10 vbKeyF10 121 ファンクションキーのF10キー VK_F11 vbKeyF11 122 ファンクションキーのF11キー VK_F12 vbKeyF12 123 ファンクションキーのF12キー VK_F13 vbKeyF13 124 ファンクションキーのF13キー VK_F14 vbKeyF14 125 ファンクションキーのF14キー VK_F15 vbKeyF15 126 ファンクションキーのF15キー VK_F16 vbKeyF16 127 ファンクションキーのF16キー VK_NUMLOCK vbKeyNumlock 144 Numlockキー
ハンドルとは
識別番号のことである。ウィンドウ・インスタンスの識別だけでなく、アイコン、カーソル、背景色などの指定にも使う。アプリケーションがリソースに登録されているオブジェクトを利用するには、そのリソースをWindowsに登録し、そのリソースの「ハンドル」を指定することにより「このハンドルをプログラムで使いますよ」という情報をWindowsに知らせなければならない。
構造体は複数のデータ(メンバ)をひとかたまりに集めたものである。このデータのかたまりに、そのデータを扱う処理(関数)を含めたものを
クラスと呼ぶ。
このクラスをメモリの中に定義(宣言)したものをオブジェクトと呼ぶ。C言語では
データを中心にプログラムを作成してきた。この手法を手続き型プログラミングと呼び、手続き型プログラミングでプログラムが作成できる言語を手続き型プログラミング言語と呼ぶ。C言語などはこの言語である。
これに対し、クラスやオブジェクトを中心にプログラム設計を行う手法をオブジェクト指向プログラミングと呼び、オブジェクト指向プログラミングでプログラムが作成できる言語をオブジェクト指向言語と呼ぶ。C++やJavaなどはこの言語である。Microsoft Visual C/C++は、C言語で手続き型とオブジェクト型の両方を扱える統合環境ソフトである。そしてDirectXは、オブジェクト指向で作成された各種クラスを提供している。この授業では
オブジェクト指向で作成されたDirectXの各種クラスを、手続き型言語のCで利用してゲームを作成する。
256色以下のビットマップを利用するときにはパレットを生成する必要があり、オフスクリーン・サーフェイス上では色情報を
パレット番号で管理している。通常、パレットはビットマップ画像を元に作成する。
フルスクリーン・モードのとき、パレットは0番と255番を除いて好きな色を設定することができ、0番は黒、255番は白に予約されている。(ウィンドウ・モードの場合は通常0〜9番および246〜255番の20色がウィンドウに予約されていて、ウィンドウの枠やメニューなどの描画に利用される)
windows.hには
RECT構造体が宣言されている。
typedef struct tarRECT { DWORD left; DWORD top; DWORD right; DWORD bottom; } RECT;この構造体は4つのメンバを持ち、left, topで画像の左上x,y座標、right, bottomで画像の右下x,y座標を表現できる。DirectDrawはこのRECT構造体で画像の矩形をやり取りするよう作られている。
例えばフルスクリーン(640×480ピクセル)の背景画像を用意し、この画像を全て背景として貼り付ける場合、次のように指定する。
RECT rcRect;
rcRect.left = 0;
rcRect.top = 0;
rcRect.right = 640;
rcRect.bottom = 480;上のプログラムは、SetRect関数を用いて次のように記述できる。
RECT rcRect;
SetRect(&rcRect, 0, 0, 640, 480);Case by Caseで使い分けよう。
透明エフェクトや半透明エフェクトに使用される色を示す値。たとえば、ハードウェアのブリット機能を使用した場合、矩形領域内のカラー キーとして設定された値を持つピクセル以外のすべてのピクセルがブリットされる。これは、矩形でないスプライトをサーフェス上に作成する。
カラーキーには「転送元カラーキー」と「転送先カラーキー」の2種類ある。
透明色のような動作をするのが転送元カラーキーで、ブロック転送をするときにカラーキーに指定された色は転送先に転送されない。
転送先カラーキーは、転送先にある画像のうち、カラーキーに指定された色の部分のみに転送もとの画像を転送できる。