9.5创建进度条
MFC中,有一个CProgressCtrl的类,如果要创建一个进度条,首先需要创建一个CProgressCtrl类的对象,然后调用Create成员函数来创建。MSDN中给出了一个相关的实例程序:
1 CProgressCtrl myCtrl;
2 // Create a smooth child progress control.
3 myCtrl.Create(WS_CHILD|WS_VISIBLE|PBS_SMOOTH, CRect(10,10,200,30),
4 pParentWnd, 1);
如何要在状态栏中创建一个进度条?
状态栏属于框架类,在状态栏中创建进度条,首先同样需要获取创建的区域。这之前需要String表中添加进度条的字串。然后将字串ID添加到
1 static UINT indicators[] =
2 {
3 ID_SEPARATOR, // status line indicator
4 ID_INDICATOR_CAPS,
5 ID_INDICATOR_NUM,
6 ID_INDICATOR_SCRL,
7 IDS_PROGRESS,//用来显示进度条区域
8 };
为了获取进度条所处于的区域,可以调用GetItemRect函数。
void GetItemRect(index,LPRECT lprect) const;其中第一个参数为状态栏中网格的在indicators[]中的索引号。由于OnCreate函数实际上是响应的WM_ OnCreate函数,只有在这个函数完成之后才能获取到状态栏的矩形区域。因此需要在此处添加一个消息响应函数,等窗口创建完成之后,发送生成进度条消息。
MFC的每个标准消息都有一个消息编号,要创新一个新的消息,首先要创建消息编号。
1、 在Frame的头文件中添加一个消息标识宏#define UM_PROGRESS WM_USER+1;
2、 按照标准消息的格式和流程,分别在头文件和源文件中添加消息映射
头文件:
1 //{{AFX_MSG(CMainFrame)
2 afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
3 afx_msg void OnTimer(UINT nIDEvent);
4 afx_msg void OnPaint();
5 afx_msg void OnProgress();//消息
6 //}}AFX_MSG
源文件:
1 //{{AFX_MSG_MAP(CMainFrame)
2 ON_WM_CREATE()
3 ON_WM_TIMER()
4 ON_WM_PAINT()
5 ON_MESSAGE(UM_PROGRESS,OnProgress) //消息
6 //}}AFX_MSG_MAP