|
age之前测试这个值。讯息回圈可以编写如下:
while (GetMessage (&msg, NULL, 0, 0)) { if (!IsDialogMessage (hDlgModeless, &msg)) { TranslateMessage (&msg) ; DispatchMessage (&msg) ; } }
由於对话方块是在程式进入讯息回圈前建立,并且直到程式结束时才会被清除,所以hDlgModeless的值将总是有效的。我加入了如下的处理方式,以便您可能会往对话方块的视窗讯息处理程式中加入一段清除对话方块的程式码:
case WM_CLOSE : DestroyWindow (hDlg) ; hDlgModeless = NULL ; break ;
在原来的COLORS1程式中,SetWindowText在使用wsprintf将三个数值标签转换为文字之後才设定它们的值。叙述为:
wsprintf (szBuffer, TEXT ("%i"), color[i]) ; SetWindowText (hwndValue[i], szBuffer) ;
i的值为目前处理的卷动列的ID,hwndValue是一个阵列,它包含颜色数值的三个静态文字子视窗的视窗代号。
新版本使用SetDlgItemInt为每个子视窗的每个文字栏位设定一个号码:
SetDlgItemInt (hDlg, iCtrlID + 3, color [iCtrlID], FALSE) ;
尽管SetDlgItemInt和与其对应的GetDlgItemInt在编辑控制项中用得最多,它们也可以用来设定其他控制项的文字栏位,如静态文字控制项等。iCtrlID变数是卷动列的ID,给ID加上3使之变成对应数字标签的ID。第三个参数是颜色值。通常,第四个参数表示第三个参数的值是解释为有正负号的(第四个参数为TRUE)还是无正负号的(第四个参数为FALSE)。但是,对於这个程式,值的范围是从0到256,所以这个参数没有意义。
在将COLORS1转换为COLORS2的程序中,我们把越来越多的工作交给了Windows。旧版本呼叫了CreateWindow
10次;而新版本只呼叫了CreateWindow和CreateDialog各一次。但是,如果您认为我们已经把呼叫CreateWindow的次数降到最少,那么您就错了, |