WM滚动条的操作原理,要创建一个带滚动条的窗口,使用createwindow创建时带入WS_VSCROLL和WS_HSCROLLod类型就能创建一个带滚动条的窗口,然后在程序中调用SetScrollInfo,配置滚动条。滚动条操作分三部:范围刷新,消息体响应,重绘界面
范围刷新:在这里填充SCROLLINFO结构,建立一系列界面与滚动条尺寸范围的对应关系
下面要填充一个scrollinfo结构,代码显示的是对纵向滚动条定位数据的填充:
//尺寸
SCROLLINFO sbi = { sizeof(SCROLLINFO)};
//客户区域
RECT rcClient;
GetClientRect(hWnd, &rcClient);
//窗口类型,需要根据窗口类型设定客户区域,因为如果纵横携有滚动条的话,需要把滚动条所占的区域从客户区域去掉,才是真正的客户显示区
DWORD dwStyle = GetWindowLong(hWnd, GWL_STYLE);
rcClient.right -= (dwStyle | WS_HSCROLL) ? 0 : GetSystemMetrics(SM_CXVSCROLL);
rcClient.bottom -= (dwStyle | WS_VSCROLL) ? 0 : GetSystemMetrics(SM_CYHSCROLL);
//计算超出,就是在显示区外的尺寸。(计算超出提供给手势操作使用)
g_nMaxXExtent = g_nBmpWidth - rcClient.right;
g_nMaxYExtent = g_nBmpHeight - rcClient.bottom;
//这是滑块的位置点,位置点和段量是有关系的,段量是10,后面就是10,20,30…
g_nXPos = 0;
g_nYPos = 0;
//info的标志位,SIF_DISABLENOSCROLL表示当界面不需要滚动时,滚动条还在界面上,设为灰化状态,如果不设这段标志,将把滚动条移掉
sbi.fMask= SIF_ALL | <