ちいさいWin32APIのプログラムを作る
Win32APIの理解をすすめるために小さいプログラムを作った.
OKボタンとキャンセルボタンがあるダイアログだけのもの.
ソース
リソースファイルはリソースエディタで適当に作ってください.
#include "stdafx.h" #include "Win32Test.h" INT_PTR CALLBACK MainDialogProc(HWND, UINT, WPARAM, LPARAM); int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow) { MSG msg; BOOL stat; HWND hWnd; hWnd = CreateDialog(hInst, MAKEINTRESOURCE(IDD_MAIN_DIALOG), NULL, MainDialogProc); if (!hWnd) { return FALSE; } ShowWindow(hWnd, nCmdShow); /* (1) */ UpdateWindow(hWnd); while (stat = GetMessage(&msg, NULL, 0, 0)) { if (stat == -1) { // Error return FALSE; } DispatchMessage(&msg); /* (2) */ } return (int) msg.wParam; } INT_PTR CALLBACK MainDialogProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) { switch (message) { case WM_INITDIALOG: return (INT_PTR)TRUE; case WM_COMMAND: switch (LOWORD(wParam)) { case IDOK: case IDCANCEL: PostQuitMessage(0); } break; case WM_DESTROY: PostQuitMessage(0); break; } return (INT_PTR) FALSE; }
ちょっとした説明
- (1) ShowWindow(hWnd, nCmdShow);
- リソースファイルに定義したダイアログのスタイルによっては表示されないかもしれないので念のため.
- (2) DispatchMessage(&msg);
- これがないとプロシージャにメッセージがわたりません.この行をなくすとうんともすんとも言わないダイアログができます.