Win32 App Module 1. Your First Windows Program - yoshimune/LearningDirectX11 GitHub Wiki

This page refers to 【Module 1. Your First Windows Program

このモジュールでは、最小のWindowsプログラムを記述します。やることは、単純なウィンドウを表示することです。最初のプログラムは、50行のコードで構成されます(ブランク行、コメントは含めません)。後のグラフィックス、テキスト、ユーザー入力、他様々な機能の足がかりになります。

完全なコード

#ifndef UNICODE
#define UNICODE
#endif 

#include <Windows.h>

LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);

int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PWSTR pCmdLine, int nCmdShow)
{
	// Register the window class.
	const wchar_t CLASS_NAME[] = L"Sample Window Class";

	WNDCLASS wc = {};

	wc.lpfnWndProc = WindowProc;
	wc.hInstance = hInstance;
	wc.lpszClassName = CLASS_NAME;

	RegisterClass(&wc);

	//Create the window.

	HWND hwnd = CreateWindowEx(
		0,								// Optional window styles.
		CLASS_NAME,						// Window class
		L"Learn to Program Windows",	// Window text
		WS_OVERLAPPEDWINDOW,			// Window style

		// Size and position
		CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,

		NULL,		// Parent Window
		NULL,		// Menu
		hInstance,	// Instance handle
		NULL		// Additional application data
	);

	if (hwnd == NULL)
	{
		return 0;
	}

	ShowWindow(hwnd, nCmdShow);

	// Run the message loop.

	MSG msg = {};
	while (GetMessage(&msg, NULL, 0, 0))
	{
		TranslateMessage(&msg);
		DispatchMessage(&msg);
	}

	return 0;
}

LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
	switch (uMsg)
	{
	case WM_DESTROY:
		PostQuitMessage(0);
		return 0;
		
	case WM_PAINT:
	
		PAINTSTRUCT ps;
		HDC hdc = BeginPaint(hwnd, &ps);
		FillRect(hdc, &ps.rcPaint, (HBRUSH)(COLOR_WINDOW + 1));
		EndPaint(hwnd, &ps);
		return 0;
	}
	return DefWindowProc(hwnd, uMsg, wParam, lParam);
}

このコードが何をしているのかを簡単に理解しておくと良いです。後のトピックでコードを詳しく説明します。

  1. wWinMainはエントリーポイントです。プログラムが開始すると、いくつかのアプリケーションウィンドウの振る舞いに関する方法が登録されます。最も重要な項目の一つはWindowProcという関数のアドレスです。この関数はWindowの振る舞い(外観、どうやってユーザーとやり取りするか、などなど)を定義しています。
  2. 次にプログラムはウィンドウを作成し、ウィンドウ固有の識別するハンドルを受け取ります。
  3. もしウィンドウ作成に成功した場合、プログラムはwhileループに配します。プログラムは、ユーザーがウィンドウを閉じ、アプリケーションが終了するまでこのループ内にいます。

プログラムはWindoeProc関数を明示的に呼ばないことに注意してください。ほとんどのアプリケーションロジックが定義される場所であっても、呼び出しません。Windowsはメッセージを通してプログラムとやりとりします。Whileループ内のコードはこのプロセスを駆動します。プログラムがDispatchMessageを呼び出すたびに、間接的にWindowsが各メッセージに対してWindowProc関数を呼び出すようにします。

Next:Win32 App Creating a Window

⚠️ **GitHub.com Fallback** ⚠️