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のテンプレートそのものは、ちゃんとしたコードなので、ぜひご活用ください(^_^)
スポンサーリンク
関連記事