在收到需求之前,程序的进度显示方案是在状态栏中建立一个进度条控件。该进度条只具有显示仿真进度的功能。
新的需求要求进度条控件能够拖动以控制仿真进度。
根据新的需求,制定更改方案1:
方案1
在进度条控件建立的类(CMainFrame类)框架类中添加滑块拖动的消息相应函数(OnHScroll函数),加入函数后发现滑块拖动后,函数并没有响应。原因在于该进度条控件(m_slider)是在状态栏m_wndMenuBar上建立的,也就是m_slider的父窗口。
// 创建滑动条控制 控件
m_slider.Create(WS_VISIBLE | TBS_AUTOTICKS | TBS_ENABLESELRANGE ,CRect(450,2,650,23), &m_wndMenuBar, ID_SliderControl);
m_slider.SetRange(0,500);
所以m_slider控件拖动事件发生后,拖动消息应该由状态栏相应,而不是框架类。但是程序中并没有状态栏类,无法对该事件进行响应。而且进度条控件放置在状态栏中确实看上去不合适,也不专业。
方案1行不通,在网上看到一篇文章《在VC++工具栏中添加Slider控件实现视图实时缩放》,觉得这个思路可以。所以指定方案2:
方案2
从面向对象的思想出发,以一个工具条(toolbar)作为一个整体,封装一个类,进度条控件作为这个类的一个成员变量。在框架类中对封装的类进行实例化,进而实现进度条的功能。该方案貌似可以。
开干,因为在原程序框架中,原生的工具栏类是CMFCToolBar类,所以我们可以从该类派生出一个新类CMyToolBar。
生成新类过程如下:
(1) 首先在设计窗口中新建一个工具栏(IDR_TOOLBAR1),并在工具栏中新建一个按钮(ID_Slider_ToolBar)。
(2) 打开类向导
(3) 利用类向导添加以CMFCToolBar类为基类的CMyToolBar
单击完成后,会生成两个文件MyToolBar.cpp和MyToolBar.h文件。
(4) 在MainFrm.h文件中添加新类的引用,并新建CMyToolBar类的对象
(5) 在MyToolBar.h中新建CSliderCtrl变量用来实现进度条控件的建立
CSliderCtrl &