このモジュールでは、最小限の Windows デスクトップ プログラムを記述します。 空白のウィンドウを作成して表示する必要があります。 この最初のプログラムには、空白行とコメントをカウントせず、約 50 行のコードが含まれています。 それは私たちの出発点になります。後で、グラフィックス、テキスト、ユーザー入力、およびその他の機能を追加します。
Visual Studio で従来の Windows デスクトップ アプリケーションを作成する方法の詳細については、「チュートリアル: 従来の Windows デスクトップ アプリケーション (C++) の作成」参照してください。
プログラムの完全なコードを次に示します。
#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) > 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);
// All painting occurs here, between BeginPaint and EndPaint.
FillRect(hdc, &ps.rcPaint, (HBRUSH) (COLOR_WINDOW+1));
EndPaint(hwnd, &ps);
}
return 0;
}
return DefWindowProc(hwnd, uMsg, wParam, lParam);
}
Windows Hello World サンプル から完全な Visual Studio プロジェクトダウンロードできます。
このコードの動作の概要を簡単に説明すると便利な場合があります。 後のトピックでは、コードについて詳しく説明します。
- wWinMain プログラム エントリ ポイントです。 プログラムが起動すると、アプリケーション ウィンドウの動作に関する情報が登録されます。 最も重要な項目の 1 つは、この例の
WindowProc
という名前の関数のアドレスです。 この関数は、ウィンドウの動作 (外観、ユーザーとの対話方法など) を定義します。 - 次に、プログラムはウィンドウを作成し、ウィンドウを一意に識別するハンドルを受け取ります。
- ウィンドウが正常に作成されると、プログラムはループ中に 入力します。 ユーザーがウィンドウを閉じてアプリケーションを終了するまで、プログラムはこのループに残ります。
プログラムが明示的に WindowProc
関数を呼び出さないことに注意してください。ただし、これはほとんどのアプリケーション ロジックが定義されている場所であると述べています。 Windows は、一連のメッセージを渡すことによって、プログラムと通信します。
ループ中の 内のコードによって、このプロセスが駆動されます。 プログラムが DispatchMessage 関数を呼び出すたびに、Windows はメッセージごとに 1 回 WindowProc 関数を間接的に呼び出します。
このセクションでは、次の操作を行います。
関連トピック
-
C++ での Windows プログラムの学習