本文仅仅针对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之前构造的。