这篇文章主要介绍了MFC对话框中添加状态栏的方法,实例分析了MFC对话框添加状态栏所涉及的相关成员变量与事件实现技巧,需要的朋友可以参考下
本文实例讲述了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 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 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);
- }
希望本文所述对大家的MFC程序设计有所帮助。
新闻热点
疑难解答