Visual C++ 2013 Win32アプリケーション作成 を参考に、プロジェクトを作成して下さい。
流れ
1.windows.hをインクルード
Win32アプリケーションでは、windows.hは必須です。
2.WinMain()
コンソールアプリケーションでは、main関数が必須でしたが、Win32アプリケーションでは、WinMain()が 必須です。WinMain()からプログラムが開始されます。
int APIENTRY WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow );
4つの引数の説明。今回この引数を使いませんので、読み飛ばして構いません。
引数 | 意味 | 解説 |
---|---|---|
hInstance | インスタンスハンドル |
・ハンドル・・・ウィンドウ・ファイル・画像などの各構成要素(オブジェクト)を指し示すための識別子。 Windowsが識別するIDと考えれば、分かりやすいと思います。 ・インスタンスハンドルとは、ここのプログラムを識別するためのハンドル 変数の型はHINSTANCE型 (HINSTANCE型は、構造体へのポインタです。) |
hPrevInstance | 未使用(常にNULL) | (Win16時代にインスタンスハンドルとして使用) |
lpCmdLine | コマンドライン引数 |
(コマンドプロンプトやショートカットで「実行ファイル名」の後ろにスペースを挟んで入力した文字列) 変数の型はLPSTR型(Long Pointer STRing。char*型と同じ文字列型) |
nCmdShow | ウィンドウの表示方法 | 起動時のウィンドウの表示方法を決めます。ウィンドウの表示方法は、通常・最大化・最小化などがあります。 |
呼び出し規約
WinMain関数の前に必ず、「APIENTRY」もしくは、「WINAPI」と指定する必要があります。
#define APIENTRY WINAPI
#define WMIAPI __stdcall
と定義されていますので、「APIENTRY」と「WINAPI」は、__stdcallを意味します。
__stdcallは、「呼び出し規約」と呼ばれるもののひとつです。
呼び出し規約とは、スタックというメモリ領域の利用の仕方を決めています。
_tWinMain()
WinMain()の代わりに、_tWinMain()を使用する方法もあります。Visual C++が自動生成するソースコード
は、_tWinMain()を使っています。
この場合tchar.hをインクルードする必要があります。
tchar.hの中で、_tWinMainからWinMainに変換しています。
つまり、全く同じ動作をします。
#include <windows.h> #include <tchar.h> int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow) { return 0; }
lpCmdLineの変数の型が、LPTSTR型に変わっている点に注意してください。
LPTSTR型は、文字セットをunicodeでコンパイルすると、LPWSTR型(= WCHAR*型、ユニコードの文字列型)に、
文字セットをマルチバイトでコンパイルすると、LPSTR型(= char*型、マルチバイトの文字列型)になります。
LPTSTR、LPWSTR、LPSTRなどの文字列の型は、
文字列の型
で解説しています。命名基準も記載していますので、ご覧下さい。
ソースコードの入力
ソースコードは下記のように入れてください。
今回作成するアプリケーションは、まだ何も表示しません。
#include <windows.h>
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
return 0;
}
次のステップ
次に
ダイアログボックスの作成
へ進んでください。
リソースファイルを作成したくない場合は、
ウィンドウの表示
へ進んでください。