在对话框中添加状态条

在对话框中添加状态条

介绍

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 panes
m_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 screen
RepositionBars(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);
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值