Dialog Box のプログラム

VC++ で WinMain() から DialogBox() を表示する最も基本的なプログラムです。
Dialog Box は手軽に表示できるウインドウの一種で、通常の Windows Program に比べて非常に簡単です。

前田稔(Maeda Minoru)の超初心者のプログラム入門

プロジェクトの設定

  1. [スタート][プログラム] から VC++ を起動して下さい。
    VC++ のアイコンをダブルクリックして起動することもできます。
  2. 新規プロジェクトで[空のプロジェクト](Dialog)を作成します。
    1. [ファイル][新規作成][プロジェクト]を選択すると新しいプロジェクトのウインドウが表示されます。
    2. [プロジェクトの種類]から[Visual C++ プロジェクト]を、[テンプレート]から[Win32 プロジェクト]を選択します。
    3. [プロジェクト名]に[Dialog]とタイプします。
  3. [OK]をクリックしてアプリケーションウイザードを表示して下さい。
    [Windows アプリケーション]を確認して[空のプロジェクト]にチェックを入れ[完了]をクリックします。
    [Dialog]のフォルダーと空のプロジェクトが作成されます。

  4. [プロジェクト] [リソースの追加] [Dialog] [新規作成] で DialogBoxを作成します。
    今回は規定値として定義された DialogBox を作成するだけなので、編集操作は行いません。
    DialogBox 作成の画像
  5. 今回は使いませんが、ツールボックスが表示されていないときは画面右上のツールバーを操作して表示して下さい。

  6. プログラムファイル(Dialog.cpp)をテキストエディタなどで作成して、プロジェクトのフォルダーに格納し [プロジェクト] [既存項目の追加] からプロジェクトに追加します。
    [デバッグ] を選択してビルドに続いて実行を行います。
  7. プログラムファイル(Dialog.cpp)のソースコードです。
    /*****************************************/
    /*★ Dialog Box の Template    前田 稔 ★*/
    /*****************************************/
    #include    <windows.h>
    #include    "resource.h"
    
    // Function Prototype
    LRESULT CALLBACK DialogProc( HWND, UINT, WPARAM, LPARAM );
    
    //★ Windows MAIN 関数
    int APIENTRY WinMain( HINSTANCE hInst, HINSTANCE, LPSTR, int)
    {
        DialogBox(hInst,MAKEINTRESOURCE(IDD_DIALOG1),NULL,(DLGPROC)DialogProc);
        return TRUE;
    }
    
    //★ DialogBox CALLBACK 関数
    LRESULT CALLBACK DialogProc(HWND hDlg,UINT msg,WPARAM wParam,LPARAM lParam)
    {
        switch(msg)
        {   case WM_INITDIALOG:
                SetWindowText(hDlg,"Dialog Box Template");
                break;
            case WM_COMMAND:
                switch(LOWORD(wParam))
                {   case IDOK:
                        PostMessage(hDlg,WM_CLOSE,0,0);
                        return TRUE;
                    case IDCANCEL:
                        break;
                }
                break;
            case WM_CLOSE:
                EndDialog(hDlg,TRUE);
                return TRUE;
        }
        return FALSE;
    }
    
  8. プログラムの説明です。
    windows.h と resource.h を取り込みます。
    DialogProc() のプロトタイプ宣言をします。
    #include    <windows.h>
    #include    "resource.h"
    
    // 関数のプロトタイプ宣言
    LRESULT CALLBACK DialogProc( HWND, UINT, WPARAM, LPARAM );
    
  9. WinMain() では DialogBox() で Dialog Box を表示するだけです。
    int APIENTRY WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
    {
        DialogBox(hInstance,MAKEINTRESOURCE(IDD_DIALOG1),NULL,(DLGPROC)DialogProc);
        return TRUE;
    }
    
  10. DialogProc() は DialogBox のコールバック関数です。
    LRESULT CALLBACK DialogProc(HWND hDlg,UINT msg,WPARAM wParam,LPARAM lParam)
    {
    
  11. OK ボタンがクリックされたときの処理です。
    IDOK はOKボタンがクリックされたときの規定のIDです。
    PostMessage() で WM_CLOSE をポストして DialogBox を終了します。
    PostQuitMessage(0) をポストしてプログラムを強制終了することも出来ます。
            {   case IDOK:
                    PostMessage(hDlg,WM_CLOSE,0,0);
                    //PostQuitMessage(0);
                    //EndDialog(hDlg,TRUE); 
                    return TRUE;
    
  12. WM_CLOSE: にはウインドウが閉じられる時に制御が渡されます。
    EndDialog() を実行して DialogBox を終了します。
    自分で処理したときは return TRUE; で終了します。
    終了処理をシステムに任せるときは FALSE で終了します。
            case WM_CLOSE:
                EndDialog(hDlg,TRUE);
                return TRUE;
    

VC 6.0 プロジェクトの設定

  1. [スタート][プログラム] から VC++ を起動して下さい。
    VC++ のアイコンをダブルクリックして起動することもできます。
  2. [ファイル][新規作成][Win32 Application] で、新しいプロジェクトを作成します。
    プロジェクト名は dialog にして下さい。
    アプリケーションの種類は「空のプロジェクト」を選んで下さい。
    次の3個のファイルが作成されます。
    dialog.dsp
    dialog.dsw
    dialog.ncb
  3. [挿入][リソース][Dialog][新規作成]を実行します。
  4. 作成される DialogBox です。
  5. 右上の[×]をクリックしてウインドウを閉じると、保存確認のメッセージが表示されます。
    VC 6.0 ではリソースボックス(Script1)を閉じると保存確認の問い合わせがあるので *.rc の名前で保存して下さい。
  6. 現在作業中のフォルダーを確認して dialog.rc の名前で保存します。
    このとき現在作業中のフォルダーが選択されていることを確認して下さい。
    確認を怠ると、前回作業していたフォルダーに格納される場合があります。
  7. リソースファイルとリソースのヘッダファイルが作成されます。
    [プロジェクト][プロジェクトへ追加][ファイル] から *.rc と resource.h をプロジェクトに追加して下さい。
    dialog.rc
    resource.h
  8. [プロジェクト][プロジェクトへ追加][ファイル]で次のファイルを選択してプロジェクトに追加します。
  9. ワークスペース(左側のウインドウ)にリソースタブが追加されます。
    ワークスペースのウインドウが表示されていないときは[表示][ワークスペース]で表示されます。
  10. 今回は使いませんが、ツールボックスが表示されていないときは[ツール][カスタマイズ][ツールバー]から [コントロール]にチェックを入れます。
    または DialogBox が表示されている外側で「右クリック」して[コントロール]をチェックして下さい。
  11. Dialog.cpp をフォルダーに格納して[プロジェクト][プロジェクトへ追加][ファイル]からプロジェクトに追加します。
  12. [デバッグ]を選択してビルドに続いて実行を行います。
    一般の Windows Program に比べてずいぶん簡単でしょう。 <(`^´)>

モーダルダイアログは DialogBox() で生成して、ダイアログボックスを閉じるまで、他の操作が出来ません。
それに対して、モードレスダイアログは CreateDialog() で生成して、表示中でも親 Window を操作することができます。
モードレスダイアログの例は 処理の中断 を参照して下さい。

超初心者のプログラム入門(Win32API C++)