首先在VS环境下新建一个MFC的Ribbon风格的项目,在CMainFrame::OnCreate()中的状态栏创建位置添加如下代码:
m_wndStatusBar.AddElement(newCMFCRibbonStatusBarPane(ID_STATUSBAR_PANE1, strTitlePane1,TRUE), strTitlePane1); progress = new CMFCRibbonProgressBar(113); m_wndStatusBar.AddElement(progress, _T("进度条")); |
即实现了进度条创建。但是比较不完善。
第一是我希望界面能在需要的时候显示和隐藏进度条,但是发现这样创建的进度条始终无法立即隐藏。创建隐藏按钮,响应的实现代码如下:
CMainFrame* pMain = (CMainFrame*)AfxGetMainWnd(); pMain->progress->SetVisible(FALSE); pMain->progress->Redraw(); pMain->m_wndStatusBar.RedrawWindow(); pMain->RedrawWindow(); |
即使让整个界面重绘,进度条也没法立即隐藏,而是需要进行一次向下还原或者最大化以后才能成功。
第二,进度条宽度没办法随界面变化。我的需求是除了状态栏左边和右边,其余都设置成进度条位置,虽然CMFCRibbonProgressBar的构造函数有宽度的设置,但是必须让状态栏CMFCRibbonStatusBar的其他面板绘制之后,才能计算进度条宽度并加入进度条。但这种办法在窗口最大化的时候才有效,如果是界面一开始是小窗口,这种办法就失效了。