滚动条有标准滚动条和滚动条控件之分,本文要介绍的就是滚动条控件。滚动条控件和之前介绍的控件都一样,都是需要CreateWindow函数来创建的,创建的同时也需要指定滚动条的位置和大小。相对于标准滚动条来说,滚动条更灵活一些,是一个独立的控件,不会受到位置与大小的限制,不过如果你要建立一个对整个窗口进行滚动的滚动条,还是建议用标准滚动条好一点。
接下来来讲讲关于滚动条控件的建立,不同于标准滚动条,滚动条控件是需要用CreateWindow函数来创建的,下面给出完整的创建语句,
hwndScroll = CreateWindow (TEXT ("scrollbar"), NULL,
WS_CHILD | WS_VISIBLE |
WS_TABSTOP | SBS_VERT,
0, 0, 0, 0,
hwnd, (HMENU) i, hInstance, NULL)
dwStyle参数包含了SBS_VERT,指出了这个滚动条控件是垂直的,当然,你也可以包含SBS_HORZ指出滚动条是水平的,下来我系统的介绍一下SBS开头的宏,SBS开头代表什么呢,Scroll Bar Style,滚动条样式;
SBS_HORZ | 指出建立的滚动条是水平滚动条,位置和大小是CreateWindowEx函数指定的。 |
SBS_TOPALIGN | 需要水平滚动条为前提,并且这个滚动条的上边会与用CreateWindowEx函数指定的位置和大小建立的矩形的上边对齐,宽为设定值,高会被指定为默认值。 |
SBS_BOTTOMALIGN | 需要水平滚动条为前提,并且这个滚动条的下边会与用CreateWindowEx函数指定的位置和大小建立的矩形的下边对齐,宽为设定值,高会被指定为默认值。 |
SBS_VERT | 指出建立的滚动条是垂直滚动条,位置和大小是CreateWindowEx函数指定的。 |
SBS_LEFTALIGN | 需要垂直滚动条为前提,并且这个滚动条的左边会与用CreateWindowEx函数指定的位置和大小建立的矩形的左边对齐,高为设定值,宽会被指定为默认值。 |
SBS_RIGHTALIGN | 需要垂直滚动条为前提,并且这个滚动条的右边会与用CreateWindowEx函数指定的位置和大小建立的矩形的右边对齐,高为设定值,宽会被指定为默认值。 |
SBS_SIZEBOX | 指出该滚动条为sizebox,SBS_VERT和SBS_HORZ将会失效,并且位置是CreateWindowEx函数指定的,大小默认。 |
SBS_SIZEBOXBOTTOMRIGHTALIGN | 需要sizebox为前提,并且这个sizebox的底端和右端会与用CreateWindowEx函数指定的位置和大小建立的矩形的底端和右端对齐。 |
SBS_SIZEBOXTOPLEFTALIGN | 需要sizebox为前提,并且这个sizebox的上端和左端会与用CreateWindowEx函数指定的位置和大小建立的矩形的上端和左端对齐。 |
SBS_SIZEGRIP | 与sizebox一样,不过多了突起的边缘 |
hWndVertScrollBar = CreateWindowEx(NULL, WC_SCROLLBAR, NULL, WS_CHILD | WS_VISIBLE | WS_TABSTOP | SBS_VERT | SBS_RIGHTALIGN, 0, 0, cxClient, cyClient, hWnd, (HMENU)10001, hInst, NULL);
hMenu这一栏应该设置你在头文件中定义的宏。
接下来的内容和我上一篇文章《窗口滚动条》基本一致,可以参照上一篇文章的讲述。
接下来要讲的就是响应键盘事件,这里要处理的就是WM_KEYDOWN,这里我只将代码贴上,因为这个比较简单。
case WM_KEYDOWN:
switch (wParam)
{
default:
break;
case VK_HOME:
SendMessage(hWnd, WM_VSCROLL, SB_TOP, 0);
break;
case VK_END:
SendMessage(hWnd, WM_VSCROLL, SB_BOTTOM, 0);
break;
case VK_PRIOR:
SendMessage(hWnd, WM_VSCROLL, SB_PAGEUP, 0);
break;
case VK_NEXT:
SendMessage(hWnd, WM_VSCROLL, SB_PAGEDOWN, 0);
break;
case VK_UP:
SendMessage(hWnd, WM_VSCROLL, SB_PAGEUP, 0);
break;
case VK_DOWN:
SendMessage(hWnd, WM_VSCROLL, SB_PAGEDOWN, 0);
break;
case VK_LEFT:
SendMessage(hWnd, WM_HSCROLL, SB_PAGEUP, 0);
break;
case VK_RIGHT:
SendMessage(hWnd, WM_HSCROLL, SB_PAGEDOWN, 0);
break;
}
break;
以上便是本文的全部内容,欢迎评论,相互学习。