2023年12月22日发(作者:)

第28卷第4期2007年8月华北水利水电学院学报JournalofNoahChinaInstituteofWaterConservancyandHydroelectricPowerVo1.28NO.4Aug.2007文章编号:1002-5634(2007)04-0069-03在vc++工具栏中添加slider控件实现试图实时缩放宋素荣(郑州市科技中专,河南郑州450011)摘要:用slider控件的滑动来实时控制视图平滑地缩放,利用控件的范围控制缩放的大小,程序通过vc++平台,用Slider控件能方便地实现控制视图缩放,也比单纯放大缩小视图要直观连续,更适合用户的需要.同时,利用同样的思想,也可以很方便地实现其他界面上的改进。关键词:工具栏;Slider控件;视图缩放中图分类号:TP311.13文献标识码:AVisualC++所提供的标准工具条中只有一些简单的诸如文档打开、存储以及一些编辑功能按钮.而VisualC++自身的工具条功能十分丰富,如果想在视图区绘图,必然涉及到视图的缩放问题.滑动控件是Windows中最常用的控件之一.一般由一个滑动条、一个滑块和可选的刻度组成.用户可以通过移动滑块在相应的控件中显示对应的值.通常,在滑动控件附近一定有标签控件或编辑框控件,用于显示相应的值.滑动控件在应用程序中用途极为广泛,如在桌面的属性中就可以看到.如果在工具栏中加入Slider控件来控制视图的缩放,是十分直观和方便的.在此讨论如何利用VC++6.0在工具栏中增加Slider控件以及如何控制视图的缩放.前值.函数定义形式如下:intGetPos()eonst;intSetPos(intnPos);3.GetPageSize,SetPageSize函数.查询和设置函滑块和块移动量,块移动量是指当按下PgUp或Pg-Down时滑块的移动量。函数定义形式如下:intGetPageSize()eonst;intSetPageSize(intnSize);4.SetTicFreq函数.设置滑动条刻度的频度.默认为1个单位1个函数,函数定义形式如下:voidSetTicFreq(intnFreq);5.SetTic函数.在指定的位置设置刻度.Win—dows默认的刻度是均匀的,函数定义形式如下:BOOLSetTic(intnTic);6.ClearTics函数.清除所有的刻度,函数定义形式如下:voidClearTics(BOOLbRedraw=FALSE).1Slider控件的使用Slider的常用属性设置函数:1.GetRange,SetRange函数.查询和设置滑动条的取值范围,默认为0—100.函数定义形式如下:voidGetRange(int&nMin,int&nMax)eonst;voidSetRange(intnMin,intnMax,BOOLbRe—drGETaw=FALSE);2.GetPos,SetPos函数.查询和设置滑动条的当______________________收稿日期:2007—04—2O;修订日期:2007—06—092在工具栏上添加Slider控件1.创建AppWizard工程文件设为Slider,在第一步中选Singledocument,其余选项均取默认值.2.打开资源编辑器,选择工具条,在工具条中增加一个按钮,设置按钮ID为ID_MYSLIDER_BAR,作者简介:宋素荣(1972一),女,河南郑州人,郑州市科技中专讲师,主要从事VB,VC,JAVA等编程方面的研究

