本次要介绍的是窗口滚动条。滚动条一般在要显示的东西过多以至于屏幕无法完整呈现时使用。此时,你可以用它来滚动窗口,来显示内容的不同部分。
滚动条这个东西用电脑应该都见得多了,由两个中间包含三角的方块和一个位于两个方块之间的长条组成,一般来说这个长条是可以随着显示内容占总内容的多少来改变长度的这个比例越小,长条越小。
想要在窗口中添加滚动条十分的简单,只需要在CreateWindow函数的第三个参数dwStyle中加入WS_VSCROLL和WS_HSCROLL即可,当然你只添加其中一个也可以,H代表水平滚动条,V代表垂直滚动条。需要注意的是显示区域不包括滚动条占据的空间,对于特定的机器,水平滚动条的高度和垂直滚动条的宽度是恒定的,想要获取这些值,你可以用GetSystemMetrics函数来获得。
滚动条有其范围和位置,范围由一对整数iMin和iMax表示,位置由一个整数iPos来表示。默认情况下nMin为0,nMax为100,当然这些你是可以用SetScrollInfo函数来更改的。
接下来讲一下用滚动条的一般流程,
首先你需要在WM_CREATE消息下处理一下基础信息,比如说你要滚动的内容是文字,那么你就需要计算出文字的宽,高以及大写时候的宽,这里需要用到一个结构体是TEXTMETRIC,这个结构体有很多成员,但我只将用到的以代码的形式呈现出来,
TEXTMETRIC tm;
GetTextMetrics(hdc, &tm);
cxChar = tm.tmAveCharWidth;
cxUpper = (tm.tmPitchAndFamily & 1 ? 3 : 2) * cxChar / 2;
cyChar = tm.tmHeight + tm.tmExternalLeading;
cxChar是字符的宽度,cyChar是字符的高度,cxUpper是字符大写后的宽度。为什么大写的字符宽度要这么算,因为对于等宽字体来说,tm.tmPitc