ダイアログボックスにラジオボタン、グループボックスを付ける2<ResEdit未対応>

ラジオボタン、グループボックス1

今回も、ダイアログボックスにラジオボタンとグループボックスを付けます。

ラジオボタン、グループボックス1 - インコのWindowsSDK とは、別の方法で作成します。

リソースを手入力する場合・・・今回紹介する方法のほうが楽です。
ResEditを使用する場合・・・・この方法ではできません。

ラジオボタン、グループボックス1 - インコのWindowsSDK で作成したソースを修正します。

流れ

WM_COMMAND

1.ラジオボタンが押されたら、BM_SETCHECKメッセージで、ラジオボタンにチェックを入れて、 押されていないほうの、ラジオボタンのチェックを外す処理を削除。

リソースファイル

1.ダイアログボックスに、コントロール[CONTROL] を使って、ラジオボタンを追加[BS_AUTORADIOBUTTON]

CONTROL          "text", id, "button", style, x0, y0, width, height

text表示するテキスト
idコントロールID
style スタイル
BS_AUTORADIOBUTTON : ラジオボタン
WS_GROUP : グループの始まり
WS_TABSTOP : タブによる移動対応
x0ラジオボタン左上のx座標
y0ラジオボタン左上のy座標
widthラジオボタンの幅
heightラジオボタンの高さ

ラジオボタンのグループの始まりに、WS_GROUPをつける必要があります。
グループ最後のラジオボタンの、次のコントロールにWS_GROUPをつける必要があります。

ソースコードの入力

ソースコードは下記のように入れてください。

test.cpp
#include <windows.h>
#include "resource.h"

// グローバル変数:
LPCTSTR szBuf_edit1;

// このコード モジュールに含まれる関数の宣言を転送します:
BOOL CALLBACK DialogProc(HWND, UINT, WPARAM, LPARAM);

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
          PSTR lpCmdLine, int nCmdShow )
{
    DialogBox(hInstance, TEXT("DIALOG_BOX"), NULL, DialogProc);
    return 0;
}

BOOL CALLBACK DialogProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
    UINT wmId;
    BOOL check1;
    BOOL check2;
    switch (msg)
    {
        case WM_INITDIALOG:
            // チェック2にチェックを入れる
            SendMessage(GetDlgItem(hWnd, IDC_RADIO2) , BM_SETCHECK , BST_CHECKED , 0);
            break;
        case WM_CLOSE:
            EndDialog(hWnd, IDOK);
            break;
        case WM_COMMAND:
            wmId = LOWORD(wParam);
            switch (wmId)
            {
                // この間の処理を削除
                case IDC_BUTTON1: // ボタンが押されたとき
                    // チェックが入っているか確認
                    check1 = SendMessage( GetDlgItem(hWnd, IDC_RADIO1), BM_GETCHECK, 0, 0 );
                    check2 = SendMessage( GetDlgItem(hWnd, IDC_RADIO2), BM_GETCHECK, 0, 0 );
                    if(check1 == 1)
                    {
                        szBuf_edit1 = TEXT("チェック1だけにチェックが入っています。");
                    }
                    else
                    {
                        szBuf_edit1 = TEXT("チェック2だけにチェックが入っています。");
                    }
                    // テキストの表示
                    SetDlgItemText(hWnd, IDC_STATIC1, szBuf_edit1); 
                    break;
            }
            break;
        return TRUE;
    }
    return FALSE;
}

上記の太線で示している箇所のみ追加です。

resource.h
#define IDC_BUTTON1 1002
#define IDC_STATIC1 1003
#define IDC_RADIO1 1011
#define IDC_RADIO2 1012
#ifndef IDC_STATIC
#define IDC_STATIC -1
#endif

変更ありません。

test.rc
#include <windows.h>
#include "resource.h"

/////////////////////////////////////////////////////////////////////////////
//
// ダイアログ
//

DIALOG_BOX DIALOG 0, 0, 170, 62
FONT 9, "MS UI Gothic"
CAPTION "ダイアログ"
BEGIN
    GROUPBOX        "グループ", IDC_STATIC, 5, 5, 159, 25
        CONTROL "ラジオボタン1", IDC_RADIO1, "button",
        BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 19, 16, 51, 10
        CONTROL "ラジオボタン2", IDC_RADIO2, "button",
        BS_AUTORADIOBUTTON| WS_TABSTOP, 87, 16, 51, 10
    PUSHBUTTON      "表示", IDC_BUTTON1, 113, 33, 36, 12
    LTEXT           "", IDC_STATIC1, 15, 49, 152, 14
END

上記の太線で示している箇所のみ追加です。