今回も、ダイアログボックスにラジオボタンとグループボックスを付けます。
ラジオボタン、グループボックス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
上記の太線で示している箇所のみ追加です。