独学プログラミング言語のページ > Windows サンプル ソース > 何もしないプログラム

#include <windows.h>

LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
BOOL InitInstance(HINSTANCE, int);

char szClassName[]    = "template";	/* ウィンドウクラス */
char szWindowsTitle[] = "template";	/* ウィンドウ名 */

int WINAPI WinMain(HINSTANCE hCurInst, HINSTANCE hPrevInst,
				   LPSTR lpsCmdLine, int nCmdShow)
{
	MSG msg;
	BOOL bResult;
	WNDCLASSEX wc;
	/* ウィンドウ・クラスの登録 */
	wc.cbSize = sizeof(WNDCLASSEX);
	wc.style = CS_HREDRAW | CS_VREDRAW;
	wc.lpfnWndProc = WndProc;	/* プロシージャ名 */
	wc.cbClsExtra = 0;
	wc.cbWndExtra = 0;
	wc.hInstance = hCurInst;	/* インスタンス */
	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 = (LPCSTR)szClassName;
	/* hIconSmは16x16の小さいアイコンを指定します。 */
	wc.hIconSm = (HICON)LoadImage(NULL,
		MAKEINTRESOURCE(IDI_APPLICATION),	/* MAKEINTRESOURCE マクロ */
		IMAGE_ICON,
		0,
		0,
		LR_DEFAULTSIZE | LR_SHARED);
	/* ウィンドウ・クラスの登録に失敗したら終了する */
	if (!RegisterClassEx(&wc))
		return FALSE;
	
	/* ウィンドウの生成に失敗したら終了する */
	if (!InitInstance(hCurInst, nCmdShow)) 
		return FALSE;
	
	/* メッセージループ */
	while ((bResult = GetMessage(&msg, NULL, 0, 0)) != 0) {
		if (bResult == -1) {
			break;
		} else {
			TranslateMessage(&msg);
			DispatchMessage(&msg);
		}
	}
	return (int)msg.wParam;
}

/* ウィンドウの生成 */
BOOL InitInstance(HINSTANCE hInst, int nCmdShow)
{
	HWND hWnd;

	hWnd = CreateWindow(szClassName,	/* 登録されているクラス名 */
		szWindowsTitle,					/* ウィンドウ名(タイトルバーに表示されます) */
		WS_OVERLAPPEDWINDOW,				/* ウィンドウの種類 */
		CW_USEDEFAULT,						/* ウィンドウの横方向の位置 */
		CW_USEDEFAULT,						/* ウィンドウの縦方向の位置 */
		CW_USEDEFAULT,						/* ウィンドウの幅 */
		CW_USEDEFAULT,						/* ウィンドウの高さ */
		NULL,									/* 親ウィンドウのハンドル */
		NULL,									/* メニューハンドル */
		hInst,								/* アプリケーションインスタンスハンドル */
		NULL);
	if (!hWnd)
		return FALSE;
	ShowWindow(hWnd, nCmdShow);		/* ウィンドウを表示する。 */
	UpdateWindow(hWnd);					/* 更新リージョンが空ではない場合ウィンドウのクライアント領域を更新する */
	return TRUE;
}

/* ウィンドウプロシージャ */
LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
	switch (msg) {

	/*
	case WM_CREATE:
		break;
	case WM_COMMAND:
		break;
	case WM_PAINT:
		break;
	*/
	case WM_CLOSE:				/* 終了メッセージ */
		DestroyWindow(hWnd);
		break;
	case WM_DESTROY:			/* ウインドウが破棄されているとき、送られます。 */
		PostQuitMessage(0);	/* 自らの終了を要求したことをシステムに伝えます。 */
		break;
	default:	/* アプリケーションが処理しないウィンドウメッセージに対して、既定の処理を提供します。 */
		return (DefWindowProc(hWnd, msg, wParam, lParam));/* デフォルトの処理 */
	}
	return 0;
}

トップページ