今回は、ダイアログボックスにチェックボックスを付けます。
ボタンを押せば、現在のチェックボックスの状態が、表示されるようにします。
チェックボックスは、2つ用意し、アプリケーション起動に、1つのチェックボックスのチェックが、入った状態にします。
テキストの表示 - インコのWindowsSDK で作成したソースを修正します。
ここでは、Reseditで作成する方法も説明します。
流れ
WM_INITDIALOG
リストボックス - インコのWindowsSDK でも説明しましたが、WM_INITDIALOGは、ダイアログが作成されたときに一度だけ実行されます。
1.BM_SETCHECKメッセージで、チェックボックスにチェックを入れる。
lResult = SendMessage( (HWND) hWndControl, // チェックボックスのハンドル (UINT) BM_SETCHECK, (WPARAM) BST_CHECKED, 0 // 0固定 );
WM_COMMAND
1.BM_GETCHECKメッセージで、チェックボックスに、チェックが入っているか確認する。
lResult = SendMessage( (HWND) hWndControl, // チェックボックスのハンドル (UINT) BM_GETCHECK, 0, // 0固定 0 // 0固定 );
2.SetDlgItemText()で取得したデータを表示
BOOL SetDlgItemText( HWND hDlg, // ダイアログボックスのハンドル int nIDDlgItem, // コントロールID LPCTSTR lpString // 表示するテキスト );
リソースファイル
1.ダイアログボックスにチェックボックス[AUTOCHECKBOX]を追加
AUTOCHECKBOX "text", id, x0, y0, width, height, style
text | 表示するテキスト |
id | コントロールID |
x0 | チェックボックス左上のx座標 |
y0 | チェックボックス左上のy座標 |
width | チェックボックスの幅 |
height | チェックボックスの高さ |
style |
スタイル ウインドウスタイルと、ボタンのスタイルが指定可能 |
2.ダイアログボックスにボタン[PUSHBUTTON]を追加
PUSHBUTTONについては、
エディット - インコのWindowsSDK
を参照
ソースコードの入力
ソースコードは下記のように入れてください。
#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_CHECKBOX2) , 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_CHECKBOX1), BM_GETCHECK, 0, 0 ); check2 = SendMessage( GetDlgItem(hWnd, IDC_CHECKBOX2), BM_GETCHECK, 0, 0 ); if((check1 == 1) && (check2 == 1)) { szBuf_edit1 = TEXT("両方にチェックが入っています。"); } else if(check1 == 1) { szBuf_edit1 = TEXT("チェック1だけにチェックが入っています。"); } else if(check2 == 1) { szBuf_edit1 = TEXT("チェック2だけにチェックが入っています。"); } else { szBuf_edit1 = TEXT("両方ともチェックが入っていません。"); } // テキストの表示 SetDlgItemText(hWnd, IDC_STATIC1, szBuf_edit1); break; } break; return TRUE; } return FALSE; }
#define IDC_BUTTON1 1002
#define IDC_STATIC1 1003
#define IDC_CHECKBOX1 1011
#define IDC_CHECKBOX2 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 AUTOCHECKBOX "チェック1", IDC_CHECKBOX1, 19, 5, 48, 18 AUTOCHECKBOX "チェック2", IDC_CHECKBOX2, 103, 5, 48, 18 LTEXT "", IDC_STATIC1, 15, 49, 152, 14 PUSHBUTTON "表示", IDC_BUTTON1, 103, 28, 36, 12 END
Reseditで作成した場合は、これとは異なるソースコードになります。
上記の太線で示している箇所のみ追加です。