上一节中鸡啄米讲了东西栏的创建、停靠与运用,本节来解说状态栏的知识。

       状态栏简介

       状态栏相信大家正正在很众窗口中都能睹到,它总是用来显现种种状态。状态栏执行上也是一个窗口,一般分为几个窗格,每个窗格分别用来显现折柳的信歇和状态等,如菜单项和东西栏按钮的提示信歇。

       用MFC向导天生的单文档或众文档程序都会自动创建状态栏,大家可以运行下VS2010/MFC编程初学之三十四(菜单:VS2010菜单资源详解) 中创建的Example34程序,正正在结果界面中可以看到窗口底部有个状态栏,该状态栏被分为了几个窗格,分别用来显现菜单项和东西栏按钮的提示信歇及Caps Lock、Num Lock、Scroll Lock键的状态。

        当然,银河文娱有哪些网站_云顶文娱场7610_bet9九州 网站可以自定义状态栏,加入新的提示信歇或指示器。

       CStatusBar类

       MFC 为状态栏提供了CStatusBar类,封装了状态栏的属性和操作。

       下面是CStatusBar类几个浸要的成员函数:

       virtual BOOL Create(CWnd* pParentWnd, DWORD dwStyle = WS_CHILD | WS_VISIBLE | CBRS_BOTTOM, UINT nID = AFX_IDW_STATUS_BAR);

       创建一个状态栏。参数pParentWnd为状态栏父窗口的指针,参数dwStyle为状态栏的风格,除了标准的Windows风分外,它还支持:

        CBRS_TOP:位于框架窗口的顶部。

       CBRS_BOTTOM:位于框架窗口的底部。

       CBRS_NOALIGN:父窗口大小改变时状态栏不会被浸新定位。

        参数nID指定状态栏的ID。

       BOOL SetIndicators(const UINT* lpIDArray, int nIDCount);

        为每个指示器设置显现文本,举座来说,就是用lpIDArray数组中的对应元素为每个指示器设置一个ID,然后加载每个ID代表的字符串,设置为这些指示器的显现文本。参数lpIDArray为指向一个ID数组的指针,参数nIDCount为lpIDArray数组的元素个数。

       UINT GetItemID(int nIndex) const; 

       获取由nIndex指定的指示器的ID。参数nIndex为要获取ID的指示器索引。

       CString GetPaneText(int nIndex) const;

        获取状态栏窗格中显现的文本。参数nIndex为要获取文本的窗格的索引。返回值为包含窗格文本的CString对象。

       BOOL SetPaneText(int nIndex, LPCTSTR lpszNewText, BOOL bUpdate = TRUE);

        设置状态栏窗格的显现文本。参数nIndex为要设置文本的窗格的索引,参数lpszNewText为指向新的窗格文本的指针,参数bUpdate表示是否设置后立即更新显现。如果设置成功则返回TRUE,不然返回FALSE。

       状态栏的创建

        正正在Example34程序中,银河文娱有哪些网站_云顶文娱场7610_bet9九州 网站正正在CMainFrame类中看到,创建状态栏时运用的是CMFCStatusBar类对象。CMFCStatusBar类是自VS2008以后提供的状态栏类,用法与CStatusBar类相同,甚至很众成员函数也雷同,但它的功能越发充裕。关于CMFCStatusBar类的成员函数可以查阅MSDN了解。

       鸡啄米下面就以Example34程序的CMFCStatusBar类对象为例,来讲讲状态栏的创建步骤:

        1. 构制一个CMFCStatusBar类的对象。

       正正在MainFrm.h文件中,为CMainFrame类定义了一个成员对象:CMFCStatusBar     m_wndStatusBar;。

        2. 调用CMFCStatusBar::Create函数来创建状态栏窗口。

       正正在CMainFrame::OnCreate函数的实现中,银河文娱有哪些网站_云顶文娱场7610_bet9九州 网站可以找到CMFCStatusBar::Create函数的调用:

C++代码
  1. if (!m_wndStatusBar.Create(this))   
  2. {   
  3.     TRACE0("Failed to create status bar\n");   
  4.     return -1;      // fail to create   
  5. }  

        3. 调用CMFCStatusBar::SetIndicators函数为状态栏划分窗格,并为每个指示器设置显现文本。

        CMFCStatusBar::SetIndicators函数需要一个ID数组的参数,正正在MainFrm.cpp中,如下定义了一个窗格ID的数组:

