在对话框中添加状态条
介绍
在c++论坛里,有人曾问怎样在对话框中加状态条,我愚蠢地答复,他只要在dialog类中加CstatusBar成员m_bar,然后在OnInitDialog()中调用m_bar.Create()就行了。然后有人继续跟帖,这样并不凑效,我就亲自试了一下,果不料不行。无论如何,我认为这不是个太复杂的任务。因此我写了这篇关于在Dialog中添加StatusBar的小文章。在MSDN的范例中有这样的例子,但它是通过CstatusBar继承而来的,并适用于做一些复杂的事,这对于通常的状态条来说并不是必须的。
八个简单的步骤
步骤1
我先假定你有个基于MFC应用程序的对话框准备用于解释本篇中要讲述的问题。从View菜单中选择Resource Symbols,并增加两个新的符号,ID_INDICATOR_NISH 和 ID_INDICATOR_TIME.你可以使用vs 6建议的默认值,但有时可能建议的值先前已定义,在此时,你就必须手动修改它。我认为这是必须的。我想知道这是不是个已知的Bug.
步骤2
打开你的String Table,并在此添加两个入口- ID_INDICATOR_NISH 和 ID_INDICATOR_TIME.设置一些默认值,这些值可以任意设置。这实际上没多大关系。
步骤3
在主dialog类中增加数据成员CstatusBar:
CstatusBar m_bar;
步骤4
打开相应的cpp文件,并在其顶部加下面的代码:
static UINT BASED_CODE indicators[] =
{ ID_INDICATOR_NISH, ID_INDICATOR_TIME};步骤5
现在我们要做的就是创建Statusbar,在Cdialog继承类的函数
m_bar.Create(this); //We create the status bar
m_bar.SetIndicators(indicators,2); //Set the number of panes
CRect rect;GetClientRect(&rect);//Size the two panesm_bar.SetPaneInfo(0,ID_INDICATOR_NISH,
SBPS_NORMAL,rect.Width()-100);
m_bar.SetPaneInfo(1,ID_INDICATOR_TIME,SBPS_STRETCH ,0);
//This is where we actually draw it on the screenRepositionBars(AFX_IDW_CONTROLBAR_FIRST,AFX_IDW_CONTROLBAR_LAST, ID_INDICATOR_TIME);
步骤6-背景色
在步骤5末,我们实际上在屏幕上已经有了个状态条。两个窗格中显示在String Table中设定的值。但现在如果想改变背景色,以下就是完全可选的。你可在OnInitDialog()中添加一行代码
m_bar.GetStatusBarCtrl().SetBKColor(RGB(180,180,180));
注意我们必须获取潜在的Statusbar控件去调用SetBKColor函数。
步骤7-添加时钟
假设,你想在右边的方格中显示当前的时间,首先,设置时钟,这个可通过在OnInitDialog()中添加下行代码:
SetTimer(100,1000,NULL);
现在在WM_TIMER消息句柄中添加以下代码:
void CDlgStatusBarDlg::OnTimer(UINT nIDEvent)
{if(nIDEvent==100)
{ CTime t1; t1=CTime::GetCurrentTime();m_bar.SetPaneText(1,t1.Format("%H:%M:%S"));
} CDialog::OnTimer(nIDEvent);}步骤8 –显示x和 y坐标
假设在你的对话框中移动鼠标时显示鼠标的x,y坐标。你所需要做的是重写OnMouseMove
void CDlgStatusBarDlg::OnMouseMove(UINT nFlags, CPoint point)
{ CString s;s.Format("X=%d Y=%d",point.x,point.y);
m_bar.SetPaneText(0,s);
CDialog::OnMouseMove(nFlags, point);}
本文围绕在对话框中添加状态条展开。作者起初给出简单答复但不奏效,遂撰写此文。详细介绍了八个步骤,包括增加符号、在String Table添加入口、在主dialog类增加数据成员、创建Statusbar等,还提及改变背景色及显示鼠标坐标的方法。
3839

被折叠的 条评论
为什么被折叠?



