MFC对话框中添加状态栏


1.在对话框的dlg实现类里添加成员变量:

CXTPStatusBar m_wndStatusBar; //状态栏(或者是CStatusBar)
在OnInitDialog方法中初始化:
static UINT indicators[] =
{
ID_SEPARATOR,           // status line indicator
ID_INDICATOR_CAPS,
ID_INDICATOR_NUM,
ID_INDICATOR_SCRL,
};

//添加状态栏
if (!m_wndStatusBar.Create(this) ||
!m_wndStatusBar.SetIndicators(indicators,
sizeof(indicators)/sizeof(UINT)))
{
TRACE0(“Failed to create status barn”);
return -1;      // fail to create
}
 

2.添加OnKickIdle事件(在对话框的dlg的头文件加上)

afx_msg LRESULT OnKickIdle(WPARAM, LPARAM);
afx_msg void OnUpdateKeyIndicator(CCmdUI* pCmdUI);

DECLARE_MESSAGE_MAP()
 3.在实现类中添加对应的两个方法:

LRESULT CDialogPanesDlg::OnKickIdle(WPARAM, LPARAM)
{
m_wndStatusBar.SendMessage(WM_IDLEUPDATECMDUI, TRUE);
return 0;
}

void CDialogPanesDlg::OnUpdateKeyIndicator(CCmdUI* pCmdUI)
{
UINT nVK;
UINT flag = 0×0001;

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:
TRACE1(“Warning: OnUpdateKeyIndicator – unknown indicator 0x%04X.n”,
pCmdUI->m_nID);
pCmdUI->ContinueRouting();
return; // not for us
}

pCmdUI->Enable(::GetKeyState(nVK) & flag);
// enable static text based on toggled key state
ASSERT(pCmdUI->m_bEnableChanged);
}


4.运行发现看不见状态栏,添加对话框的WM_SIZE事件:


void CDialogPanesDlg::OnSize(UINT nType, int cx, int cy)
{
CDialog::OnSize(nType, cx, cy);

// TODO: Add your message handler code here
CRect rcClient(0, 0, cx, cy);
RepositionBars(0, 0xffff, AFX_IDW_PANE_FIRST, 0, 0, &rcClient);

RepositionBars(0, 0xffff, AFX_IDW_PANE_FIRST, reposQuery, &rcClient, &rcClient);
}

豫ICP备12024565号-1   E-mail:admin@hlc8.com