学习VC++编制的滚动条程序.。
一、 主要内容:
1. 对话框中的滚动条设计;
2. 编辑框中的滚动条设计;
3. 列表框中的滚动条设计;
二、 设计实现:
1、 对话框中的滚动条设计;
· 在资源编辑器中,选择在属性对话框中的水平滚动和垂直滚动样式。
· 选择调整大小的边框样式,以使该对话框可调整其大小。
· 重写 WM_VSCROLL和 WM_HSCROLL 消息处理程序。
· 重写设置滚动条区域,如果大小减小到小于原始大小的 WM_SIZE消息处理程序。
名称 |
属性 |
Border |
Resizing |
Horizontal Scrollbar |
True |
Vertical Scrollbar |
True |
1)添加成员变量到对话框类中
int m_nCurHeight; //存储对话框中的当前高度
int m_nScrollPos; //存储当前垂直滚动位置
int m_nCurWidth; //存储对话框中的当前宽度
int m_hScrollPos; //存储当前水平滚动位置
CRect m_rect; //对话框原始大小
2)若要获取原始窗口的大小,请将下行添加到OnInitDialog方法:
GetWindowRect(m_rect);
m_nScrollPos = 0; //垂直滚动位置0
m_hScrollPos = 0; //水平滚动位置0
3) OnSize方法中添加消息处理程序。
判断当前对话框的大小,并与对话框原始大小进行比较。然后计算出垂直和水平滚动条的最大值,写入SCROLLINFO中去。
4) 将 WM_VSCROLL消息的消息处理程序添加到OnVScroll方法中,WM_HSCROLL 消息的消息处理程序添加到OnHScroll方法中。
设计响应滚动条的事件。
5) 使用的函数
l SetScrollInfo(SB_HORZ, &hsi, TRUE);
l SetScrollPos(SB_HORZ,m_hScrollPos,TRUE);
l ScrollWindow(-nDelta,0);
函数原型:int SetScrollInfo(HWNDhWnd,int fnBar,LPSCROLLINFOlpsi,BOOL fRedraw);
函数功能:该函数设置滚动条参数,包括滚动位置的最大值和最小值,页面大小,滚动按钮的位置。如被请求,函数也可以重画滚动条。
参数:
hWnd:滚动条控件或带标准滚动条的窗体句柄,由fnBar参数决定。
fnBar:指定被设定参数的滚动条的类型。这个参数可以是下面值,含义如下:
SB_CTL:设置滚动条控件。而参数hwnd必须是滚动条控件的句柄。
SB_HORZ:设置所给定的窗体上标准水平滚动条参数。
SB_VERT:设置所给定的窗体上标准垂直滚动条参数。
lpsi:指向SCROLLINFO结构。在调用SetScrollInfo之前,设置SCROLLINFO结构中cbSize成员以标识结构大小,设置成员fMask以说明待设置的滚动条参数,并且在适当的成员中制定新的参数值。成员fMask可以为下面所列复合值,含义如下:
SIF_DfSABLENOSCROLL:如果滚动条的新参数使其为没必要,则使滚动条无效而不再移动它。
SIF_PAGE:设置滚动页码值到由Ipsi指向的SCROLLINFO结构的nPage成员中。
SIF_POS:设置滚动位置值到由lpsi指向的SCROLLINFO结构的nPos成员中。
SIF_RANGE:设置滚动范围值到由lpsl指向的SCROLLINFO结构的nMin和nMax成员中。
fRedraw:指定滚动条是否重画以反映滚动条的变化。如果这个参数为TRUE,滚动条将被重画,否则不被重画。
返回值:返回值是滑块的当前位置。
2、 编辑框中的滚动条设计;
单行编辑框控件无滚动条,多行编辑框控件才有滚动条。
1)Edit1属性:
名称 |
属性 |
说明 |
Multiline |
True |
多行编辑框 |
Horizontal Scroll |
True |
|
Vertical Scroll |
True |
|
Auto HScroll |
True |
|
Auto VScroll |
True |
|
2)多行编辑框类的方法:
设置好后多行编辑框控件自动管理滚动条。
3、 列表框中的滚动条设计;
1)垂直滚动条设计
只需设置属性即可:
名称 |
属性 |
说明 |
Vertical Scroll |
True |
|
2)水平滚动条设计
注意:需要将水平滚动条的属性设为真,否则即使调用下面的函数也不会出现水平滚动条。
名称 |
属性 |
说明 |
Horizontal Scroll |
True |
|
通过调用SendDlgItemMessage向对话框发送设置水平滚动条宽度信息来显示水平滚动条 。
函数SendDlgItemMessage(IDC_LIST2, LB_SETHORIZONTALEXTENT, (WPARAM)s.cx,0);
函数原型:LRESULT SendDlgItemMessage( int nID, UINTmessage, WPARAM wParam = 0, LPARAM lParam = 0 );
LB_SETHORIZONTALEXTENT 为设置滚动条宽度信息。发送消息时,wParam为滚动条的长度(以像素为单位,可通过计算得出准确的长度)。lParam无用。