求助:滚动条问题:
喜欢嗑瓜子 2009-09-17 08:55:51 请教问题:
这是windows程序设计的第四章的第一个例题,在一个窗口上添加垂直滚动条,其中有段不明白,代码如下:
/*iVscrollPos是程序里面定义的一个变量,表示滚动条当前的位置*/
case WM_VSCROLL:
switch (LOWORD (wParam)) //使用宏LOWORD获取wParam的低字位,也就是通知码。根据switch语句做出响应的反应
{
case SB_LINEUP:
iVscrollPos -= 1 ;
break ;
case SB_LINEDOWN:
iVscrollPos += 1 ;
break ;
case SB_PAGEUP:
iVscrollPos -= cyClient / cyChar ;
break ;
case SB_PAGEDOWN:
iVscrollPos += cyClient / cyChar ;
break ;
/*********************************************************/
case SB_THUMBPOSITION:
iVscrollPos = HIWORD (wParam) ;
break ;
/********************************************************/
default :
break ;
}
iVscrollPos = max (0, min (iVscrollPos, NUMLINES - 1)) ; //调整iVscrollPos值,确保它在滚动范围之内
if (iVscrollPos != GetScrollPos (hwnd, SB_VERT)) //判断滚动条位置是否变化。
{
SetScrollPos (hwnd, SB_VERT, iVscrollPos, TRUE) ; //更新滚动条位置
InvalidateRect (hwnd, NULL, TRUE) ; //发送一个WN_PAINT消息,刷新窗口
}
return 0 ;
问题:被注释包起来的case语句不明白是什么意思?还有iVscrollPos = HIWORD (wParam)这条赋值语句。为什么获取wParam的高16赋给表示滚动条位置的变量?
在处理WM_VSCROLL和WM_HSCROLL消息的时候,wParam的低字位表示通知码,高字位表示什么意思?这段代码把wParam的高字位赋值给iVscrollPos变量就更不明白了。
请相信讲解下,