Here is how to add the current time to your status bar...
Step 1:
Derive a CMyStatusBar class from CStatusBar as follows:
//MyStatusBar.h:
//==============
class CMyStatusBar : public CStatusBar {
DECLARE_DYNCREATE(CMyStatusBar)
public:
CMyStatusBar();
~CMyStatusBar();
private:
CString m_strClockFormat;
public:
void SetClockFormat(LPCTSTR strClockFormat);
// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CMyStatusBar)
//}}AFX_VIRTUAL
// Generated message map functions
//{{AFX_MSG(CMyStatusBar)
afx_msg void OnDestroy();
afx_msg void OnUpdateIndicatorTime(CCmdUI* pCmdUI);
afx_msg int OnCreate( LPCREATESTRUCT lpCreateStruct );
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
/////////////////////////////////////////////////////////////////
//MyStatusBar.cpp:
//==============
#include "stdafx.h"
#include "MyStatusBar.h"
#include "Resource.h"
#ifdef _DEBUG
#undef THIS_FILE
static char BASED_CODE THIS_FILE[] = __FILE__;
#endif
IMPLEMENT_DYNCREATE(CMyStatusBar, CStatusBar)
BEGIN_MESSAGE_MAP(CMyStatusBar, CStatusBar)
ON_WM_CREATE()
ON_WM_DESTROY()
ON_UPDATE_COMMAND_UI(ID_INDICATOR_TIME, OnUpdateIndicatorTime)
END_MESSAGE_MAP()
CMyStatusBar::CMyStatusBar()
: CStatusBar()
, m_strClockFormat("%H:%M:%S")
{
}
CMyStatusBar::~CMyStatusBar() {
}
void CMyStatusBar::SetClockFormat(LPCTSTR strClockFormat) {
m_strClockFormat = strClockFormat;
}
int CMyStatusBar::OnCreate(LPCREATESTRUCT lpCreateStruct) {
// make sure time gets updated every second, even when idle
CStatusBar::OnCreate(lpCreateStruct);
SetTimer(ID_INDICATOR_TIME,1000,NULL);
return 0;
}
void CMyStatusBar::OnUpdateIndicatorTime(CCmdUI* pCmdUI) {
pCmdUI->Enable(true);
pCmdUI->SetText(CTime::GetCurrentTime().Format(m_strClockFormat));
}
void CMyStatusBar::OnDestroy() {
KillTimer(ID_INDICATOR_TIME);
ProgressDestroy();
CStatusBar::OnDestroy();
}
Step 2:
添加一个字符串资源,ID是ID_INDICATOR_TIME,值为HH:MM:SS
Step 3:
Add a new indicator pane called ID_INDICATOR_TIME to your list of indicator in your mainframe eg. this is my indicator list...
static const UINT indicators[] = {
ID_SEPARATOR, // status line indicator
ID_INDICATOR_CAPS,
ID_INDICATOR_NUM,
ID_INDICATOR_SCRL,
ID_INDICATOR_TIME, // <-- new indicator pane
};
Step 4:
Replace all existing uses of CStatusBar in your app with CMyStatusBar - in particular, the member variable in your mainframe m_wndStatusBar;