[ windows程序设计(programing windows) ]

来源:互联网 发布:淘宝刷空间人气 编辑:程序博客网 时间:2024/06/01 09:22

滚动条有标准滚动条和滚动条控件之分,本文要介绍的就是滚动条控件。滚动条控件和之前介绍的控件都一样,都是需要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_VERTSBS_HORZ将会失效,并且位置是CreateWindowEx函数指定的,大小默认。SBS_SIZEBOXBOTTOMRIGHTALIGN需要sizebox为前提,并且这个sizebox的底端和右端会与用CreateWindowEx函数指定的位置和大小建立的矩形的底端和右端对齐。SBS_SIZEBOXTOPLEFTALIGN需要sizebox为前提,并且这个sizebox的上端和左端会与用CreateWindowEx函数指定的位置和大小建立的矩形的上端和左端对齐。SBS_SIZEGRIP与sizebox一样,不过多了突起的边缘注:如果用了windows10的控件外观,那么SBS_SIZEBOX和SBS_SIZEGRIP在外观上没有任何差别。给出一个样例代码

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;
以上便是本文的全部内容,欢迎评论,相互学习。
0 0