VC++/MFC更新状态栏窗格的文本,设置状态栏的文本

来源:互联网 发布:百度卫士软件怎么样 编辑:程序博客网 时间:2024/05/16 11:52

本文仅仅针对MFC文档。

1、静态设置状态栏文本

静态设置,这里是指相对静止显示,也就是相应的按钮以及目录触发时提示在状态栏的文本。

比如新建的目录和工具栏的按钮的文本提示。下面图片里面的框选的三处就是静态显示文本相关的。

这个设置比较简单了。操作如下:

打开资源视图->打开String table-> 双击String table,然后下拉到最下面,添加一个ID,对应刚才添加的目录和按钮的ID,然后补充文本,就ok了。

上面图路面的框选处就是静态设置的文本了,只要在程序运行的时候,鼠标移动到添加的目录和按钮上面的时候,自然就在状态栏显示文本了。

上面说的静态的情况了,但是如果我要动态的设置,怎么办?也很简单。

 

2、动态设置状态栏文本

首先,在class CMainFrame里面,有成员CStatusBar        m_wndStatusBar,这个是系统创建的时候设定的。

接着,在CMainFrame里面添加成员函数,public属性:

    CStatusBar *MainFrameGetStBar()    {        return &m_wndStatusBar;    }

然后,在class CSaleRecordView : public CListView里面添加成员,这个view就是视图了,用来:

CStatusBar  *m_status_bar;

添加一个成员函数,用来设置状态栏的文本显示的。

    void SaleSetStatusBarText(CString in)    {        m_status_bar->SetPaneText(0, in);    }

然后,初始化m_status_bar,就用到了我们在Mainframe类里面刚才添加的MainFrameGetStBar。

void CSaleRecordView::OnInitialUpdate(){    CListView::OnInitialUpdate();    // TODO: You may populate your ListView with items by directly accessing    //  its list control through a call to GetListCtrl().    m_status_bar = ((CMainFrame*)AfxGetMainWnd())->MainFrameGetStBar();}

最后,需要试用功能行不行了,我们给CSaleRecordView重写一个基类函数,就是单击事件:

我们实现对应的功能:

void CSaleRecordView::OnNMClick(NMHDR *pNMHDR, LRESULT *pResult){    LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR);    // TODO: Add your control notification handler code here    SaleSetStatusBarText("chifanla...");    *pResult = 0;}

这里,调用了我前面实现的SaleSetStatusBarText函数。

来看一下效果:

最后,要说明一点,
m_status_bar = ((CMainFrame*)AfxGetMainWnd())->MainFrameGetStBar();

一定要放在OnInitialUpdate()里面,不可以放在CSaleRecordView的构造函数里面,因为View是在Frame之前构造的。