65.9K
CodeProject 正在变化。 阅读更多。
Home

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

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.95/5 (12投票s)

2002 年 2 月 20 日

2分钟阅读

viewsIcon

260376

downloadIcon

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 自动完成的。是不是很棒?

如果你愿意,你可以下载示例项目,它执行与上述相同的操作。

许可证

本文未附加明确的许可证,但可能在文章文本或下载文件本身中包含使用条款。如有疑问,请通过下面的讨论区联系作者。

作者可能使用的许可证列表可以在此处找到。

© . All rights reserved.