70华北水利水电学院学报2007年8月移动该按钮以使按钮处于适当的位置.3.为Slider控件添加标识号,名称为IDC_SUO-FANG—BILI,数值(Value)取默认值.4.从面向对象的思想出发,一个工具条作为一个整体,封装为一个类,组合框控件应该作为这个类的一个成员变量,因此生成一个以CToolBar为基类的的新类CMyToolBar.这可以用VC的类向导(ClassWizard)来实现,先生成一个以CToolBarCtrl为基类的新类CMyToolBar,然后在文件编辑器中打开MyToolBar.h和MyToolBar.cpp文件,把CMyToolBar基类改为CToolBar.之所以有这番周折,是因为类向导不支持以CToolBar为基类生成新类.从CToolBar派生出一个新类CMyToolBar后,在CMyToolBar类中增加一个成员变量m_MySlider,代码如下:classCMyToolBar:publicCTool'Bar{public;CSliderCtrlm_MySlider;};5.将工程文件mainframe.h中的变量m_wnd-ToolBar的基类用CMyToolBar类代替.同时在MainFrm.h得最上面一行加入#include”MyToolBar.h”代码如下:#include”MytoolBar.h”//位于最上面一行protected://controlbarembeddedmembersCStatusBarm—wndStatusBar;CMyToolBarm——wndToolBar;6.定位到CMainFrame类的OnCreate函数,在其中添加如下的代码:CRectrect;//设置组合框的宽度,四个参数依次为控件在工具条中的索引号、ID号、风格、宽度m_wndToolBar.SetButtonlnfo(11,ID—MYSLIDER_BAR,TBBS_SEPARATOR,150);//得到组合框的位置m_wndToolBar.GetItemRect(11,&rect);//创建组合框,四个参数依次为窗口风格、组合框位置、父窗口、ID号if(!m—wndToolBar.m—MySlider.Create(TBS_HORZIWS_VISIBLEITBS_TOP,rect,&m_wndToo1-Bar,IDC_SUOFANG_BILI))return一1;m_wndToolBar.m_geMin(1);//设置控件的最小值m_wndToolBar.m_MySlider.SetRangeMax/(20);//设置控件的最大值m_wndToolBar.m_MySlider.SetPos(10);//设置控件滑块的初始位置.编译并运行该应用,就会发现工具条中多了一个Slider控件.同理,还可以添加其他控件组合框、编辑框、进度条甚至是Picture控件等.要做的就是在CmyToo1-Bar中增加CComboBox,CEdit,CProgressCtrl等类的实例,并且在CMainFrame类的OnCreate中添加这些实例的初始化工作.3视图缩放功能的实现方法仅仅产生组合框是不够的,必须实现组合框的消息响应函数,才能方便地运用组合框.在VC++中,消息响应函数通常都是用类向导来实现.为了实现视图的缩放功能,必须添加CSliderCtrl类WM_HSCROLL消息的响应函数:1.打开MFCClassWizard对话框,在ClassName中选中CMyToolBar类,添加WM—HSCROLL消息响应函数.由于Slider控件的WM—HSCROLL消息是发往其父类的,所以只能在CMyToolBar类中,响应WM_HSCROLL消息;如果将消息响应函数加在视图类,程序会认为该函数是响应视图窗口类的滚动条消息,从而不能正确的响应Slider控件的滑动.2.为将控件的滑块位置坐标传给视图类,可通过在视图类的函数中加入如下的代码://获取指向主框架的指针CMainFrame*pFrame=(CMainFrame$)CWnd::GetParentFrame();//取得控件的滑块的位置信息,付给变量m_Sfbl作为视图的放大缩小比例doublem_Sfbl=pFrame一>m_wndToolBar.m_SuoFang_BiL1.GetPos();其中,m—Sfbl为视图类的double型成员变量,用来控制缩放比例.3.在CMyToolBar类的的WM—HSCROLL消息响应函数中,添加如下的代码:AfxGetMainWnd()一>Invalidate(false);这样,当滑动工具栏上控件的滑块时,程序就会执行相应的消息响应函数更新视图,视图在更新之前根据滑块的位置坐标信息确定缩放比例.至此,已经成功地在工具栏中加入了滑块控件,并实现了对视图的缩放.

第28卷第4期宋素荣:在VC++工具栏中添加Slider控件实现视图实时缩放714结语参考文献[1]侯俊杰.深入浅出MFC[M].武汉:华中科技大学出版社.2001.[2]周明扬.VISUAL&NBSPC++界面编程技术[M].北京:北京希望电子出版社,2003.[3]PETERNORTON.ROBMCGREGOR.MFC开发Windows95/NT4应用程序[M].北京:清华大学出版社,1998.利用vc的资源编辑器,可视化地确定Slider控件在工具条中的位置,然后把Slider控件作为工具条的子窗口创建,基于这种思想,可以很方便地在工具条中加入其它控件.但必须注意,不同的控件,相应的消息响应函数的实现方法也不相同.RealizationViewZoominginandoutbyAddingSliderControlsintoVC++ToolbarSONGSu—rong(ZhengzhouScience&TechnologySecondarySchool,Zhengzhou450011,China)Abstract:TheSlidercontrols’slidingcancontrolthesmoothnessoftheviewzoominginandoutanditsrangecancontrolthescopeofthezooming.BythemessagemapofVC++.Slidercontrolcanworkwiththevieweasilyviausingsomenessaryfunction.CombiningVC++.it’Seasytocontrolthezoomingofviewbyslidercontro1.Thismethodismoreintuitionisticandandcontinuousthanthesingle“zoomout”and“zoomin”button.itismoresuitabletousers.Thesimilarideascanbeusedinothercontactsu~aces.Keywords:toolbar;Slidercontrols;viewzoominginandout