VS2010 C++学习(1):滚动条的设计总结
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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