EternalWindows
基礎 / 新しいデータ型

Winsowsプログラミングでよく使われる型や識別子を以下に示します。 ここで示したものを現段階で全て覚える必要はありませんので、 必要に応じて参照してください。

型や識別子 実体
TCHAR char(場合によってはwchar_t)
BYTE unsigned char
LONG long
WORD unsigned short
DWORD unsigned long
UINT unsigned int
LPTSTR TCHAR *
WPARAM unsigned int
LPARAM unsigned long
LRESULT unsigned long
BOOL unsigned int(主にTRUEとFALSEのどちらかを受け取る)
TRUE 1(処理の成功を表すときに使う)
FALSE 0(処理の失敗を表すときに使う)
WINAPI __stdcall
CALLBACK __stdcall

TCHARという型については特別に述べておくことがあります。 この型はWindowsプログラミングで文字列を扱うための型です。 したがって、文字列型の変数は以下のように宣言にするのではなく、

char szData[256];

以下のように宣言するように心掛けてください。

TCHAR szData[256];

ところで、このszDataという変数名はszとDataで名前を区切っています。 Windowsプログラミングでは変数名のプレフィックス(先頭につく文字)に、 その変数の型を伝えるような文字をつけるべきとする傾向があるため、 できるだけこのような規則に従って変数名を決めるべきとされています。 プレフィックスには、以下のようなものがあります。

プレフィックス データ型
n int
l long
b BOOL
w WORD
dw DWORD
lp ポインタ
h ハンドル
fn 関数
sz '\0'で終了する文字列

たとえば、コンソールプログラムでデータのサイズを扱う変数名は、

int size;

という感じになりますが、Windowsプログラムでは以下のようにするべきです。

int nSize;

なお、このような変数名の付け方はハンガリアン記法と呼ばれます。

それでは、今一度WinMain関数に注目してみましょう。 今度は、意味不明な文字列の羅列ではなく、 windows.hにより定義された型であると認識できるはずです。

int WINAPI WinMain(HINSTANCE hinst, HINSTANCE hinstPrev, LPSTR lpszCmdLine, int nCmdShow)

まずWINAPIという部分を見てください。 先に示した表によれば、この定義の正体は__stdcallであることが分かります。 これは呼び出し規約といわれ、関数の呼び出しの際に引数をどのようにメモリに格納するかを表します。 今の段階では、システムから呼び出される関数には呼び出し規約を付けなければならないと覚えておくだけで十分です。

HINSTANCE hinst

HINSTANSE型のhinstという変数が定義されています。 HINSTANSEという型は先の表にはありませんでしたが、 この型の最初の文字がHであることに注目してください。 Hで始まる型はXXXハンドルなどと呼ばれ、 システムが管理しているデータへの参照に使われます。 HINSTANSEは、インスタンスハンドルです。 インスタンスハンドルは、EXEイメージ(実行ファイル)を表しており、 イメージからアイコンやカーソルを取得するときに用いられます。

HINSTANCE hinstPrev

HINSTANSE型のhinstPrevという変数が定義されています。 この変数は16ビット時代のWindowsで使われていた変数で、現在は使われていません。 そのため、変数名を省略してもよいのですが、C言語でのコンパイルを保障するため定義しています。

LPSTR lpszCmdLine

LPSTR型のlpszCmdLineという変数が定義されています。 lpszCmdLineはコマンドライン文字列へのアドレスを指していますが、 本サイトのプログラムでコマンドライン文字列を扱うのは一割程度なので、 詳細は必要になったときに説明します。

int nCmdShow

int型のnCmdShowという変数が定義されています。 int型であるためプレフィックスはnとなっています。 この変数には、ウインドウの表示状態が格納されます。 ウインドウを表示するプログラムの場合は使うことになるのですが、 とりわけ意識する変数ではありません。

各引数の簡単な説明をしましたが、その意味を今の段階で覚える必要はありません。 HINSTANSEやLPSTRというのが、変数の型であることを覚えるだけで十分です。 見慣れない文字列がコードに存在しても、 それを型や識別子として認識できることが重要なのです。 次節からWinMain関数の中にコードを書いていきます。


戻る