戻る 第14章 コントロールの使用
(チェックボックス)
次へ

ソース 実行ファイル
sdk14.cpp sdk14.exe

今回はチェックボックスです。
クリックするとチェックがつくあれです。

大活躍なボタンクラスです。
チェックボックス・ラジオボタンも
ボタンコントロールスタイルで作成します。
メッセージ 効果
BM_GETCHECK
wParam = 0;/* 使われません。0でなければなりません*/
lParam = 0;/* 使われません。0でなければなりません*/
オプションボタンやチェックボックスの
チェック (選択) の状態を取得
BM_SETCHECK
wParam = (WPARAM) fCheck;/* チェック状態*/
lParam = 0;/* 使われません。0でなければなりません*/
0=チェックON
1=チェックOFF
2=使用不可状態にする
#include <windows.h> #define ID_BTN1 1000 #define ID_BTN2 2000 #define ID_BTN3 3000 HWND check[3];//チェックボックス用 HWND btn[3];//状態取得用のボタン //チェックボックスのスタイルを指定 int style[3]={ BS_AUTOCHECKBOX, BS_AUTORADIOBUTTON|WS_GROUP,//ラジオボタンは先頭にグループ指定をする BS_AUTORADIOBUTTON }; int menu[3]={ID_BTN1,ID_BTN2,ID_BTN3}; char *caption[]={"チェックボタン","ラジオボタン1","ラジオボタン2"}; LRESULT CALLBACK WinProc(HWND hwnd, UINT msg,WPARAM wP, LPARAM lP) { char str[40]; int cnt; HDC hdc; switch(msg){ case WM_CREATE: for(cnt=0;cnt<3;cnt ++){ check[cnt]=CreateWindowEx(0, "BUTTON",//ボタンコントロールクラスを指定 caption[cnt], WS_CHILD|style[cnt],//ラジオボタンは先頭にグループ指定をする 16, 8+cnt*32,128, 24, hwnd, NULL, (HINSTANCE)GetWindowLong(hwnd, GWL_HINSTANCE), NULL); ShowWindow(check[cnt],SW_SHOW); btn[cnt]=CreateWindowEx(0,"BUTTON","状態",WS_CHILD, 152,8+cnt*32,64, 24,hwnd,(HMENU)menu[cnt], (HINSTANCE)GetWindowLong(hwnd, GWL_HINSTANCE),NULL); ShowWindow(btn[cnt],SW_SHOW); } SendMessage(check[1],BM_SETCHECK,BST_CHECKED,0); break; case WM_COMMAND: hdc=GetDC(hwnd); switch ( LOWORD ( wP ) ) { case ID_BTN1://各ボタンのチェック状態を取得 if(SendMessage(check[0], BM_GETCHECK, 0L, 0L)==1){ wsprintf(str,"チェックしています "); } else{ wsprintf(str,"チェックしていません"); } TextOut(hdc,8,96,str,strlen(str)); break; case ID_BTN2: if(SendMessage(check[1], BM_GETCHECK, 0L, 0L)==1){ wsprintf(str,"チェックしています "); } else{ wsprintf(str,"チェックしていません"); } TextOut(hdc,8,96,str,strlen(str)); break; case ID_BTN3: if(SendMessage(check[2], BM_GETCHECK, 0L, 0L)==1){ wsprintf(str,"チェックしています "); } else{ wsprintf(str,"チェックしていません"); } TextOut(hdc,8,96,str,strlen(str)); break; } ReleaseDC(hwnd,hdc); break; case WM_DESTROY: PostQuitMessage(0); break; default: return DefWindowProc(hwnd, msg, wP, lP); } return 0; } これを使うことで色々な設定などの項目を付けることが容易になりそうですね。 使用不可にする設定もありますのでやってみてください。