您的位置:首页 > 其它

MFC对话框CDialog中使用CStatusBar状态栏

2011-01-03 11:24 405 查看
在MFC的通用对话框中使用状态栏,只需要在对话框成员中增加一个CStatusBar类型的成员变量,然后在OnInitDialog函数中添加如下代码:

CRect rect;
GetClientRect(rect);
static UINT indicators[]={
ID_SEPARATOR
};
if(!m_wndStatusBar.Create(this)|| !m_wndStatusBar.SetIndicators(indicators,sizeof(indicators)/sizeof(UINT)))
{
TRACE0("Can't create status bar/n");
return false;
}
m_wndStatusBar.MoveWindow(0,rect.bottom-20,rect.right,20);// 调整状态栏的位置和大小


如果需要添加项目,只需要在indicators数组中添加ID即可,需要注意的是:为了避免与程序中菜单项或其它项目ID重复,最好在资源中添加一个STRINGTABLE,并在STRINGTABLE中添加字符串ID,以保证ID的唯一性。

如果需要在状态栏上显示大小写、数字状态,需要在indicators数组中加上ID_INDICATOR_CAPS、ID_INDICATOR_NUM,只使用如上的方法,你将发现状态栏上始终为大写、数字状态。若要正常显示,则还需要如下操作:

1. 声明一个OnUpdateKeyIndicator函数来响应UPDATE_CMDUI消息,函数如下:

void CMFCDlg::OnUpdateKeyIndicator(CCmdUI* pCmdUI)
{
UINT nVK;
switch (pCmdUI->m_nID) {
case ID_INDICATOR_CAPS:
nVK = VK_CAPITAL;
break;
case ID_INDICATOR_NUM:
nVK = VK_NUMLOCK;
break;
case ID_INDICATOR_SCRL:
nVK = VK_SCROLL;
break;
default:
TRACE(_T("Warning: OnUpdateKeyIndicator - unknown indicator 0x%04X/n"), pCmdUI->m_nID);
pCmdUI->ContinueRouting();
return;
}
pCmdUI->Enable(::GetKeyState(nVK) & 1);
ASSERT(pCmdUI->m_bEnableChanged);
}


2. 将函数与消息关联起来,在消息地图中添加如下响应:

ON_UPDATE_COMMAND_UI(ID_INDICATOR_CAPS, &CMFCDlg::OnUpdateKeyIndicator)

ON_UPDATE_COMMAND_UI(ID_INDICATOR_NUM, &CMFCDlg::OnUpdateKeyIndicator)

3. 在需要更新的时候调用CStatusBar成员的OnUpdateCmdUI函数。如果不确定什么时候更新,用TIMER也可以勉强接受。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: