对话方块(二十四)

2010-12-30 21:13:56 · 作者: · 浏览: 41367
AN:
case IDC_WHITE:
iColor = LOWORD (wParam) ;

for (i = IDC_BLACK, i <= IDC_WHITE, i++)
SendMessage (GetDlgItem (hDlg, i),
BM_SETCHECK, i == LOWORD (wParam), 0) ;
return TRUE ;
其他行程式

这种方法能让人满意地执行。您将新的颜色值储存在iColor中,并且还建立了一个回圈,轮流使用所有八种颜色的ID值。您取得每个单选按钮控制项的视窗代号,并用SendMessage给每个代号发送一条BM_SETCHECK讯息。只有对於向对话方块视窗讯息处理程式发送WM_COMMAND讯息的按钮,这个讯息的wParam值才被设定为1。

第一种简化的方法是使用专门的对话方块程序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对话方块程序所采用的方法。

在使用核取方块时,也提供了类似的简化函式。如果您建立了一个「CHECKBOX」对话方块视窗控制项,那么可以使用如下的函式来设定和清除选中标记:

CheckDlgButton (hDlg, idCheckbox, iCheck) ;

如果iCheck设定为