Windows API (Win32 API) の基本テンプレートを書いてみた

Windows API (Win32 API) の基本テンプレートを書きました。
使いまわせます!
ぜひ、活用してください(^^)
目次
スポンサーリンク
Windows API の基本テンプレート
#include <windows.h>
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); // ウィンドウプロシージャ
ATOM InitApp(HINSTANCE); // ウィンドウクラスの登録
BOOL InitInstance(HINSTANCE, int); // ウィンドウの生成
// Windows プログラムのエントリーポイント
int WINAPI WinMain(HINSTANCE hCurInst, HINSTANCE hPrevInst,
LPSTR lpsCmdLine, int nCmdShow)
{
MSG msg;
BOOL bRet;
// ウィンドウクラスの登録
if (!InitApp(hCurInst)) {
return FALSE;
}
// ウィンドウの生成
if (!InitInstance(hCurInst, nCmdShow)) {
return FALSE;
}
// メッセージを取得
while ((bRet = GetMessage(&msg, NULL, 0, 0)) != 0) {
if (bRet == -1) {
break;
} else {
TranslateMessage(&msg); // メッセージを変換
DispatchMessage(&msg); // メッセージを送出
}
}
return (int)msg.wParam;
}
// ウィンドウクラスの登録
ATOM InitApp(HINSTANCE hInst)
{
WNDCLASSEX wc;
wc.cbSize = sizeof(WNDCLASSEX); // 構造体のサイズ
wc.style = CS_HREDRAW | CS_VREDRAW; // クラスのスタイル
wc.lpfnWndProc = WndProc; // プロシージャ名
wc.cbClsExtra = 0; // 補助メモリ
wc.cbWndExtra = 0; // 補助メモリ
wc.hInstance = hInst; // インスタンス
wc.hIcon = (HICON)LoadImage( // アイコン
NULL, MAKEINTRESOURCE(IDI_APPLICATION),
IMAGE_ICON, 0, 0, LR_DEFAULTSIZE | LR_SHARED);
wc.hCursor = (HCURSOR)LoadImage( // カーソル
NULL, MAKEINTRESOURCE(IDC_ARROW),
IMAGE_CURSOR, 0, 0, LR_DEFAULTSIZE | LR_SHARED);
wc.hbrBackground = // 背景ブラシ
(HBRUSH)GetStockObject(WHITE_BRUSH);
wc.lpszMenuName = NULL; // メニュー名
wc.lpszClassName = TEXT("Class Name"); // クラス名
wc.hIconSm = (HICON)LoadImage( // 小さいアイコン
NULL, MAKEINTRESOURCE(IDI_APPLICATION),
IMAGE_ICON, 0, 0, LR_DEFAULTSIZE | LR_SHARED);
return(RegisterClassEx(&wc));
}
// ウィンドウの生成
BOOL InitInstance(HINSTANCE hInst, int nCmdShow)
{
HWND hWnd;
hWnd = CreateWindow(
TEXT("Class Name"), // クラス名
TEXT("ウィンドウ名"), // ウィンドウ名
WS_OVERLAPPEDWINDOW, // ウィンドウスタイル
CW_USEDEFAULT, // x位置
CW_USEDEFAULT, // y位置
CW_USEDEFAULT, // ウィンドウ幅
CW_USEDEFAULT, // ウィンドウ高さ
NULL, // 親ウィンドウのハンドル、親を作るときは NULL
NULL, // メニューハンドル、クラスメニューを使うときは NULL
hInst, // インスタンスハンドル
NULL // ウィンドウ作成データ
);
if (!hWnd) {
return FALSE;
}
ShowWindow(hWnd, nCmdShow); // ウィンドウの表示状態を設定
UpdateWindow(hWnd); // ウィンドウを更新
return TRUE;
}
// ウィンドウプロシージャ(コールバック関数)
LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp)
{
switch (msg) {
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return(DefWindowProc(hWnd, msg, wp, lp));
}
return 0;
}
Windows API のテンプレートの解説
少しだけWindows API の関数や構造体について説明していきたいと思います。
WinMain関数について
WinMain関数は、C言語のmain関数にと同じです。最初に実行される関数です。
この関数が終了すれば、プログラムも終了です。
構造体WNDCLASSEXについて
ウィンドウの性質を格納する構造体です。
構造体のメンバに関する説明は割愛します。
RegisterClassEx関数について
ウィンドウクラスを登録する関数です。
構造体WNDCLASSEXで作ったインスタンスを引数として渡せば、ウィンドウクラスとして登録されます。
CreateWindow関数について
ウィンドウを作成する関数です。
ShowWindow関数について
ウィンドウを表示する関数です。
UpdateWindow関数について
ウィンドウを更新する関数です。
GetMessage関数について
メッセージを取得し、MSG構造体に格納する関数です。
MSG構造体はメッセージを格納する構造体です。
メッセージには、キー入力、クリックなど全てが含まれています。
WndProc関数について
メッセージを処理するための関数です。
直前に書いてある「CALLBACK」とは、コールバック関数のことで、システムから呼び出されることを意味します。
まとめ
関数や構造体についての説明は、かなりアバウトです。
Windows APIのテンプレートそのものは、ちゃんとしたコードなので、ぜひご活用ください(^_^)
スポンサーリンク
関連記事