Chinaunix首页 | 论坛 | 博客
  • 博客访问: 642806
  • 博文数量: 133
  • 博客积分: 1566
  • 博客等级: 上尉
  • 技术积分: 1230
  • 用 户 组: 普通用户
  • 注册时间: 2010-12-01 09:31
文章分类

全部博文(133)

文章存档

2019年(1)

2018年(1)

2017年(8)

2016年(9)

2015年(17)

2014年(4)

2013年(31)

2012年(25)

2011年(36)

2010年(1)

我的朋友

分类: Windows平台

2014-11-19 10:17:36

转载自http://blog.csdn.net/mr_liyonghong/article/details/14446975

状态栏的编程

VS2010提供了CMFCStatusBar用于控制状态栏的显示,在状态栏中,可以显示图标、进度条、图形动画、更改文本的颜色和背景色、双机相应状态栏产生消息。

首先利用AppWizard建立工程文件,注意建立的工程文件视类的基类选择为CFormView,在CMainFrame中定义状态栏并设置状态栏。

依据状态栏中出现的次序定义常量,确定修改哪一个状态栏。

const int nStatusIcon = 0;

const int nStatusInfo = 1;

const int nStatusProgress = 2;

const int nStatusLabel = 3;

const int nStatusAnimation =4;

  重新修改状态栏的标识函数

static UINT indicators[] =

{

         ID_INDICATOR_ICON,               //status icon

         ID_SEPARATOR,           // statusline indicator

         ID_INDICATOR_PROGRESS,  // progress bar

         ID_INDICATOR_LABEL,            // textlabel

         ID_INDICATOR_ANIMATION,    // animation pane

};

设置状态栏的格式

m_wndStatusBar.SetPaneStyle(nStatusIcon, SBPS_NOBORDERS);

m_wndStatusBar.SetPaneStyle(nStatusAnimation, SBPS_NOBORDERS);

m_wndStatusBar.SetPaneStyle(nStatusInfo, SBPS_STRETCH | SBPS_NOBORDERS);

m_wndStatusBar.SetPaneWidth(nStatusProgress, 80);

m_wndStatusBar.EnablePaneDoubleClick();

编辑Form资源,加入需要的控件并编程。

要在视类中访问状态栏控件,需要编写函数GetStatusBar()

CMFCStatusBar&GetStatusBar () const

         {

                   return ((CMainFrame*) AfxGetMainWnd ())->GetStatusBar();

         }

另外,在CMainFrame中加入GetStatusBar代码

CMFCStatusBar&GetStatusBar ()

         {

                   return m_wndStatusBar;

         }

视类的初始化,修改OnInitialUpdate函数并加入状态栏相关的控件初始化代码

         //动画图标的载入

if(m_imlStatusAnimation.GetSafeHandle()==NULL)

         {

                   m_imlStatusAnimation.Create(IDB_ANIMATE,16,0,RGB(255,0,255));

         }

   //位图图标的载入

         if(m_bmpIcon1.GetSafeHandle() == NULL)

         {

                   m_bmpIcon1.LoadBitmapW(IDB_ICON1);

         }

   //位图图标的载入

         if(m_bmpIcon2.GetSafeHandle() == NULL)

         {

                   m_bmpIcon2.LoadBitmapW(IDB_ICON2);

         }

   //载入图标

         GetStatusBar().SetPaneIcon(nStatusIcon,m_bmpIcon1);

         GetStatusBar().SetTipText(nStatusIcon,_T("this is tooltip"));

进度条的启动和停止

         if(m_ShowProgress)

         {

                   KillTimer(ID_PROGRESS_TIMER);

                   m_ProgressBut.SetWindowTextW(_T("Show Progress"));

                   GetStatusBar().EnablePaneProgressBar (nStatusProgress, -1);

                   m_ShowProgress= FALSE;

                   return;

         }

         SetTimer(ID_PROGRESS_TIMER,100,NULL);

         GetStatusBar().EnablePaneProgressBar (nStatusProgress, PROGRESS_MAX);

         m_ShowProgress= TRUE;

         m_ProgressBut.SetWindowTextW(_T("Stop Progress"));

在WM_TIMER中加入动态进度条的控制代码

if(nIDEvent == ID_PROGRESS_TIMER)

         {

                   nProgressPos+=5;

                   if(nProgressPos > PROGRESS_MAX)

                   {

                            nProgressPos= 0;

                   }

                   GetStatusBar().SetPaneProgress(nStatusProgress, nProgressPos);

         }

动画演示的启动和停止

if(m_ShowAnimation)

         {

                   m_ShowAnimation= FALSE;

                   m_AnimateBut.SetWindowTextW(_T("Start Animation"));

                   GetStatusBar().SetPaneAnimation (nStatusAnimation, NULL);

         }

         else

         {

                   m_ShowAnimation= TRUE;

                   m_AnimateBut.SetWindowTextW(_T("Stop Animation"));

                   GetStatusBar().SetPaneAnimation (nStatusAnimation, m_imlStatusAnimation);

                   GetStatusBar().SetPaneText (nStatusAnimation, _T(""));

                   GetStatusBar().SetPaneWidth (nStatusAnimation, 16);

         }

图标的变换

If(m_nIcon==0)

         {

                   return;

         }

         m_nIcon= 0;

         GetStatusBar().SetPaneIcon (nStatusIcon, m_bmpIcon1);

背景色和显示文本颜色的改变

m_backColor= m_BackColorBut.GetColor();

GetStatusBar().SetPaneBackgroundColor(nStatusLabel,m_backColor);

m_textColor= m_TextColorBut.GetColor();

         GetStatusBar().SetPaneTextColor(nStatusLabel,m_textColor);

鼠标双击状态栏消息的建立

可以利用状态栏的ID建立ON_COMMAND消息并建立处理函数,在其中相应该函数即可

最终软件界面如下:

阅读(1521) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~