状态栏 – 在 MFC 中使用起来非常简单






4.95/5 (12投票s)
2002 年 2 月 20 日
2分钟阅读

260376

2216
如何使用 MFC 将自己的文本添加到状态栏控件
引言
我刚刚查看了 MSDN 上关于 CStatusBar
的文章,令我惊讶的是,我发现它非常容易使用。
首先,状态栏包含几个“窗格”。每个窗格是状态栏的一个矩形区域,你可以用来显示信息。如你所知,许多应用程序在最右侧的窗格中显示 CAPS、NUM LOCK 和其他键的状态。这些窗格默认情况下都有一个 3D 边框。最左侧的窗格(窗格 0),有时称为“消息窗格”,具有 BPS_NOBORDERS
样式,因此周围没有任何边框。此窗格通常用于显示一个 string
,解释当前选定的菜单项或工具栏按钮。此外,默认情况下,“消息窗格”是“弹性的”:它占据状态栏中其他指示器窗格未使用的区域,以便其他窗格始终右对齐。
要添加一个自定义窗格以在状态栏上显示你自己的消息,只需执行以下 6 个步骤。在本例中,我们将在状态栏的最右侧位置显示当前时间。它将每 60 秒更新一次。
首先,在你的 string
表中添加一个 ID 为 ID_INDICATOR_TIME
且标题为 '%5s “
的新条目。额外的空格是为了在窗格中给你留出更多的空间,这样文本就不会被截断。
其次,将 ID_INDICATOR_TIME
附加到 MainFrm.cpp 文件中的 indicators[]
数组的末尾(以便它作为状态栏上的最右侧项目出现)。
第三,在 mainfrm.h 中的消息映射中,添加以下内容
afx_msg void OnUpdateTimeIndicator(CcmdUI *pCmdUI);
第四,在 MainFrm.cpp 中,添加宏调用
ON_UPDATE_COMMAND_UI ( ID_INDICATOR_TIME,OnUpdateTimeIndicator)
第五,在 MainFrm.cpp 中,创建函数体
void CMainFrame::OnUpdateTimeIndicator(CCmdUI *pCmdUI)
{
CString strStatus;
strStatus.Format(ID_INDICATOR_TIME, time);
m_wndStatusBar.SetPaneText(
m_wndStatusBar.CommandToIndex(ID_INDICATOR_TIME),
strStatus );
}
最后,每 60 秒更新一次时间变量
#define TIME_STATUSBAR 1
class CMainFrame : public CFrameWnd
{
……
private:
char time[7];
…..
}
void CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
……
SetTimer(TIME_STATUSBAR, 60000, NULL);
Memset(time, ‘\0’, 7);
……
}
void CMainFrame::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default
if ( nIDEvent == TIME_STATUSBAR )
{
char tempchar[20];
_strtime(tempchar); // get current time
strncpy(time, tempchar, 5); // extract only hour and minute info
}
CFrameWnd::OnTimer(nIDEvent);
}
这里的诀窍是,每当时间变量发生变化时,显示将在下一个空闲循环期间发生变化。这是 MFC 自动完成的。是不是很棒?
如果你愿意,你可以下载示例项目,它执行与上述相同的操作。
许可证
本文未附加明确的许可证,但可能在文章文本或下载文件本身中包含使用条款。如有疑问,请通过下面的讨论区联系作者。
作者可能使用的许可证列表可以在此处找到。