今回は、ダイアログボックスにラジオボタンとグループボックスを付けます。
ボタンを押せば、現在のラジオボタンの状態が、表示されるようにします。
ラジオボタンは、2つ用意し、アプリケーション起動に、1つのラジオボタンのチェックが、入った状態にします。
1つのラジオボタンに、チェックを入れた場合、もうひとつのラジオボタンのチェックを外します。
グループボックスは、ただの飾りです。
テキストの表示 - インコのWindowsSDK で作成したソースを修正します。
ここでは、Reseditで作成する方法も説明します。
Reseditを使用しない場合は、 12.ラジオボタン、グループボックス2<ResEdit未対応> - インコのWindowsSDK で紹介する方法の方が、楽にできます。
流れ
WM_INITDIALOG
リストボックス - インコのWindowsSDK でも説明しましたが、WM_INITDIALOGは、ダイアログが作成されたときに一度だけ実行されます。
1.BM_SETCHECKメッセージで、ラジオボタンにチェックを入れる。
lResult = SendMessage( (HWND) hWndControl, // ラジオボタンのハンドル (UINT) BM_SETCHECK, (WPARAM) BST_CHECKED, 0 // 0固定 );
WM_COMMAND
1.BM_SETCHECKメッセージで、ラジオボタンが押されたら、チェックを入れる。
押されていないほうの、ラジオボタンのチェックを外す。
lResult = SendMessage( (HWND) hWndControl, // ラジオボタンのハンドル (UINT) BM_SETCHECK, (WPARAM) BST_UNCHECKED, 0 // 0固定 );
2.SetDlgItemText()で取得したデータを表示
BOOL SetDlgItemText( HWND hDlg, // ダイアログボックスのハンドル int nIDDlgItem, // コントロールID LPCTSTR lpString // 表示するテキスト );
リソースファイル
1.ダイアログボックスにグループボックス[GROUPBOX]を追加
GROUPBOX "text", id, x0, y0, width, height, style
text | 表示するテキスト |
id | コントロールID |
x0 | グループボックス左上のx座標 |
y0 | グループボックス左上のy座標 |
width | グループボックスの幅 |
height | グループボックスの高さ |
style |
スタイル ウインドウスタイルと、ボタンのスタイルが指定可能 |
2.ダイアログボックスに、ラジオボタン[AUTORADIOBUTTON]を追加
AUTORADIOBUTTON "text", id, x0, y0, width, height, style
text | 表示するテキスト |
id | コントロールID |
x0 | ラジオボタン左上のx座標 |
y0 | ラジオボタン左上のy座標 |
width | ラジオボタンの幅 |
height | ラジオボタンの高さ |
style | スタイル |
ソースコードの入力
ソースコードは下記のように入れてください。
#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_RADIO1: // ラジオボタン1が押されたとき SendMessage(GetDlgItem(hWnd, IDC_RADIO1) , BM_SETCHECK , BST_CHECKED , // チェックをつける 0); SendMessage(GetDlgItem(hWnd, IDC_RADIO2) , BM_SETCHECK , BST_UNCHECKED , // チェックをはずす 0); break; case IDC_RADIO2: // ラジオボタン2が押されたとき SendMessage(GetDlgItem(hWnd, IDC_RADIO1) , BM_SETCHECK , BST_UNCHECKED , // チェックをはずす 0); SendMessage(GetDlgItem(hWnd, IDC_RADIO2) , BM_SETCHECK , BST_CHECKED , // チェックをつける 0); break; 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; }
#define IDC_BUTTON1 1002
#define IDC_STATIC1 1003
#define IDC_RADIO1 1011
#define IDC_RADIO2 1012
#ifndef IDC_STATIC
#define IDC_STATIC -1
#endif
Reseditで作成した場合は、これとは異なるソースコードになります。
上記の太線で示している箇所のみ追加です。
#include "resource.h" ///////////////////////////////////////////////////////////////////////////// // // ダイアログ // DIALOG_BOX DIALOG 0, 0, 170, 62 FONT 9, "MS UI Gothic" CAPTION "ダイアログ" BEGIN GROUPBOX "グループ", IDC_STATIC, 5, 5, 159, 25 RADIOBUTTON "ラジオボタン1", IDC_RADIO1, 19, 16, 51, 10 RADIOBUTTON "ラジオボタン2", IDC_RADIO2, 87, 16, 51, 10 PUSHBUTTON "表示", IDC_BUTTON1, 113, 33, 36, 12 LTEXT "", IDC_STATIC1, 15, 49, 152, 14 END
Reseditで作成した場合は、これとは異なるソースコードになります。
上記の太線で示している箇所のみ追加です。