C++代码
  1. static UINT indicators[] =   
  2. {   
  3.     ID_SEPARATOR,           // status line indicator   
  4.     ID_INDICATOR_CAPS,   
  5.     ID_INDICATOR_NUM,   
  6.     ID_INDICATOR_SCRL,   
  7. };  

        indicators数组定义了状态栏窗格的划分信歇。第一个元素一般为ID_SEPARATOR,对应的窗格用来显现下令提示信歇,上面数组中的后三项为指示器文本的字符串ID,可以依据这些ID正正在String Table字符串资源中找到相应的字符串,查找方法是,正正在Resource View资源视图中,打开String Table字符串资源,可以看到有ID、Value和Caption三列,正正在ID列中找到需要的ID,对应的Caption列文本就是要查找的字符串。ID_INDICATOR_CAPS、ID_INDICATOR_NUM和ID_INDICATOR_SCRL对应的字符串分别是CAP、NUM、SCRL,对应的三个窗格分别为Caps Lock指示器、Num Lock指示器和Scroll Lock指示器。

        定义了指示器数组就可以运用CMFCStatusBar::SetIndicators函数为状态栏划分窗格了,依然是正正在CMainFrame::OnCreate函数中调用:

C++代码
  1. m_wndStatusBar.SetIndicators(indicators, sizeof(indicators)/sizeof(UINT));  

       这样状态栏就创建完成了,之后银河文娱有哪些网站_云顶文娱场7610_bet9九州 网站可以通过CMFCStatusBar::SetPaneText设置窗格的文本。

       状态栏运用实例

       鸡啄米看到网上有很众人正正在问,怎样正正在状态栏添加一个时间窗格,用来显现编制时间,本节就给出这样一个实例。此实例依然是正正在Example34的基础长进行修改的。步骤如下:

        1. 正正在Resource View资源视图中打开String Table字符串资源,然后正正在着末一行的下一个空缺行中,或者任意处点右键选择“New String”,添加一个新的字符串资源,ID为ID_INDICATOR_TIME,Value设为一个不与任何其他字符串资源浸复的整数值,Caption设为"00:00:00",这是为了给时间的显现预留空间,由于状态栏会依据字符串的长度为相应的窗格确定缺省宽度。

        2. 正正在indicators数组的第一个元素ID_INDICATOR_SCRL后插入ID_INDICATOR_TIME。

C++代码
  1. static UINT indicators[] =   
  2. {   
  3.     ID_SEPARATOR,           // status line indicator   
  4.     ID_INDICATOR_CAPS,   
  5.     ID_INDICATOR_NUM,   
  6.     ID_INDICATOR_SCRL,   
  7.     ID_INDICATOR_TIME   
  8. };  

       3. 要实时显现编制时间,就需要运用一个准时器,每秒钟更新一次时间显现。正正在CMainFrame::OnCreate函数中开启准时器,代码如下:

C++代码
  1. int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)   
  2. {   
  3.     if (CFrameWndEx::OnCreate(lpCreateStruct) == -1)   
  4.         return -1;   
  5.   
  6.     ......略   
  7.   
  8.     // 启动准时器,准时器ID为1,准时时间为1000ms,即1s   
  9.     SetTimer(1, 1000, NULL);   
  10.   
  11.     return 0;   
  12. }  

        4. 正正在Class View类视图中找到CMainFrame类,右键选择“Properties”,然后正正在显现出来的属性页中,点东西栏上的Messages按钮,即显现出消歇列表,找到WM_TIMER消歇,添加其消歇治理函数void CMainFrame::OnTimer(UINT_PTR nIDEvent),并修改此函数实现如下:

C++代码
  1. void CMainFrame::OnTimer(UINT_PTR nIDEvent)   
  2. {   
  3.     // TODO: Add your message handler code here and/or call default   
  4.     CString strTime;   
  5.     // 获取编制当前时间,并保存到curTime   
  6.     CTime curTime = CTime::GetCurrentTime();   
  7.   
  8.     // 格式化curTime,将字符串保存到strTime   
  9.     strTime = curTime.Format(_T("%H:%M:%S"));   
  10.     // 正正在状态栏的时间窗格中显现编制时间字符串   
  11.     m_wndStatusBar.SetPaneText(4, strTime);   
  12.   
  13.     CFrameWndEx::OnTimer(nIDEvent);   
  14. }  

       5. 运行程序,银河文娱有哪些网站_云顶文娱场7610_bet9九州 网站看到状态栏的着末一个窗格中可以实时显现编制时间,如下图:

VS2010状态栏的运用详解 

         状态栏的实质就讲这些,其实还是比拟简单的。鸡啄米欢迎大家常来此学习。

除非特别注明,鸡啄米文章均为原创
转载请标明本文地址:http://www.sygjbus.cn/software/219.html
2012年8月11日
作家:鸡啄米 分类:软件开发 浏览: 评论:16