メインのアプリケーション ファイル

myProject.h

#pragma once

#include "resource.h"  // リソースIDを定義するヘッダー (resource.h)

myProject.cpp

#include "stdafx.h"    // プリコンパイル済みヘッダーファイルのヘッダー (stdafx.h)
#include "myProject.h" // メインのアプリケーションのヘッダー (myProject.h)


#define MAX_LOADSTRING 100

// グローバル変数:
HINSTANCE hInst;                        // 現在のインターフェイス
TCHAR szTitle[ MAX_LOADSTRING ];        // タイトルバーのテキスト
TCHAR szWindowClass[ MAX_LOADSTRING ];  // メインウィンドウのクラス名


// このコードモジュールに含まれる関数の宣言を転送する
ATOM                MyRegisterClass( HINSTANCE hInstance );
BOOL                InitInstance( HINSTANCE, int );
LRESULT CALLBACK    WndProc( HWND, UINT, WPARAM, LPARAM );
INT_PTR CALLBACK    About( HWND, UINT, WPARAM, LPARAM );

アプリケーションのエントリポイント

// アプリケーションのエントリポイント
int APIENTRY _tWinMain(
    HINSTANCE hInstance,
    HINSTANCE hPrevInstance,
    LPTSTR    lpCmdLine,
    int       nCmdShow
    )
{
    UNREFERENCED_PARAMETER( lpCmdLine );

    MSG msg;
    HACCEL hAccelTable;

    // グローバル文字列を初期化する
    LoadString( hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING );
    LoadString( hInstance, IDC_MYPROJECT, szWindowClass, MAX_LOADSTRING );

    // ウィンドウクラスを登録する (MyRegisterClass)
    MyRegisterClass( hInstance );

    // インスタンスハンドルを保存して、メインウィンドウを作成する (InitInstance)
    if( !InitInstance( hInstance, nCmdShow ) )
    {
        return FALSE;
    }

    hAccelTable = LoadAccelerators( hInstance, MAKEINTRESOURCE( IDC_MYPROJECT ) );


    // メッセージループ
    while( GetMessage( &msg, NULL, 0, 0 ) )
    {
        if( !TranslateAccelerator( msg.hwnd, hAccelTable, &msg ) )
        {
            // 仮想キーメッセージを文字メッセージに変換する
            TranslateMessage( &msg );

            // ウィンドウプロシージャへメッセージをディスパッチ (送出) する
            DispatchMessage( &msg );
        }
    }

    return ( int )msg.wParam;
}

ウィンドウクラスの登録

// ウィンドウクラスを登録する
ATOM MyRegisterClass( HINSTANCE hInstance )
{
    WNDCLASSEX wcex;

    wcex.cbSize = sizeof( WNDCLASSEX );

    wcex.style          = CS_HREDRAW | CS_VREDRAW;  // ウィンドウクラスのスタイル
    wcex.lpfnWndProc    = WndProc;                  // ウィンドウプロシジャのアドレス (WndProc)
    wcex.cbClsExtra     = 0;                        // ウィンドウクラスの追加データのサイズ
    wcex.cbWndExtra     = 0;                        // ウィンドウの追加データのサイズ
    wcex.hInstance      = hInstance;                // ウィンドウプロシジャを持つプログラムのインスタンス ハンドル
    wcex.hIcon          = LoadIcon( hInstance, MAKEINTRESOURCE( IDI_MYPROJECT ) );  // アプリケーション アイコン
    wcex.hCursor        = LoadCursor( NULL, IDC_ARROW );        // マウスポインタ
    wcex.hbrBackground  = ( HBRUSH )( COLOR_WINDOW+1 );         // ウィンドウの背景色
    wcex.lpszMenuName   = MAKEINTRESOURCE( IDC_MYPROJECT );     // メニューリソースの名前
    wcex.lpszClassName  = szWindowClass;                        // このウィンドウクラスの登録名
    wcex.hIconSm        = LoadIcon( wcex.hInstance, MAKEINTRESOURCE( IDI_SMALL ) );

    return RegisterClassEx( &wcex );
}

インスタンスハンドルを保存して、メインウィンドウを作成

// インスタンスハンドルを保存して、メインウィンドウを作成する
BOOL InitInstance( HINSTANCE hInstance, int nCmdShow )
{
    HWND hWnd;

    // グローバル変数にインスタンス処理を格納する
    hInst = hInstance;

    // ウィンドウを作成する
    hWnd = CreateWindow(
        szWindowClass,       // ウィンドウクラス名
        szTitle,             // ウィンドウの名前
        WS_OVERLAPPEDWINDOW, // ウィンドウ固有のスタイル
        CW_USEDEFAULT,       // 表示位置 x座標
        0,                   // 表示位置 y座標
        CW_USEDEFAULT,       // 表示サイズ 幅
        0,                   // 表示サイズ 高さ
        NULL,                // 親ウィンドウのハンドル
        NULL,                // メニューのハンドル
        hInstance,           // ウィンドウを作成するプログラムのインスタンスハンドル
        NULL                 // WM_CREATEメッセージに渡すパラメータ
        );

    if( !hWnd )
    {
        return FALSE;
    }

    // ウィンドウの初期表示状態を指定する
    ShowWindow( hWnd, nCmdShow );
    UpdateWindow( hWnd );

    return TRUE;
}

メインウィンドウのメッセージを処理

// メインウィンドウのメッセージを処理する
LRESULT CALLBACK WndProc( HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam )
{
    int wmId, wmEvent;
    PAINTSTRUCT ps;
    HDC hdc;

    switch( message )
    {
        // アプリケーション メニューの処理
        case WM_COMMAND:
            wmId    = LOWORD( wParam );
            wmEvent = HIWORD( wParam );

            // 選択されたメニューの解析:
            switch( wmId )
            {
                // バージョン情報
                case IDM_ABOUT:
                    DialogBox(
                        hInst,
                        MAKEINTRESOURCE( IDD_ABOUTBOX ),
                        hWnd,
                        About  // (About)
                        );
                    break;

                // アプリケーションの終了
                case IDM_EXIT:
                    DestroyWindow( hWnd );
                    break;

                default:
                    return DefWindowProc( hWnd, message, wParam, lParam );
            }
            break;

        // メインウィンドウの描画
        case WM_PAINT:
            hdc = BeginPaint( hWnd, &ps );

            // TODO: 描画コードをここに追加する

            EndPaint( hWnd, &ps );
            break;

        // 中止メッセージを表示して戻る
        case WM_DESTROY:
            PostQuitMessage( 0 );
            break;

        default:

            // メッセージマップでは処理されないメッセージを処理する
            return DefWindowProc( hWnd, message, wParam, lParam );
    }

    return 0;
}

バージョン情報ボックスのメッセージ ハンドラ

// バージョン情報ボックスのメッセージ ハンドラ
INT_PTR CALLBACK About( HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam )
{
    UNREFERENCED_PARAMETER( lParam );

    switch( message )
    {
        case WM_INITDIALOG:
            return( INT_PTR )TRUE;

        case WM_COMMAND:
            if( LOWORD( wParam ) == IDOK
             || LOWORD( wParam ) == IDCANCEL )
            {
                EndDialog( hDlg, LOWORD( wParam ) );

                return( INT_PTR )TRUE;
            }
            break;
    }

    return( INT_PTR )FALSE;
}
Microsoft Learnから検索