VS2010 C++学习(1):滚动条的设计总结

来源:互联网 发布:云计算开源平台 编辑:程序博客网 时间:2024/05/16 07:54

VS2010 C++学习(1):滚动条的设计总结

 

学习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、  编辑框中的滚动条设计;

单行编辑框控件无滚动条,多行编辑框控件才有滚动条。

1Edit1属性:

名称

属性

说明

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无用。

原创粉丝点击