状态栏的消息显示,MSDN里面有三种方式
- 用***UPDATE_COMMAND_UI*** 与***SetText***在状态栏插入消息,显示时间消息
class CMainFrame : public CFrameWnd
{
public:
	CMainFrame() noexcept;
protected: 
	DECLARE_DYNAMIC(CMainFrame)
// 重写
public:
	virtual BOOL PreCreateWindow(CREATESTRUCT& cs);
	virtual BOOL OnCmdMsg(UINT nID, int nCode, void* pExtra, AFX_CMDHANDLERINFO* pHandlerInfo);
// 实现
public:
	virtual ~CMainFrame();
#ifdef _DEBUG
	virtual void AssertValid() const;
	virtual void Dump(CDumpContext& dc) const;
#endif
protected:  // 控件条嵌入成员
	CToolBar          m_wndToolBar;
	CStatusBar        m_wndStatusBar;//状态栏对象
	CChildView		  m_wndView;
// 生成的消息映射函数
    ···
}
因为状态栏对象m_wndStatusBar是包含在CMainFrame类中,所以要修改状态栏消息需要在CMainFrame类中添加OnUpdateViewStatusBar消息
afx_msg void OnUpdateViewStatusBar(CCmdUI* pCmdUI);
- 步骤1 鼠标右键单机CMainFrame
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dvUiCWH3-1643294965129)(https://raw.githubusercontent.com/konalo-x/pic/master/pic/202201272204100.png)]
- 步骤2 ID_VIEW_STATUS_BAR下面选择UPDATE_COMMAND_UI生成OnUpdateViewStatusBar函数,同时vs2022会自动将之加入消息映射

BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
	ON_WM_CREATE()
	ON_WM_SETFOCUS()
	ON_UPDATE_COMMAND_UI(ID_INDICATOR_STR, &CMainFrame::OnUpdateViewStatusBar)//vs2022 自动添加代码
	//ON_UPDATE_COMMAND_UI(ID_INDICATOR_TIME, &CMainFrame::OnUpdateTimeStatusBar)
	ON_WM_TIMER()
	ON_WM_CLOSE()
	ON_COMMAND(ID_FORMAT_FONT, &CMainFrame::OnFormatFont)
END_MESSAGE_MAP()
static UINT indicators[] =
{
	ID_SEPARATOR,           // 状态行指示器
	ID_INDICATOR_CAPS,
	ID_INDICATOR_NUM,
	ID_INDICATOR_SCRL,
	ID_INDICATOR_TIME,		//用来显示时间的ID标识
	ID_INDICATOR_STR		//用来显示 行和列 的ID标识
};
 补充代码如下
void CMainFrame::OnUpdateViewStatusBar(CCmdUI* pCmdUI)
{
	// TODO: 在此添加命令更新用户界面处理程序代码
	CString string;
    //获取CEdit里面文本的行和列,仿照记事本
	string.Format(_T("行 %d 列 %d"), m_wndView.m_wndEdit.GetLineCount(), m_wndView.m_wndEdit.LineLength());
	pCmdUI->SetText(string);
}
 前面MESSAGEMAP里面写明了 ID_INDICATOR_STR 对应OnUpdateViewStatusBar
ON_UPDATE_COMMAND_UI(ID_INDICATOR_STR, &CMainFrame::OnUpdateViewStatusBar)

-  用 SetPaneText显示时间- 在OnCreate里面设置定时器
 int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) { SetTimer(1, 1000, NULL);//在里面安装定时器,并将其时间间隔设为1000毫秒 ... }- 在OnTimer里面设置显示时间
 void CMainFrame::OnTimer(UINT_PTR nIDEvent) { // TODO: 在此添加消息处理程序代码和/或调用默认值 CTime time; time = CTime::GetCurrentTime();//得到当前时间 CString s_time = time.Format("%H:%M:%S");//转换时间格式 m_wndStatusBar.SetPaneText(4, s_time);// 4 代表 第四个数组元素 ID_INDICATOR_TIME CFrameWnd::OnTimer(nIDEvent); }- 在OnClose里面关闭计时器
 void CMainFrame::OnClose() { // TODO: 在此添加消息处理程序代码和/或调用默认值 KillTimer(1); CFrameWnd::OnClose(); }
- 在










