【C++】「WinMain」関数を定義する方法

【C++】
「WinMain」関数を定義する方法







「WinMain」関数とは


「Windows」アプリケーションは、
アプリを実行し、起動すると、
「WinMain」関数を呼び出して実行するところから始まります。

「WinMain」関数には、
プログラムの起動に必要な情報を
「Windows]から受け取るための引数が指定されている。


Back

「WinMain」関数の書式



#include <windows.h>
#include <tchar.h>

int WINAPI WinMain(
        HINSTANCE hInstance ,
        HINSTANCE hPrevInstance ,
        LPSTR lpCmdLine ,
        int nCmdShow ) {


// 実行するコードを記述


// メッセージボックスを表示するコード
MessageBox(NULL, _T("Test - メッセージボックスを表示ました。"), _T("WinApp Message Test Box"), MB_OK);


return 0;

}

ヘッダファイル
ヘッダファイル「windows.h」は、
「Win32 API」を利用するためのヘッダファイルで、
「windows.h」の中に、
様々な「関数」「プロトタイプ宣言」「定数」などが定義されている。

ヘッダファイル「tchar.h」には、
「Win32API」で使用する「文字列」のための「ヘッダファイル」。

「WindowsOS」で使用されている「マルチバイト文字」
・char型
・wchar_t型(現在の推奨)


「tchar.h」をインクルードすると、
「TCHAR」という型が使用できるようになり、
コンパイル時に、
「char」型か「wchar_t」型に置き換えられる。

「""」で囲むと「char」型
「L""」で囲むと「wchar_t」型
「_T("")」で囲むと「TCHAR」型

というように型を指定できる。

「TCHAR」型が置き換えられる方は、
プロジェクトの「プロパティ設定」によって決まる。
デフォルトは、「ワイド文字(wchar_t型)」



「WINAPI」は、
「返り値」の型を指定するワードで、
「関数の呼び出し規約」の一種。
C言語キーワード「stdcall」を「#define」プロセッサで再定義したもの。
「呼び出し規約」は、
関数を呼び出す処理をどのマシン語に翻訳するかを指定する。
「Windows」の呼び出し規約は、「WINAPI」なので、
「Windows」アプリケーションの場合は、「WINAPI」の指定と覚えておく。



「WinMain」関数の引数
HINSTANCE hInstance 現在のインスタンスハンドル
「インスタンスハンドル」と呼ばれる型。
このプログラムを識別する番号。
「ハンドル」とは、何かを識別するために使う数値のことを指す。
「インスタンスハンドル」は、
ここのプログラムを識別するためのハンドル。
一部の「Win32 API」関数を呼び出すために、引数として指定することがある。
HINSTANCE hPrevInstance 互換性のために残されている引数。
第二引数の値は、常に「NULL」 。
「Win16」の産物で、現在は利用されていない。
「WindowsOS」では、同じアプリケーションを複数起動可能。
「Win16」では、
同一のアプリケーションの「インスタンス」はメモリを共有していたため、
自分自身の別インスタンスの確認に「第二引数」が使われていた。
LPSTR lpCmdLine コマンドライン文字列
「コマンドライン」から受け取った値が保存される引数で、
「LPSTR」という型は、Windows標準の「文字型」。
「コマンドプロンプト」から起動するプログラムは、
「プログラム名 オプション文字列」と指定して起動する。
「LPSTR lpCmdLine」には、「オプション文字列」が格納される。
int nCmdShow ウィンドウの表示状態を指定する値を保存している引数。
アプリケーションの初期表示方法を指定することが可能。
ショートカットのプロパティにある実行時の「大きさ」の値が渡される。


Back