本文僅僅針對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之前構造的。