用語集

  1. ウィンドウ・メッセージの種類
  2. 仮想キーコード
  3. ハンドル
  4. オブジェクト
  5. パレット
  6. RECT構造体
  7. カラーキー

ウィンドウ・メッセージの種類

ウィンドウから渡されるメッセージには、次のようなものがある。(抜粋)

メッセージ 意味
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_LBUTTONvbKeyLButton1マウスの左ボタン
VK_RBUTTONvbKeyRButton2マウスの右ボタン
VK_CANCELvbKeyCancel3Cancelキー
VK_MBUTTONvbKeyMButton4マウスの中央ボタン
VK_BACKvbKeyBack8BackSpaceキー
VK_TABvbKeyTab9Tabキー
VK_CLEARvbKeyClear12Clearキー
VK_RETURNvbKeyReturn13Enterキー
VK_SHIFTvbKeyShift16Shiftキー
VK_CONTROLvbKeyControl17Ctrlキー
VK_MENUvbKeyMenu18Alt(Menu)キー
VK_PAUSEvbKeyPause19Pauseキー
VK_CAPITALvbKeyCapital20CapsLockキー
VK_ESCAPEvbKeyEscape27Escキー
VK_SPACEvbKeySpace32Spaceキー
VK_PRIORvbKeyPageUp33PageUpキー
VK_NEXTvbKeyPageDown34PageDownキー
VK_ENDvbKeyEnd35Endキー
VK_HOMEvbKeyHome36Homeキー
VK_LEFTvbKeyLeft37←キー
VK_UPvbKeyUp38↑キー
VK_RIGHTvbKeyRight39→キー
VK_DOWNvbKeyDown40↓キー
VK_SELECTvbKeySelect41Selectキー
VK_PRINTvbKeyPrint42PrintScreenキー
VK_EXECUTEvbKeyExecute43Executeキー
VK_SNAPSHOTvbKeySnapshot44Snapshotキー
VK_INSERTvbKeyInsert45Insキー
VK_DELETEvbKeyDelete46Delキー
VK_HELPvbKeyHelp47Helpキー
VK_NUMPAD0vbKeyNumpad096テンキーの0キー
VK_NUMPAD1vbKeyNumpad197テンキーの1キー
VK_NUMPAD2vbKeyNumpad298テンキーの2キー
VK_NUMPAD3vbKeyNumpad399テンキーの3キー
VK_NUMPAD4vbKeyNumpad4100テンキーの4キー
VK_NUMPAD5vbKeyNumpad5101テンキーの5キー
VK_NUMPAD6vbKeyNumpad6102テンキーの6キー
VK_NUMPAD7vbKeyNumpad7103テンキーの7キー
VK_NUMPAD8vbKeyNumpad8104テンキーの8キー
VK_NUMPAD9vbKeyNumpad9105テンキーの9キー
VK_MULTIPLYvbKeyMultiply106テンキーの乗算記号(*)キー
VK_ADDvbKeyAdd107テンキーのプラス記号(+)キー
VK_SEPARATORvbKeySeparator108テンキーのEnterキー
VK_SUBTRACTvbKeySubtract109テンキーのマイナス記号(−)キー
VK_DECIMALvbKeyDecimal110テンキーの小数点(.)キー
VK_DEVIDEvbKeyDevide111テンキーの除算記号(/)キー
VK_F1vbKeyF1112ファンクションキーのF1キー
VK_F2vbKeyF2113ファンクションキーのF2キー
VK_F3vbKeyF3114ファンクションキーのF3キー
VK_F4vbKeyF4115ファンクションキーのF4キー
VK_F5vbKeyF5116ファンクションキーのF5キー
VK_F6vbKeyF6117ファンクションキーのF6キー
VK_F7vbKeyF7118ファンクションキーのF7キー
VK_F8vbKeyF8119ファンクションキーのF8キー
VK_F9vbKeyF9120ファンクションキーのF9キー
VK_F10vbKeyF10121ファンクションキーのF10キー
VK_F11vbKeyF11122ファンクションキーのF11キー
VK_F12vbKeyF12123ファンクションキーのF12キー
VK_F13vbKeyF13124ファンクションキーのF13キー
VK_F14vbKeyF14125ファンクションキーのF14キー
VK_F15vbKeyF15126ファンクションキーのF15キー
VK_F16vbKeyF16127ファンクションキーのF16キー
VK_NUMLOCKvbKeyNumlock144Numlockキー

ハンドル

ハンドルとは識別番号のことである。ウィンドウ・インスタンスの識別だけでなく、アイコン、カーソル、背景色などの指定にも使う。

アプリケーションがリソースに登録されているオブジェクトを利用するには、そのリソースをWindowsに登録し、そのリソースの「ハンドル」を指定することにより「このハンドルをプログラムで使いますよ」という情報をWindowsに知らせなければならない。

オブジェクト

構造体は複数のデータ(メンバ)をひとかたまりに集めたものである。このデータのかたまりに、そのデータを扱う処理(関数)を含めたものをクラスと呼ぶ。
このクラスをメモリの中に定義(宣言)したものをオブジェクトと呼ぶ。

C言語ではデータを中心にプログラムを作成してきた。この手法を手続き型プログラミングと呼び、手続き型プログラミングでプログラムが作成できる言語を手続き型プログラミング言語と呼ぶ。C言語などはこの言語である。
これに対し、クラスやオブジェクトを中心にプログラム設計を行う手法をオブジェクト指向プログラミングと呼び、オブジェクト指向プログラミングでプログラムが作成できる言語をオブジェクト指向言語と呼ぶ。C++やJavaなどはこの言語である。

Microsoft Visual C/C++は、C言語で手続き型とオブジェクト型の両方を扱える統合環境ソフトである。そしてDirectXは、オブジェクト指向で作成された各種クラスを提供している。この授業ではオブジェクト指向で作成されたDirectXの各種クラスを、手続き型言語のCで利用してゲームを作成する。

パレット

256色以下のビットマップを利用するときにはパレットを生成する必要があり、オフスクリーン・サーフェイス上では色情報をパレット番号で管理している。通常、パレットはビットマップ画像を元に作成する。
フルスクリーン・モードのとき、パレットは0番と255番を除いて好きな色を設定することができ、0番は黒、255番は白に予約されている。(ウィンドウ・モードの場合は通常0〜9番および246〜255番の20色がウィンドウに予約されていて、ウィンドウの枠やメニューなどの描画に利用される)

RECT構造体

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種類ある。
透明色のような動作をするのが転送元カラーキーで、ブロック転送をするときにカラーキーに指定された色は転送先に転送されない。
転送先カラーキーは、転送先にある画像のうち、カラーキーに指定された色の部分のみに転送もとの画像を転送できる。


[ TOP ]