9zg06.gif" width="574" height="404" border="0" />
COLORS1不处理WM_PAINT讯息,所有的工作几乎都是由子视窗完成的。
显示区域右半部显示的颜色实际上是视窗的背景颜色。SS_WHITERECT样式的静态子视窗显示在显示区域的左半部。三个卷动列是SBS_VERT样式的子视窗控制项,它们被定位在SS_WHITERECT子视窗的顶部。另外六个SS_CENTER样式(居中文字)的静态子视窗提供标签和颜色值。COLORS1在WinMain函式中用CreateWindow建立它的普通重叠式视窗和10个子视窗。SS_WHITERECT和SS_CENTER静态视窗使用视窗类别「static」;三个卷动列使用视窗类别「scrollbar」。
CreateWindow呼叫中的x位置、y位置、宽度和高度参数最初设为0,因为位置和大小都取决於显示区域的尺寸,而它目前尚未确定。COLORS1的视窗讯息处理程式在接收到WM_SIZE讯息时,就使用MoveWindow给10个子视窗重新确定大小。所以,每当您对COLORS1视窗进行缩放时,卷动列的尺寸就会按比例变化。
当WndProc视窗讯息处理程式收到WM_VSCROLL讯息时,lParam参数的高字组就是子视窗的代号。我们可以使用GetWindowWord来得到子视窗的ID:
i = GetWindowLong ((HWND) lParam, GWL_ID) ;
对於这三个卷动列,我们已经按习惯将其ID设为0、1、2,所以WndProc能区别出是哪个卷动列在产生讯息。
由於子视窗的代号在建立时就被储存在阵列中,所以WndProc就能对相对应的卷动列讯息进行处理,并通过呼叫SetScrollPos来设定相对应的新值:
SetScrollPos (hwndScroll[i], SB_CTL, color[i], TRUE) ;
WndProc也改变卷动列底部子视窗的文字:
wsprintf (szBuffer, TEXT ("%i"), color[I]) ;
SetWindowText (hwndValue[i], szBuffer) ;
自动键盘介面
卷动列控制项也能处理键盘输入,但是只有在拥有输入焦点时才行。下表说明怎样将键盘游标键转变为卷动讯息: