MFC进度条控件CProgressCtrl实现进度滚动效果
2015-11-07 22:11
1196 查看
关于CProgressCtrl 控件的基本操作网上有很多资料,可我想实现进度条中进度滚动效果,即很多时候程序出现的等待或启动画面,如下图:
![](https://img-blog.csdn.net/20151107215103302?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
在网上搜索半天发现了了这个方法:CProgressCtrl::SetMarquee(_In_ BOOL fMarqueeMode, _In_ int nInterval),第一个参数为开关,第二个参数指定滚动时间。可实际运行时发现不管作用,后来才发现在如果要使用这种效果的话必须指定PBS_MARQUEE风格,可MSDN上关于SetMarquee()成员的描述根本没提这个,只有在MSDN上win32的Progress
Bar Control Styles才发现了这个提示,看来以后得多看看win32控件说明了。
![](https://img-blog.csdn.net/20151107220402763?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
所以完全的代码应该是:m_ProgressCtl.Create(WS_CHILD|WS_VISIBLE|PBS_MARQUEE,CRect(100,200,250,230),this,11);
m_ProgressCtl.SetMarquee(TRUE, 30);
而如果使用win32的Progress Bar进度条控件PBS_MARQUEE风格的话还需要指定程序使用的ComCtl32库的版本必须为6.0或以上,因为这个控件库会随着Internet
Explorer发布,所以当前活动的ComCtl32版本很可能与操作系统的版本不一样,所以我们应该手动指定程序使用的ComCtl32版本:
#if defined _M_IX86
#pragma comment(linker, "/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='x86' publicKeyToken='6595b64144ccf1df' language='*'\"")
#elif defined _M_IA64
#pragma comment(linker, "/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='ia64' publicKeyToken='6595b64144ccf1df' language='*'\"")
#elif defined _M_X64
#pragma comment(linker, "/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='amd64' publicKeyToken='6595b64144ccf1df' language='*'\"")
#else
#pragma comment(linker, "/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"")
#endif我们在创建MFC项目的时候会看到有一个“Common control manifest”选项,如果我们去掉选择它的话会发现程序的一些控件都是一些老式风格,这其实就是使用了低版本的ComCtl32库,所以在win32中,如果想要控件风格为新的系统风格那么应该指定使用的ComCtl32版本。
win32控件一览:https://msdn.microsoft.com/en-us/library/bb773169(v=vs.85).aspx
在网上搜索半天发现了了这个方法:CProgressCtrl::SetMarquee(_In_ BOOL fMarqueeMode, _In_ int nInterval),第一个参数为开关,第二个参数指定滚动时间。可实际运行时发现不管作用,后来才发现在如果要使用这种效果的话必须指定PBS_MARQUEE风格,可MSDN上关于SetMarquee()成员的描述根本没提这个,只有在MSDN上win32的Progress
Bar Control Styles才发现了这个提示,看来以后得多看看win32控件说明了。
所以完全的代码应该是:m_ProgressCtl.Create(WS_CHILD|WS_VISIBLE|PBS_MARQUEE,CRect(100,200,250,230),this,11);
m_ProgressCtl.SetMarquee(TRUE, 30);
而如果使用win32的Progress Bar进度条控件PBS_MARQUEE风格的话还需要指定程序使用的ComCtl32库的版本必须为6.0或以上,因为这个控件库会随着Internet
Explorer发布,所以当前活动的ComCtl32版本很可能与操作系统的版本不一样,所以我们应该手动指定程序使用的ComCtl32版本:
#if defined _M_IX86
#pragma comment(linker, "/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='x86' publicKeyToken='6595b64144ccf1df' language='*'\"")
#elif defined _M_IA64
#pragma comment(linker, "/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='ia64' publicKeyToken='6595b64144ccf1df' language='*'\"")
#elif defined _M_X64
#pragma comment(linker, "/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='amd64' publicKeyToken='6595b64144ccf1df' language='*'\"")
#else
#pragma comment(linker, "/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"")
#endif我们在创建MFC项目的时候会看到有一个“Common control manifest”选项,如果我们去掉选择它的话会发现程序的一些控件都是一些老式风格,这其实就是使用了低版本的ComCtl32库,所以在win32中,如果想要控件风格为新的系统风格那么应该指定使用的ComCtl32版本。
win32控件一览:https://msdn.microsoft.com/en-us/library/bb773169(v=vs.85).aspx
相关文章推荐
- Visual C++中MFC消息的分类
- MFC中Radio Button的用法详解
- MFC对话框中添加状态栏的方法
- MFC创建右键弹出菜单的方法
- MFC中动态创建控件以及事件响应实现方法
- C++ 关于MFC多线程编程的注意事项
- MFC程序对文件的处理方法
- MFC自定义消息的实现方法
- MFC实现在文件尾追加数据的方法
- MFC之ComboBox控件用法实例教程
- MFC绘制不规则窗体的方法
- IE8引发 VS2005/2008 MFC向导出错的解决方案
- MFC实现全屏功能代码实例
- 使用VS2010创建MFC ActiveX工程项目
- C++中MFC Tab Control控件的使用详解
- MFC程序设计常用技巧汇总
- MFC扩展DLL中导出类和对话框的实现方法
- VC中SDK与MFC的区别浅析
- 浅谈MFC 改变控件大小和位置
- VC MFC非模态对话框的实现方法