1、The Status Bar Definition
![indicator鍚勯」ID瀵瑰簲鍏崇郴](http://blog.51cto.com/attachment/200804/200804111207921600515.bmp)
indicator的各项ID与状态栏的对应关系如上图所示。
2、The Message Line
在一个view类里面访问状态栏的方法:先得到Application Object,然后到达the main frame window。具体代码如下:
CMainFrame* pFrame = (CMainFrame*) AfxGetApp()->m_pMainWnd;
CStatusBar* pStatus = &pFrame->m_wndStatusBar;
pStatus->SetPaneText(0, "message line for first pane");
CStatusBar* pStatus = &pFrame->m_wndStatusBar;
pStatus->SetPaneText(0, "message line for first pane");
3、The Status Indicator
一个indicator pane对应一个resource-supplied string,而这个string与一个update command UI message handle function组成一个Message Map项。这样,indicator pane就可以实现显示或者灰掉。例如:
ON_UPDATE_COMMAND_UI(ID_INDICATOR_CAPS, OnUpdateKeyCapsLock)
void CMainFrame::OnUpdateKeyCapsLock(CCmdUI* pCmdUI)
{
pCmdUI->Enable(::GetKeyState(VK_CAPITAL) & 1);
}
void CMainFrame::OnUpdateKeyCapsLock(CCmdUI* pCmdUI)
{
pCmdUI->Enable(::GetKeyState(VK_CAPITAL) & 1);
}
与状态栏对应的所有update command UI message handle function在Idle进程被调用,这样使得状态栏好像是“实时”的。
4、Taking Control of the Status Bar
有两个方面要做。
第一:添加一个ID_MY_STATUS_BAR常量(用resource symbol editor),并改写MainFrm.cpp中的m_wndStatus.Create(this)为m_wndStatus.Create(this, WS_CHILD|WS_VISIBLE|CBRS_BOTTOM, ID_MY_STATUS_BAR )。m_wndStatus.Create()的第三个参数默认为AFX_IDW_STATUS_BAR。
第二:标准application framework的view菜单中允许用户开启或关闭状态栏,需要在CMainFrame内添加该菜单的Message Map。