使用CScrollView创建滚动条
2013-04-17 19:15
423 查看
滚动条的作用在于当绘制的图形超过客户区的大小的时候,通过滚动条的移动来观测整个图形,VC中提供了CScrollView类来完成滚动条的绘制,在创建工程的时候的第六步,将基类选择为CSrollView。如果之前已经选择CView为基类,请将你的程序进行如下改动:(1)将CXXXView.cpp和CXXXView.h中的CView全部替换为CSrollView(XXX为工程名称)(2)通过ClassWizard为CXXXView添加响应函数OnInitialUpdate(),并添加一下代码:
CSize sizeTotal;
sizeTotal.cx=sizeTotal.cy=0;
SetScrollSizes(MM_TEXT,SizeTotal);
这段代码的作用在于完成滚动条的初始化,如果不添加编译时没有问题但运行时出错,SetScrollSizes( int nMapMode, SIZE sizeTotal, const SIZE& sizePage = sizeDefault, const SIZE& sizeLine = sizeDefault )四个参数的含义分别是:nMapMode指映射模式,sizeTotal代表滚动条的范围,sizePage代表点击滚动条空白处时滚动条移动的距离,sizeLine代表点击端点处滚动条移动的距离。
设置完成后,在OnDraw中把你绘图使用的参数传递给SetScrollSizes(),确定滚动条的范围,此处有一注意事项:在绘图的过程中使用CDC *pDC直接调用绘制,不要使用CClientDC dc(this)的dc来进行绘制,否则将导致滚动条的移动时图形没有任何变化(曾经花了两天时间才发现这个问题的解决方法,笨啊!)
建议最好添加如下代码:
//这个很重要
void CProgramView::OnPrepareDC(CDC* pDC, CPrintInfo* pInfo)
{
// TODO: Add your specialized code here and/or call the base class
CScrollView::OnPrepareDC(pDC, pInfo);
}
void CProgramView::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
// TODO: Add your message handler code here and/or call default
CScrollView::OnVScroll(nSBCode, nPos, pScrollBar);
}
void CProgramView::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
// TODO: Add your message handler code here and/or call default
CScrollView::OnHScroll(nSBCode, nPos, pScrollBar);
}
CSize sizeTotal;
sizeTotal.cx=sizeTotal.cy=0;
SetScrollSizes(MM_TEXT,SizeTotal);
这段代码的作用在于完成滚动条的初始化,如果不添加编译时没有问题但运行时出错,SetScrollSizes( int nMapMode, SIZE sizeTotal, const SIZE& sizePage = sizeDefault, const SIZE& sizeLine = sizeDefault )四个参数的含义分别是:nMapMode指映射模式,sizeTotal代表滚动条的范围,sizePage代表点击滚动条空白处时滚动条移动的距离,sizeLine代表点击端点处滚动条移动的距离。
设置完成后,在OnDraw中把你绘图使用的参数传递给SetScrollSizes(),确定滚动条的范围,此处有一注意事项:在绘图的过程中使用CDC *pDC直接调用绘制,不要使用CClientDC dc(this)的dc来进行绘制,否则将导致滚动条的移动时图形没有任何变化(曾经花了两天时间才发现这个问题的解决方法,笨啊!)
建议最好添加如下代码:
//这个很重要
void CProgramView::OnPrepareDC(CDC* pDC, CPrintInfo* pInfo)
{
// TODO: Add your specialized code here and/or call the base class
CScrollView::OnPrepareDC(pDC, pInfo);
}
void CProgramView::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
// TODO: Add your message handler code here and/or call default
CScrollView::OnVScroll(nSBCode, nPos, pScrollBar);
}
void CProgramView::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
// TODO: Add your message handler code here and/or call default
CScrollView::OnHScroll(nSBCode, nPos, pScrollBar);
}
相关文章推荐
- 使用CScrollView创建滚动条
- 使用CScrollView创建滚动条
- 使用CScrollView创建滚动条
- MFC 滚动条 CSCROLLVIEW的使用
- 使用CScrollView创建滚动
- MFC中把viewl类的基类由CView转换成CScrollView,使用滚动条的方法
- [WebView学习之三]:使用WebView来创建Apps
- 使用 UITableView 创建表格应用演练(4)——自定义单元格
- CScrollView滚动条范围问题 超过32位不能正确下拉问题
- iOS 创建用xib制作的ViewController,不可以使用new方法
- 关于为使用ArrayAdapter创建ListView时,使用TextView添加子项的问题
- View4.5测试参考文档2--AD中创建供View使用的组织单元和用户
- CRectTracker在CScrollView中的使用(转)
- 视图的创建与使用 Sql Server View
- 使用 UITableView 创建表格应用演练(4)——自定义单元格
- MFC中CScrollView类的使用以及CScrollView的双缓冲绘图
- 安卓中引入第三方架包butterKnife的操作方法以及使用Intent创建选择窗口和通过handler发消息实时更新textview中的时间
- VC在多文本的CDockable中使用CScrollView的问题
- 关于为使用ArrayAdapter创建ListView时,使用TextView添加子项的问题
- 使用PPRevealSideViewController创建抽屉式导航