MFC窗口滚动功能 CScrollView类
2014-12-05 15:28
274 查看
在利用MFC AppWizard生成工程时,在创建向导的第六步可以吧视类的基类选择为CScrollView。这样,视图窗口就具有滚动功能,当图形在窗口中不能完全显示时,可以通过拖动滚动条来浏览整个窗口中的内容。
而当生成工程时未选择CScrollView作为基类,如果要为其增加窗口滚动的功能,可以手动讲该程序的视类的基类CView修改为CScrollView,这需要修改源程序的几处内容。在C**View类头文件中只有一处需要修改,即该类的定义出,将CView修改为CScrollView即可,让C**View类从后者派生,修改后的代码如下所示:
class C**View:public CScrollView
{
.....
但在C**View类的源文件中需要多处修改,为了避免遗漏,可以用vc自带的【Edit\Replace】菜单命令替换,也可以用visual assist 中rename功能。在替换完毕之后,程序可以成功编译和链接,但是运行时将会出现一个非法操作提示,这是因为对滚动窗口来说,在初始创建时,需要一些设置,包括整个滚动窗口的大小,以及当单击滚动条箭头时滚动条滚动的数值和单击滚动栏时滚动条滚动的数值。这时,就需要调用CScrollView类的成员函数:SetScrollSizes,该函数有四个参数,因为后两个参数都有默认值,所以在调用的时候可以只为其传递前两个参数的值。
根据前面的知识,我们可以断定应该在视类窗口创建之后再调用SetScrollSizes函数,这里可以为C**View类重载一个虚函数:OnInitialUpdate,OnInitialUpdate函数是在窗口完全创建完成之后调用的打一个函数,也就是说该函数在第一次调用OnDraw函数之前就调用。利用此特点,可以在此函数中对窗口进行一些初始化的工作,本例即设置滚动窗口初始尺寸。OnInitialUpdate函数具体代码如下
void C**View::OnInitialUpdate()
{
CScrollView::OnInitialUpdate();
//TODO: Add your specialized code here and/or call the base class
SetScrollSizes(MM_TEXT,CSize(800,600))
}
这是时运行程序就可以看到窗口多了两个滚动条哦
而当生成工程时未选择CScrollView作为基类,如果要为其增加窗口滚动的功能,可以手动讲该程序的视类的基类CView修改为CScrollView,这需要修改源程序的几处内容。在C**View类头文件中只有一处需要修改,即该类的定义出,将CView修改为CScrollView即可,让C**View类从后者派生,修改后的代码如下所示:
class C**View:public CScrollView
{
.....
但在C**View类的源文件中需要多处修改,为了避免遗漏,可以用vc自带的【Edit\Replace】菜单命令替换,也可以用visual assist 中rename功能。在替换完毕之后,程序可以成功编译和链接,但是运行时将会出现一个非法操作提示,这是因为对滚动窗口来说,在初始创建时,需要一些设置,包括整个滚动窗口的大小,以及当单击滚动条箭头时滚动条滚动的数值和单击滚动栏时滚动条滚动的数值。这时,就需要调用CScrollView类的成员函数:SetScrollSizes,该函数有四个参数,因为后两个参数都有默认值,所以在调用的时候可以只为其传递前两个参数的值。
根据前面的知识,我们可以断定应该在视类窗口创建之后再调用SetScrollSizes函数,这里可以为C**View类重载一个虚函数:OnInitialUpdate,OnInitialUpdate函数是在窗口完全创建完成之后调用的打一个函数,也就是说该函数在第一次调用OnDraw函数之前就调用。利用此特点,可以在此函数中对窗口进行一些初始化的工作,本例即设置滚动窗口初始尺寸。OnInitialUpdate函数具体代码如下
void C**View::OnInitialUpdate()
{
CScrollView::OnInitialUpdate();
//TODO: Add your specialized code here and/or call the base class
SetScrollSizes(MM_TEXT,CSize(800,600))
}
这是时运行程序就可以看到窗口多了两个滚动条哦
相关文章推荐
- 【旧资料整理】MFC--滚动视图窗口(CScrollView)使用双缓冲问题
- MFC--滚动视图窗口(CScrollView)使用双缓冲问题
- [MFC]ScrollDemo程序:CScrollView滚动视图的应用
- 滚动视图窗口(CScrollView)使用双缓冲问题
- MFC窗口/对话框 expected constant expression 'IDD_ISO_TREE_VIEW' : undeclared identifier解决
- 使用CScrollView创建滚动
- TextView滚动功能的实现
- TextView滚动功能的实现
- 【MFC】doc_view结构中让窗口一开始就最大化探讨
- MFC中把viewl类的基类由CView转换成CScrollView,使用滚动条的方法
- cocos2d-x 模态窗口 CCTableView 数字滚动盘 数字密码解锁
- 对于MFC中窗口接受文件的拖拽功能
- MFC创建的MDI程序 新建一个子文档 主窗口标题自动会被追加上子文档的名字 取消此功能
- 在MFC中更改View类的基类CView为CScrollView的关键步骤
- MFC MDI在CFormView中当前关闭窗口的代码
- 屏蔽基于对话框的MFC程序中按下ESC关闭窗口的功能
- ScrollWindow 函数功能 该函数滚动所指定的窗口客户区域内容。函数提供了向后兼容性,新的应用程序应使用ScrollWindowEX。
- MFC 实现手形工具--用鼠标拖动CScrollView(类似手形工具)
- MFC 窗口靠边自动隐藏功能
- mfc 基于formview的sdi 打开文档后 窗口变小的问题