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

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

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

学习VC++编制的滚动条程序.。

一、主要内容:

1.对话框中的滚动条设计;

2.编辑框中的滚动条设计;

3.列表框中的滚动条设计;

二、设计实现:

1、对话框中的滚动条设计;

∙在资源编辑器中,选择在属性对话框中的水平滚动和垂直滚动样式。

∙选择调整大小的边框样式,以使该对话框可调整其大小。

∙重写 WM_VSCROLL 和 WM_HSCROLL 消息处理程序。

∙重写设置滚动条区域,如果大小减小到小于原始大小的 WM_SIZE 消息处理程序。

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) 使用的函数

●SetScrollInfo(SB_HORZ, &hsi, TRUE);

●SetScrollPos(SB_HORZ,m_hScrollPos,TRUE);

●ScrollWindow(-nDelta,0);

函数原型:int SetScrollInfo(HWND hWnd,int fnBar,LPSCROLLINFO lpsi,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)

2)多行编辑框类的方法:

设置好后多行编辑框控件自动管理滚动条。

3、列表框中的滚动条设计;

1)垂直滚动条设计

只需设置属性即可:

2)水平滚动条设计

注意:需要将水平滚动条的属性设为真,否则即使调用下面的函数也不会出现水平滚动条。

通过调用SendDlgItemMessage 向对话框发送设置水平滚动条宽度信息来显示水平滚动条。

函数SendDlgItemMessage(IDC_LIST2, LB_SETHORIZONTALEXTENT, (WPARAM)s.cx, 0);

函数原型:LRESULT SendDlgItemMessage( int nID, UINT message, WPARAM wParam = 0, LPARAM lParam = 0 );

LB_SETHORIZONTALEXTENT 为设置滚动条宽度信息。发送消息时,wParam为滚动条的长度(以像素为单位,可通过计算得出准确的长度)。

lParam无用。

三、程序下载:

/detail/dalong10/5366011

相关文档
最新文档