本文实例讲述了MFC对话框中添加状态栏的方法。分享给大家供大家参考。具体如下:
1.在对话框的dlg实现类里添加成员变量:
CXTPStatusBar m_wndStatusBar; //状态栏(或者是CStatusBar)//在OnInitDialog方法中初始化:static UINT indicators[] ={ID_SEPARATOR, // status line indicatorID_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 bar/n");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 stateASSERT(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 hereCRect 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);}
希望本文所述对大家的MFC程序设计有所帮助。
新闻热点
疑难解答
图片精选