[ windows程序设计(programing windows) ] - 控制项之滚动条

滚动条有标准滚动条和滚动条控件之分,本文要介绍的就是滚动条控件。滚动条控件和之前介绍的控件都一样,都是需要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;
以上便是本文的全部内容,欢迎评论,相互学习。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值