///////////////////////////////////////////////////////////////////////////////
// Win32 Application Template
///////////////////////////////////////////////////////////////////////////////
#include <windows.h>
char szWinName[] = "Template"; // ウィンドウクラスの名前
ATOM InitApplication(HINSTANCE hInstance);
HWND InitInstance(HINSTANCE hInstance, int nCmdShow);
LRESULT CALLBACK WindowFunc(HWND hWnd, UINT uMes, WPARAM wp, LPARAM lp);
BOOL QuitMessage(HWND hWnd);
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow){
HWND hWnd;
MSG msg;
if(!InitApplication(hInstance))
return FALSE;
if(NULL == (hWnd = InitInstance(hInstance, nCmdShow)))
return FALSE;
// メッセージループを生成する
while(1){
if(PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)){
if(msg.message == WM_QUIT)
break;
TranslateMessage(&msg); // キーボードを使用可能にする
DispatchMessage(&msg); // コントロールをWindowsに戻す
}
// Idle処理
}
return msg.wParam;
}
ATOM InitApplication(HINSTANCE hInstance){
WNDCLASSEX wcl;
// ウィンドウクラスを定義する
wcl.hInstance = hInstance; // このインスタンスのハンドル
wcl.lpszClassName = szWinName; // ウィンドウクラス名
wcl.lpfnWndProc = WindowFunc; // ウィンドウ関数
wcl.style = 0; // デフォルトのスタイル
wcl.cbSize = sizeof(WNDCLASSEX);// WNDCLASSEX構造体のサイズ
wcl.hIcon = NULL; // ラージアイコン
wcl.hIconSm = NULL; // スモールアイコン
wcl.hCursor = LoadCursor(NULL, IDC_ARROW);
// カーソルスタイル
wcl.lpszMenuName = NULL; // メニューなし
wcl.cbClsExtra = 0; // エキストラなし
wcl.cbWndExtra = 0; // 必要なインフォメーション
// ウィンドウを白にする
wcl.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
// ウィンドウクラスを登録する
return RegisterClassEx(&wcl);
}
HWND InitInstance(HINSTANCE hInstance, int nCmdShow){
HWND hWnd;
// ウィンドウクラスの登録ができたので,ウィンドウをクリエイトできる
hWnd = CreateWindow(
szWinName, // ウィンドウクラスの名前
"Template", // タイトル
WS_OVERLAPPEDWINDOW, // ウィンドウスタイル-ノーマル
CW_USEDEFAULT, // X座標-Windowsに任せる
CW_USEDEFAULT, // Y座標-Windowsに任せる
CW_USEDEFAULT, // 幅-Windowsに任せる
CW_USEDEFAULT, // 高さ-Windowsに任せる
HWND_DESKTOP, // 親ウィンドウなし
NULL, // メニューなし
hInstance, // このプログラムのインスタンスのハンドル
NULL // 追加引数なし
);
if(NULL == hWnd)
return NULL;
// ウィンドウを表示する
ShowWindow(hWnd, nCmdShow);
UpdateWindow(hWnd);
return hWnd;
}
// この関数は,Windowsから呼び出されて,メッセージキューから
// メッセージの引き渡しを受ける
LRESULT CALLBACK WindowFunc(HWND hWnd, UINT uMsg, WPARAM wp, LPARAM lp){
HINSTANCE hInstance;
hInstance = (HINSTANCE)GetWindowLong(hWnd, GWL_HINSTANCE);
switch(uMsg){
case WM_CREATE: // ウィンドウの作成
break;
case WM_DESTROY:
PostQuitMessage(0); // WM_QUITを発行する
break;
case WM_CLOSE: // 各ウィンドウにWM_DESTROYを発行する
if(QuitMessage(hWnd)){ // 終了の確認
DestroyWindow(hWnd); // メインウィンドウの破棄.WM_DESTROY発行
}
break;
default: // 上記以外はWindowsに処理させる
return DefWindowProc(hWnd, uMsg, wp, lp);
}
return 0;
}
BOOL QuitMessage(HWND hWnd){
if(MessageBox(hWnd, (LPCSTR)"終了しますか?", (LPCSTR)"終了確認",
MB_YESNO | MB_ICONQUESTION) == IDYES)
return TRUE;
return FALSE;
}