选中和不选中按钮均需要向子窗口控件发送BM_CHECK消息。要设定一个按钮选中标记,您可以使用:
SendMessage (hwndCtrl, BM_SETCHECK, 1, 0) ;
要消除选中标记,您可以使用:
SendMessage (hwndCtrl, BM_SETCHECK, 0, 0) ;
其中hwndCtrl参数是子窗口按钮控件的窗口句柄。
第一种简化的方法是使用专门的对话框程序SendDlgItemMessage:
SendDlgItemMessage (hDlg, id, iMsg, wParam, lParam) ;
它相同于:
SendMessage (GetDlgItem (hDlg, id), id, wParam, lParam) ; 现在,循环将变成这样:for (i = IDC_BLACK, i <= IDC_WHITE, i++) SendDlgItemMessage (hDlg, i, BM_SETCHECK, i == LWORD (wParam), 0) ;稍微有些改进。但是真正的重大突破要等到使用了CheckRadioButton函数时才会出现:CheckRadioButton (hDlg, idFirst, idLast, idCheck) ; 这个函数将ID在idFirst到idLast之间的所有单选按钮的选中标记都清除掉,除了ID为idCheck的单选按钮,因为它是被选中的。这里,所有ID必须是连续的。从此我们可以完全摆脱循环,并使用:
CheckRadioButton (hDlg, IDC_BLACK, IDC_WHITE, LOWORD (wParam)) ; 这正是ABOUT2对话框程序所采用的方法