お遍路さんのプログラム言語備忘録

C++のフォーム

確認環境 Microsoft Visual Studio Community 2019 Version 16.4.3 .NET Core 3.1
#include    <windows.h>
 
// プロトタイプ宣言
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int);
 
// Windws イベント用関数(ウインドウプロシージャ(コールバック関数))
// WndProcがこのコールバック関数の名前.
// WNDCLASS(EX).lpfnWndProc にその名前(WndProc)を代入するとそのウインドウで発生した イベントをキャッチする.
// 普通のウインドウではだいたい,自分でメッセージを処理した時は0
// システムに処理を任せるときは DefWindowProc( hWnd, msg, wParam, lParam ) を返す.
LRESULT  CALLBACK  WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
    
    // 渡された message から、イベントの種類を解析する
    switch(msg)
    {
        //----ウインドウ作成時----
        case WM_CREATE:
            return 0L;
        //----終了処理----
        case WM_DESTROY:
            exit(0);
    }
    
    //----デフォルトの処理----
    return DefWindowProc(hWnd, msg, wParam, lParam);
}
 
// Windows Main 関数
int  WINAPI  WinMain(
                     HINSTANCE hInstance,               // インスタンスハンドル
                     HINSTANCE hPrevInstance,           // Win16:自分自身の別インスタンス,Win32:NULL
                     LPSTR lpCmdLine,                   // コマンドライン引数
                     int nCmdShow )                     // アプリケーションの初期表示方法
{
    TCHAR CLASSNAME[] = TEXT("clsWindowSet");
    TCHAR FORMNAME[] = TEXT("WindowSet");
    HWND   hWnd;
    MSG    msg;
    
    // ウィンドウクラスの属性を設定
    WNDCLASS wc;
    wc.style         = CS_HREDRAW | CS_VREDRAW;             // クラススタイル
    wc.lpfnWndProc   = WndProc;                             // ウインドウプロシージャアドレス:コールバック関数
    wc.cbClsExtra    = 0;                                   // ウインドウクラス構造体の後ろに割り当てるバイト数
    wc.cbWndExtra    = 0;                                   // ウインドウインスタンスの後ろに割り当てるバイト数
    wc.hInstance     = hInstance;                           // WinMainの第1引数
    wc.hIcon         = LoadIcon(NULL, IDI_APPLICATION);     // タイトルバーの左横隅に配置されているアイコン
    wc.hCursor       = LoadCursor(NULL, IDC_ARROW);         // ウインドウ内でのマウスカーソルの形状
    wc.hbrBackground = (HBRUSH) (COLOR_APPWORKSPACE + 1);   // ウインドウの背景色(背景描画用ブラシ)
    wc.lpszMenuName  = NULL;                                // メニューリソースを識別する文字列
    wc.lpszClassName = CLASSNAME;                           // デフォルトメニュー名
    
    // ウィンドウクラス登録
    if( RegisterClass( &wc ) == 0 ) return FALSE;
    
    // ウインドウ生成
    hWnd = CreateWindow( CLASSNAME,             // ウィンドウクラス名
                         FORMNAME,              // タイトルバーテキスト
                         WS_OVERLAPPEDWINDOW,   // ウインドウスタイル
                         CW_USEDEFAULT,         // ウインドウ左上x座標
                         CW_USEDEFAULT,         // ウインドウ左上y座標
                         CW_USEDEFAULT,         // ウインドウ幅
                         CW_USEDEFAULT,         // ウインドウ高さ
                         NULL,                  // 親ウインドウのハンドル
                         NULL,                  // メニューハンドル
                         hInstance,             // インスタンスハンドル
                         NULL );                // ウィンドウ作成データ
    
    if( !hWnd ) return FALSE;
    
    // ウィンドウを表示
    ShowWindow( hWnd,                 // ウィンドウハンドル
               nCmdShow );            // 表示状態
    
    // ウィンドウを再描画
    UpdateWindow( hWnd );             // ウィンドウハンドル
    //フォーカスを設定
    SetFocus( hWnd );                 // ウィンドウハンドル
    
    while( GetMessage( &msg, NULL, 0, 0 ) ){
        TranslateMessage( &msg );
        DispatchMessage( &msg );
    }
    return msg.wParam;
}
コンパイルコマンド cl /c WindowSet.cpp
リンカーコマンド link gdi32.lib User32.lib WindowSet.obj
 
page top