Advertisement
Guest User

Untitled

a guest
Aug 30th, 2015
65
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 21.41 KB | None | 0 0
  1. // ヘッダファイルのインクルード
  2. // 既定のヘッダファイル
  3. #include <windows.h> // 標準WindowsAPI
  4. #include <tchar.h> // TCHAR型
  5. #include <commctrl.h> // コモンコントロール
  6.  
  7. // 独自のヘッダファイル
  8. #include "resource.h" // リソースID
  9.  
  10. // 関数のプロトタイプ宣言
  11. LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam); // ウィンドウメッセージに対して独自の処理をするように定義したコールバック関数WindowProc.
  12. INT_PTR CALLBACK DialogProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam); // ダイアログの処理をするコールバック関数DialogProc.
  13.  
  14. // _tWinMain関数の定義
  15. int WINAPI _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nShowCmd){
  16.  
  17. // 変数・配列の宣言・初期化
  18. HWND hWnd; // CreateWindowで作成したウィンドウのウィンドウハンドルを格納するHWND型変数hWnd.
  19. MSG msg; // ウィンドウメッセージ情報を格納するMSG構造体型変数msg.
  20. WNDCLASS wc; // ウィンドウクラス情報をもつWNDCLASS構造体型変数wc.
  21. TCHAR tszWindowName[256]; // ウィンドウ名を格納するTCHAR型配列tszWindowName.(長さ256)
  22. HDC hDC = NULL; // このウィンドウのデバイスコンテキストハンドルhDCをNULLに初期化.
  23. HACCEL hAccel = NULL; // アクセラレータテーブルのハンドルを格納するHAACEL型変数hAccelをNULLに初期化.
  24.  
  25. // ウィンドウクラスの設定
  26. wc.lpszClassName = _T("BS_GROUPBOX"); // ウィンドウクラス名は"BS_GROUPBOX".
  27. wc.style = CS_HREDRAW | CS_VREDRAW; // スタイルはCS_HREDRAW | CS_VREDRAW.
  28. wc.lpfnWndProc = WindowProc; // ウィンドウプロシージャは独自の処理を定義したWindowProc.
  29. wc.hInstance = hInstance; // インスタンスハンドルは_tWinMainの引数.
  30. wc.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_ICON1)); // アイコンには作成したアイコン"icon1.ico"(MAKEINTRESOURCE(IDI_ICON1))をLoadIconでロードして使う.
  31. wc.hCursor = LoadCursor(NULL, IDC_ARROW); // カーソルは矢印.
  32. wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); // 背景は白ブラシ.
  33. wc.lpszMenuName = MAKEINTRESOURCE(IDR_MAINMENU); // メニューにはIDR_MAINMENUをMAKEINTRESOURCEマクロで指定.
  34. wc.cbClsExtra = 0; // 0でいい.
  35. wc.cbWndExtra = 0; // 0でいい.
  36.  
  37. // ウィンドウクラスの登録
  38. if (!RegisterClass(&wc)){ // RegisterClassでウィンドウクラスを登録し, 0が返ったらエラー.
  39.  
  40. // エラー処理
  41. MessageBox(NULL, _T("RegisterClass failed!"), _T("BS_GROUPBOX"), MB_OK | MB_ICONHAND); // MessageBoxで"RegisterClass failed!"とエラーメッセージを表示.
  42. return -1; // 異常終了(1)
  43.  
  44. }
  45.  
  46. // 文字列リソースのロード
  47. LoadString(hInstance, IDS_WINDOW_NAME, tszWindowName, 256); // LoadStringでSTRINGTABLEからIDS_WINDOW_NAMEにあたる文字列をロードし, tszWindowNameに格納.
  48.  
  49. // ウィンドウの作成
  50. hWnd = CreateWindow(_T("BS_GROUPBOX"), tszWindowName, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL); // CreateWindowで, 上で登録した"BS_GROUPBOX"ウィンドウクラスのウィンドウを作成.
  51. if (hWnd == NULL){ // ウィンドウの作成に失敗したとき.
  52.  
  53. // エラー処理
  54. MessageBox(NULL, _T("CreateWindow failed!"), _T("BS_GROUPBOX"), MB_OK | MB_ICONHAND); // MessageBoxで"CreateWindow failed!"とエラーメッセージを表示.
  55. return -2; // 異常終了(2)
  56.  
  57. }
  58.  
  59. // アクセラレータテーブルのロード
  60. hAccel = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDR_MAINMENU)); // LoadAcceleratorsでアクセラレータテーブルをロード.(アクセラレータテーブルのリソースIDはメニューと同じIDR_MAINMENU.)
  61.  
  62. // ウィンドウの表示
  63. ShowWindow(hWnd, SW_SHOW); // ShowWindowでSW_SHOWを指定してウィンドウの表示.
  64.  
  65. // デバイスコンテキストの取得.
  66. hDC = GetDC(hWnd); // GetDCでデバイスコンテキストハンドルhDCを取得.
  67.  
  68. // PeekMessageによるメインループ.
  69. while (TRUE){ // 常に真(TRUE)なので無限ループ.
  70.  
  71. // ウィンドウメッセージが来ているかを確認する.
  72. if (PeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE)){ // PeekMessageでウィンドウメッセージが来ているかを確認し, 真なら来ている.(PM_NOREMOVEなのでメッセージキューからこのメッセージを削除しない.次のGetMessageがそのメッセージを処理する.)
  73.  
  74. // 来ていたらそのメッセージを取得.
  75. if (GetMessage(&msg, NULL, 0, 0) > 0){ // GetMessageでPeekMessageで確認したメッセージを取得.
  76.  
  77. // アクセラレータキーの処理.
  78. if (!TranslateAccelerator(hWnd, hAccel, &msg)){ // TranslateAcceleratorでアクセラレータキーをWM_COMMANDに変換できた場合は, 以下のメッセージ処理はしない.
  79.  
  80. // ウィンドウメッセージの送出
  81. TranslateMessage(&msg); // TranslateMessageで仮想キーメッセージを文字メッセージへ変換.
  82. DispatchMessage(&msg); // DispatchMessageで受け取ったメッセージをウィンドウプロシージャ(この場合は独自に定義したWindowProc)に送出.
  83.  
  84. }
  85.  
  86. }
  87. else{ // 正常終了(0), またはエラーによる異常終了(-1).
  88.  
  89. // メインループを抜ける.
  90. break; // breakでメインループを抜ける.
  91.  
  92. }
  93.  
  94. }
  95. else{ // 偽ならウィンドウメッセージが来ていないとき.
  96.  
  97. // 何もしない.
  98.  
  99. }
  100.  
  101. }
  102.  
  103. // デバイスコンテキストの解放.
  104. if (hDC != NULL){ // hDCが解放されていなければ.
  105.  
  106. // デバイスコンテキストを解放する.
  107. ReleaseDC(hWnd, hDC); // ReleaseDCでhDCを解放.
  108. hDC = NULL; // NULLをセット.
  109.  
  110. }
  111.  
  112. // プログラムの終了
  113. return (int)msg.wParam; // 終了コード(msg.wParam)を戻り値として返す.
  114.  
  115. }
  116.  
  117. // WindowProc関数の定義
  118. LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam){ // ウィンドウメッセージに対して独自の処理をするように定義したウィンドウプロシージャ.
  119.  
  120. // ウィンドウメッセージに対する処理.
  121. switch (uMsg){ // switch-casa文でuMsgの値ごとに処理を振り分ける.
  122.  
  123. // ウィンドウの作成が開始された時.
  124. case WM_CREATE: // ウィンドウの作成が開始された時.(uMsgがWM_CREATEの時.)
  125.  
  126. // WM_CREATEブロック
  127. {
  128.  
  129. // 変数の宣言
  130. HWND hButton; // ボタンのウィンドウハンドルhButton.
  131. HWND hStatic; // スタティックコントロールのウィンドウハンドルhStatic.
  132. HWND hEdit; // エディットコントロールのウィンドウハンドルhEdit.
  133. HWND hCheck; // チェックボックスコントロールのウィンドウハンドルhCheck.
  134. HWND hRadio1; // ラジオボタンコントロールのウィンドウハンドルhRadio1.
  135. HWND hRadio2; // ラジオボタンコントロールのウィンドウハンドルhRadio2.
  136. HWND hRadio3; // ラジオボタンコントロールのウィンドウハンドルhRadio3.
  137. HWND hGroup; // グループボックスコントロールのウィンドウハンドルhGroup.
  138. LPCREATESTRUCT lpCS; // CreateStruct構造体のポインタlpCS.
  139.  
  140. // アプリケーションインスタンスハンドルの取得.
  141. lpCS = (LPCREATESTRUCT)lParam; // lParamをLPCREATESTRUCTにキャストして, lpCSに格納.
  142.  
  143. // ボタンの作成.
  144. hButton = CreateWindow(WC_BUTTON, _T("Button1"), WS_CHILD | WS_VISIBLE, 50, 00, 100, 30, hwnd, (HMENU)ID_BUTTON1, lpCS->hInstance, NULL); // CreateWindowのWC_BUTTONでボタン"Button1"を作成.
  145. if (hButton == NULL){ // hButtonがNULLなら.
  146.  
  147. // エラー処理.
  148. return -1; // -1を返す.
  149.  
  150. }
  151.  
  152. // スタティックコントロール(テキスト)の作成.
  153. hStatic = CreateWindow(WC_STATIC, _T("StaticText1"), WS_CHILD | WS_VISIBLE, 50, 30, 100, 30, hwnd, (HMENU)ID_STATIC1, lpCS->hInstance, NULL); // CreateWindowのWC_STATICでスタティックコントロール(テキスト)"StaticText1"を作成.
  154. if (hStatic == NULL){ // hStaticがNULLなら.
  155.  
  156. // エラー処理.
  157. return -1; // -1を返す.
  158.  
  159. }
  160.  
  161. // エディットコントロールの作成.
  162. hEdit = CreateWindow(WC_EDIT, _T("Edit1"), WS_CHILD | WS_BORDER | WS_VISIBLE, 50, 60, 150, 30, hwnd, (HMENU)ID_EDIT1, lpCS->hInstance, NULL); // CreateWindowのWC_EDITでエディットコントロール"Edit1"を作成.
  163. if (hEdit == NULL){ // hEditがNULLなら.
  164.  
  165. // エラー処理.
  166. return -1; // -1を返す.
  167.  
  168. }
  169.  
  170. // チェックボックスの作成.
  171. hCheck = CreateWindow(WC_BUTTON, _T("CheckBox1"), WS_CHILD | WS_VISIBLE | BS_CHECKBOX, 50, 90, 100, 30, hwnd, (HMENU)ID_CHECK1, lpCS->hInstance, NULL); // CreateWindowのWC_BUTTONとBS_CHECKBOXでチェックボックス"CheckBox1"を作成.
  172. if (hCheck == NULL){ // hCheckがNULLなら.
  173.  
  174. // エラー処理.
  175. return -1; // -1を返す.
  176.  
  177. }
  178.  
  179. // グループボックス1の作成.
  180. hGroup = CreateWindow(WC_BUTTON, _T("GroupBox1"), WS_CHILD | WS_VISIBLE | BS_GROUPBOX, 50, 120, 410, 150, hwnd, (HMENU)ID_GROUP1, lpCS->hInstance, NULL); // CreateWindowのWC_BUTTONとBS_GROUPBOXでグループボックス"GroupBox1"を作成.
  181. if (hGroup == NULL){ // hGroupがNULLなら.
  182.  
  183. // エラー処理.
  184. return -1; // -1を返す.
  185.  
  186. }
  187.  
  188. // ラジオボタン1の作成.
  189. hRadio1 = CreateWindow(WC_BUTTON, _T("RadioButton1"), WS_CHILD | WS_VISIBLE | BS_RADIOBUTTON | WS_GROUP, 20, 20, 120, 30, hGroup, (HMENU)ID_RADIO1, lpCS->hInstance, NULL); // CreateWindowのWC_BUTTONとBS_RADIOBUTTONでラジオボタン"RadioButton1"を作成.(hGroupの子ウィンドウとして作成. グループの最初のコントロールにはWS_GROUPをつける.)
  190. if (hRadio1 == NULL){ // hRadio1がNULLなら.
  191.  
  192. // エラー処理.
  193. return -1; // -1を返す.
  194.  
  195. }
  196.  
  197. // ラジオボタン2の作成.
  198. hRadio2 = CreateWindow(WC_BUTTON, _T("RadioButton2"), WS_CHILD | WS_VISIBLE | BS_RADIOBUTTON, 140, 20, 120, 30, hGroup, (HMENU)ID_RADIO2, lpCS->hInstance, NULL); // CreateWindowのWC_BUTTONとBS_RADIOBUTTONでラジオボタン"RadioButton2"を作成.(hGroupの子ウィンドウとして作成.)
  199. if (hRadio2 == NULL){ // hRadio2がNULLなら.
  200.  
  201. // エラー処理.
  202. return -1; // -1を返す.
  203.  
  204. }
  205.  
  206. // ラジオボタン3の作成.
  207. hRadio3 = CreateWindow(WC_BUTTON, _T("RadioButton3"), WS_CHILD | WS_VISIBLE | BS_RADIOBUTTON, 260, 20, 120, 30, hGroup, (HMENU)ID_RADIO3, lpCS->hInstance, NULL); // CreateWindowのWC_BUTTONとBS_RADIOBUTTONでラジオボタン"RadioButton3"を作成.(hGroupの子ウィンドウとして作成.)
  208. if (hRadio3 == NULL){ // hRadio3がNULLなら.
  209.  
  210. // エラー処理.
  211. return -1; // -1を返す.
  212.  
  213. }
  214.  
  215. // ウィンドウ作成成功
  216. return 0; // return文で0を返して, ウィンドウ作成成功とする.
  217.  
  218. }
  219.  
  220. // 既定の処理へ向かう.
  221. break; // breakで抜けて, 既定の処理(DefWindowProc)へ向かう.
  222.  
  223. // ウィンドウが破棄された時.
  224. case WM_DESTROY: // ウィンドウが破棄された時.(uMsgがWM_DESTROYの時.)
  225.  
  226. // WM_DESTROYブロック
  227. {
  228.  
  229. // 終了メッセージの送信.
  230. PostQuitMessage(0); // PostQuitMessageで終了コードを0としてWM_QUITメッセージを送信.(するとメッセージループのGetMessageの戻り値が0になるので, メッセージループから抜ける.)
  231.  
  232. }
  233.  
  234. // 既定の処理へ向かう.
  235. break; // breakで抜けて, 既定の処理(DefWindowProc)へ向かう.
  236.  
  237. // メニュー項目が選択されたり, ボタンなどのコントロールが押されたりして, コマンドが発生した時.
  238. case WM_COMMAND: // メニュー項目が選択されたり, ボタンなどのコントロールが押されたりして, コマンドが発生した時.(uMsgがWM_COMMANDの時.)
  239.  
  240. // WM_COMMANDブロック
  241. {
  242.  
  243. // どのメニュー項目, またはコントロールが選択されたかを判定する.
  244. switch (LOWORD(wParam)){ // LOWORD(wParam)で選択されたメニュー項目, またはコントロールのIDが取得できるので, その値で判定する.
  245.  
  246. // 取得したIDごとに処理を分岐.
  247. // Item1-1が選択された時.
  248. case ID_ITEM_1_1:
  249.  
  250. // ID_ITEM_1_1ブロック
  251. {
  252.  
  253. // 変数の宣言
  254. HINSTANCE hInstance; // アプリケーションインスタンスハンドル
  255.  
  256. // hInstanceを取得
  257. hInstance = (HINSTANCE)GetWindowLong(hwnd, GWL_HINSTANCE); // GetWindowLongでアプリケーションインスタンスハンドルを取得し, hInstanceに格納.
  258.  
  259. // ダイアログボックスの表示
  260. DialogBox(hInstance, MAKEINTRESOURCEW(IDD_DIALOG), hwnd, DialogProc); // DialogBoxでダイアログボックスを表示.(ダイアログの処理はDialogProcに書いてある.)
  261.  
  262. // 0を返す.
  263. return 0; // 処理したので戻り値として0を返す.
  264.  
  265. }
  266.  
  267. // 既定の処理へ向かう.
  268. break; // breakで抜けて, 既定の処理(DefWindowProc)へ向かう.
  269.  
  270. // Item1-2が選択された時.
  271. case ID_ITEM_1_2:
  272.  
  273. // ID_ITEM_1_2ブロック
  274. {
  275.  
  276. // メッセージボックスを表示.
  277. MessageBox(NULL, _T("Item1-2"), _T("BS_GROUPBOX"), MB_OK | MB_ICONASTERISK); // MessageBoxで"Item1-2"と表示.
  278.  
  279. // 0を返す.
  280. return 0; // 処理したので戻り値として0を返す.
  281.  
  282. }
  283.  
  284. // 既定の処理へ向かう.
  285. break; // breakで抜けて, 既定の処理(DefWindowProc)へ向かう.
  286.  
  287. // Item1-3が選択された時.
  288. case ID_ITEM_1_3:
  289.  
  290. // ID_ITEM_1_3ブロック
  291. {
  292.  
  293. // メッセージボックスを表示.
  294. MessageBox(NULL, _T("Item1-3"), _T("BS_GROUPBOX"), MB_OK | MB_ICONASTERISK); // MessageBoxで"Item1-3"と表示.
  295.  
  296. // 0を返す.
  297. return 0; // 処理したので戻り値として0を返す.
  298.  
  299. }
  300.  
  301. // 既定の処理へ向かう.
  302. break; // breakで抜けて, 既定の処理(DefWindowProc)へ向かう.
  303.  
  304. // Item2-1が選択された時.
  305. case ID_ITEM_2_1:
  306.  
  307. // ID_ITEM_2_1ブロック
  308. {
  309.  
  310. // メッセージボックスを表示.
  311. MessageBox(NULL, _T("Item2-1"), _T("BS_GROUPBOX"), MB_OK | MB_ICONASTERISK); // MessageBoxで"Item2-1"と表示.
  312.  
  313. // 0を返す.
  314. return 0; // 処理したので戻り値として0を返す.
  315.  
  316. }
  317.  
  318. // 既定の処理へ向かう.
  319. break; // breakで抜けて, 既定の処理(DefWindowProc)へ向かう.
  320.  
  321. // Item2-2が選択された時.
  322. case ID_ITEM_2_2:
  323.  
  324. // ID_ITEM_2_2ブロック
  325. {
  326.  
  327. // メッセージボックスを表示.
  328. MessageBox(NULL, _T("Item2-2"), _T("BS_GROUPBOX"), MB_OK | MB_ICONASTERISK); // MessageBoxで"Item2-2"と表示.
  329.  
  330. // 0を返す.
  331. return 0; // 処理したので戻り値として0を返す.
  332.  
  333. }
  334.  
  335. // 既定の処理へ向かう.
  336. break; // breakで抜けて, 既定の処理(DefWindowProc)へ向かう.
  337.  
  338. // Item2-3が選択された時.
  339. case ID_ITEM_2_3:
  340.  
  341. // ID_ITEM_2_3ブロック
  342. {
  343.  
  344. // メッセージボックスを表示.
  345. MessageBox(NULL, _T("Item2-3"), _T("BS_GROUPBOX"), MB_OK | MB_ICONASTERISK); // MessageBoxで"Item2-3"と表示.
  346.  
  347. // 0を返す.
  348. return 0; // 処理したので戻り値として0を返す.
  349.  
  350. }
  351.  
  352. // 既定の処理へ向かう.
  353. break; // breakで抜けて, 既定の処理(DefWindowProc)へ向かう.
  354.  
  355. // Item3-1が選択された時.
  356. case ID_ITEM_3_1:
  357.  
  358. // ID_ITEM_3_1ブロック
  359. {
  360.  
  361. // メッセージボックスを表示.
  362. MessageBox(NULL, _T("Item3-1"), _T("BS_GROUPBOX"), MB_OK | MB_ICONASTERISK); // MessageBoxで"Item3-1"と表示.
  363.  
  364. // 0を返す.
  365. return 0; // 処理したので戻り値として0を返す.
  366.  
  367. }
  368.  
  369. // 既定の処理へ向かう.
  370. break; // breakで抜けて, 既定の処理(DefWindowProc)へ向かう.
  371.  
  372. // Item3-2が選択された時.
  373. case ID_ITEM_3_2:
  374.  
  375. // ID_ITEM_3_2ブロック
  376. {
  377.  
  378. // メッセージボックスを表示.
  379. MessageBox(NULL, _T("Item3-2"), _T("BS_GROUPBOX"), MB_OK | MB_ICONASTERISK); // MessageBoxで"Item3-2"と表示.
  380.  
  381. // 0を返す.
  382. return 0; // 処理したので戻り値として0を返す.
  383.  
  384. }
  385.  
  386. // 既定の処理へ向かう.
  387. break; // breakで抜けて, 既定の処理(DefWindowProc)へ向かう.
  388.  
  389. // Item3-3が選択された時.
  390. case ID_ITEM_3_3:
  391.  
  392. // ID_ITEM_3_3ブロック
  393. {
  394.  
  395. // メッセージボックスを表示.
  396. MessageBox(NULL, _T("Item3-3"), _T("BS_GROUPBOX"), MB_OK | MB_ICONASTERISK); // MessageBoxで"Item3-3"と表示.
  397.  
  398. // 0を返す.
  399. return 0; // 処理したので戻り値として0を返す.
  400.  
  401. }
  402.  
  403. // 既定の処理へ向かう.
  404. break; // breakで抜けて, 既定の処理(DefWindowProc)へ向かう.
  405.  
  406. // Button1が押された時.
  407. case ID_BUTTON1:
  408.  
  409. // ID_BUTTON1ブロック
  410. {
  411.  
  412. // 変数の宣言.
  413. HWND hGroup; // GroupBox1のウィンドウハンドル.
  414.  
  415. // GroupBox1のウィンドウハンドルを取得.
  416. hGroup = GetDlgItem(hwnd, ID_GROUP1); // GetDlgItemでID_GROUP1のハンドル取得.
  417.  
  418. // RadioButton1にチェックを入れる.
  419. CheckRadioButton(hGroup, ID_RADIO1, ID_RADIO3, ID_RADIO1); // CheckRadioButtonでID_RADIO1のみにチェックをつける.
  420.  
  421. // 0を返す.
  422. return 0; // 処理したので戻り値として0を返す.
  423.  
  424. }
  425.  
  426. // 既定の処理へ向かう.
  427. break; // breakで抜けて, 既定の処理(DefWindowProc)へ向かう.
  428.  
  429. // CheckBox1が押された時.
  430. case ID_CHECK1:
  431.  
  432. // ID_CHECK1ブロック
  433. {
  434.  
  435. // メッセージボックスを表示.
  436. MessageBox(NULL, _T("CheckBox1 Cliked!"), _T("BS_GROUPBOX"), MB_OK | MB_ICONASTERISK); // MessageBoxで"CheckBox1 Cliked!"と表示.
  437.  
  438. // 0を返す.
  439. return 0; // 処理したので戻り値として0を返す.
  440.  
  441. }
  442.  
  443. // 既定の処理へ向かう.
  444. break; // breakで抜けて, 既定の処理(DefWindowProc)へ向かう.
  445.  
  446. // RadioButton1が押されたとき.
  447. case ID_RADIO1:
  448.  
  449. // ID_RADIO1ブロック
  450. {
  451.  
  452. // ID_RADIO1にチェックをつける.(実際にはID_RADIO1は, ID_GROUP1の子ウィンドウになっているため, ここには来ない.)
  453. CheckRadioButton(hwnd, ID_RADIO1, ID_RADIO3, ID_RADIO1); // CheckRadioButtonでID_RADIO1のみにチェックをつける.
  454.  
  455. // 0を返す.
  456. return 0; // 処理したので戻り値として0を返す.
  457.  
  458. }
  459.  
  460. // 既定の処理へ向かう.
  461. break; // breakで抜けて, 既定の処理(DefWindowProc)へ向かう.
  462.  
  463. // RadioButton2が押されたとき.
  464. case ID_RADIO2:
  465.  
  466. // ID_RADIO2ブロック
  467. {
  468.  
  469. // ID_RADIO2にチェックをつける.(実際にはID_RADIO2は, ID_GROUP1の子ウィンドウになっているため, ここには来ない.)
  470. CheckRadioButton(hwnd, ID_RADIO1, ID_RADIO3, ID_RADIO2); // CheckRadioButtonでID_RADIO2のみにチェックをつける.
  471.  
  472. // 0を返す.
  473. return 0; // 処理したので戻り値として0を返す.
  474.  
  475. }
  476.  
  477. // 既定の処理へ向かう.
  478. break; // breakで抜けて, 既定の処理(DefWindowProc)へ向かう.
  479.  
  480. // RadioButton3が押されたとき.
  481. case ID_RADIO3:
  482.  
  483. // ID_RADIO3ブロック
  484. {
  485.  
  486. // ID_RADIO3にチェックをつける.(実際にはID_RADIO3は, ID_GROUP1の子ウィンドウになっているため, ここには来ない.)
  487. CheckRadioButton(hwnd, ID_RADIO1, ID_RADIO3, ID_RADIO3); // CheckRadioButtonでID_RADIO3のみにチェックをつける.
  488.  
  489. // 0を返す.
  490. return 0; // 処理したので戻り値として0を返す.
  491.  
  492. }
  493.  
  494. // 既定の処理へ向かう.
  495. break; // breakで抜けて, 既定の処理(DefWindowProc)へ向かう.
  496.  
  497. // 上記以外の時.
  498. default:
  499.  
  500. // 既定の処理へ向かう.
  501. break; // breakで抜けて, 既定の処理(DefWindowProc)へ向かう.
  502.  
  503. }
  504.  
  505. }
  506.  
  507. // 既定の処理へ向かう.
  508. break; // breakで抜けて, 既定の処理(DefWindowProc)へ向かう.
  509.  
  510. // 上記以外の時.
  511. default: // 上記以外の値の時の既定処理.
  512.  
  513. // 既定の処理へ向かう.
  514. break; // breakで抜けて, 既定の処理(DefWindowProc)へ向かう.
  515.  
  516. }
  517.  
  518. // あとは既定の処理に任せる.
  519. return DefWindowProc(hwnd, uMsg, wParam, lParam); // 戻り値も含めDefWindowProcに既定の処理を任せる.
  520.  
  521. }
  522.  
  523. // DialogProc関数の定義
  524. INT_PTR CALLBACK DialogProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam){ // ダイアログの処理をするコールバック関数.
  525.  
  526. // ダイアログのメッセージ処理
  527. switch (uMsg){ // uMsgの内容で判断.
  528.  
  529. // ダイアログが閉じられた時.
  530. case WM_CLOSE: // ダイアログが閉じられた時.(uMsgがWM_CLOSEの時.)
  531.  
  532. // WM_CLOSEブロック
  533. {
  534.  
  535. // ダイアログを終了する.
  536. EndDialog(hwndDlg, IDOK); // EndDialogでダイアログを終了する.
  537.  
  538. // TRUEを返す.
  539. return TRUE; // 処理できたのでTRUE.
  540.  
  541. }
  542.  
  543. // 抜ける.
  544. break; // breakで抜ける.
  545.  
  546. default:
  547.  
  548. // 抜ける.
  549. break; // breakで抜ける.
  550.  
  551. }
  552.  
  553. // ここに来るときは処理できていない.
  554. return FALSE; // 処理できていないのでFALSE.
  555.  
  556. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement