注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

一江春水向西流

程序人生

 
 
 

日志

 
 
关于我

夫君子之行,静以修身,俭以养德.非澹泊无以明志, 非宁静无以致远.夫学须静也,才须学也,非学无以广才,非志无以成学,淫漫则不能励精,险躁则不能治性,年与时驰,意与日去,遂成枯落,多不接世,悲守穷庐,将复何及!

网易考拉推荐

通过例程分析状态条用法  

2009-06-16 16:08:54|  分类: C/C++ |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
  状态条是一个包含信息的控制条,通常用于信息和状态提示,这里信息是有关菜单命令或工具命令的提示字符串以及其它指示/帮助信息,而状态是用来指示SCROLL LOCK 和NUM LOCK等一些键的状态。状态条通常框架窗口的底部。状态条的信息行能显示有关的程序状态或鼠标指向的工具按钮或菜单项的信息。状态条既不能接受用户输入,也不产生命令信息。

  实际上,从编程人员的角度出发(至少是那些使用AppWizard创建应用程序的编程人员),状态条是如此普通,它们并不像工具条那样允许用户编辑的资源。在创建程序框架时,用户只需告诉AppWizard为应用程序包含一个状态条,可以说,此时,用户的工作就完成了。但是,我们如果巧妙使用工具条,我们会发现它可以帮我们实现很多功能。

  按以下做法我们实现在状态条上显示滚动字符串,鼠标的坐标,动态时钟。

  第一步:

  运行AppWizard生成一个工程mystatus,接受所有的默认设置,除了下面两步:在step 1中选Single Document ;step 4 中去掉Docking Bar 前的对钩,然后点击 Advanced 按钮,选择Window Styles 中的 Maximized选项。点击Finish按钮,此时我们生成了一个工程。运行我们可以发现程序默认生成的状态条,接下来我们要对这个状态条进行修改。

  第二步:

  在这一步我们将实现把状态条移到菜单的下边。在MainFrm.cpp中我们可以看到状态条的定义部分

  
  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
    }

   我们所要做的是将上面的定义改为

   if(!m_wndStatusBar.Create(this, WS_CHILD|WS_VISIBLE|CBRS_TOP,AFX_IDW_STATUS_BAR) ||
!m_wndStatusBar.SetIndicators(indicators,
sizeof(indicators)/sizeof(UINT)))
  {
   TRACE0("Failed to create status bar\n");
   return -1; // fail to create
   }

运行程序,这时我们可以发现,状态条已经移到了上边。
 第三步:

  在这一步,我们实现在状态条实现滚动文字。

  < 1 > 在MainFrm.cpp中,我们可以发现如下的定义

  

  static UINT indicators[] =
   {
    ID_SEPARATOR,
    ID_INDICATOR_CAPS,
    ID_INDICATOR_NUM,
    ID_INDICATOR_SCRL,
   };

  我们将其改为

  static UINT indicators[] =
   {
    ID_SEPARATOR,
    ID_STATUS1,
    ID_STATUS2,
    ID_STATUS3,
    ID_INDICATOR_CAPS,
    ID_INDICATOR_NUM,
    ID_INDICATOR_SCRL,
   };


  <2>在菜单VIEW中选择Resource Symbols , 在对话框中选择NEW, 在NAME中输入ID_STATUS1,VALUE中取默认值,同样方法定义ID_STATUS2,ID_STATUS3。

  <3>定义字符串资源,在ResouceView中选择String Table,在其中为ID_STATUS1定义字符串资源为"me",同样方法定义ID_STATUS2,ID_STATUS3。

  <4>在MainFrm.h中定义如下变量:

  public:

   CString str,str1;

  <5>在MainFrm.cpp中修改OnCreate函数如下:

  int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
   {
    if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
     return -1;
    if(!m_wndStatusBar.Create    (this,WS_CHILD|WS_VISIBLE|CBRS_TOP,AFX_IDW_STATUS_BAR) ||     !m_wndStatusBar.SetIndicators(indicators,sizeof(indicators)/sizeof(UINT)))
    {
     TRACE0("Failed to create status bar\n");
      return -1; // fail to create
     }
    m_wndStatusBar.SetPaneInfo(1,ID_STATUS1,SBPS_POPOUT,320);
    m_wndStatusBar.SetPaneInfo(2,ID_STATUS2,SBPS_POPOUT,100);
    m_wndStatusBar.SetPaneInfo(3,ID_STATUS3,SBPS_POPOUT,100);
    str1=str="你好,欢迎使用本程序,祝你合家幸福,事业有成!";
    SetTimer(1,200,NULL);
    SetTimer(2,10,NULL);
    return 0;
   }

  <6>在类CmainFrame中重载函数OnTimer(),并添加如下代码:

  void CMainFrame::OnTimer(UINT nIDEvent)
   {
    file:// TODO: Add your message handler code here and/or call default
    if(nIDEvent==1){
     if(str.IsEmpty()) str=str1;
      str=str.Right(str.GetLength()-2);
      m_wndStatusBar.SetPaneText(1,str);
    }
    if(nIDEvent==2){
     SYSTEMTIME t;
     ::GetLocalTime(&t);
     CString str2;
     str2.Format("%d:%d:%d:%d",t.wHour,t.wMinute,t.wSecond,t.wMilliseconds);
     m_wndStatusBar.SetPaneText(3,str2);
   }
   CFrameWnd::OnTimer(nIDEvent);
  }

  <7>将MainFrm.h中,定义m_wndStatusBar之前的 protected: 改为public:

  <8>通过类向导在类CmystatusView中重载WM_MOUSEMOVE,并在实现函数中添加如下代码:

  void CMystatusView::OnMouseMove(UINT nFlags, CPoint point)
  {
   // TODO: Add your message handler code here and/or call default
   CString str3;
   str3.Format("X:%d,Y:%d",point.x,point.y);
   ((CMainFrame*)AfxGetMainWnd())->m_wndStatusBar.SetPaneText(2,str3);
    CView::OnMouseMove(nFlags, point);
  }

好了,到这里我们所有的功能就都实现了,快编译运行一下吧!怎么样?还满意吗?

  评论这张
 
阅读(130)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017