一、新建Toolkit Pro应用程序

  安装好Toolkit Pro后,打开VS2008,新建-项目-Toolkit Pro Application。如图1所示。

  

                     图1:Toolkit Pro创建窗口 

  输入项目名称和位置,如Test,一直默认直到工程建立好。

  系统将生成四组文件:CTestCView类、CTestDoc类、CChildFrame类、CMainFrame类,及相应的.h和.cpp文件。

二、MFC状态栏介绍

  首先在CMainFrame.cpp中找到OnCreate()函数,可以看到该框架已自动创建了状态栏:

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

  1.m_wndStatusBar

  m_wndStatusBar为CMainFrame类定义的一个成员对象:

  protected:CXTPStatusBar  m_wndStatusBar;

  2. Create()函数

 BOOL Create(
// 状态栏父窗口指针
CWnd* pParentWnd,
// 状态栏的风格
DWORD dwStyle = WS_CHILD | WS_VISIBLE | CBRS_BOTTOM | WS_CLIPCHILDREN | WS_CLIPSIBLINGS,
// 状态栏的ID
UINT nID = AFX_IDW_STATUS_BAR
);

  3.SetIndicators()函数

 BOOL SetIndicators(
const UINT* lpIDArray, // 指定指示器的ID
int nIDCount); // 状态栏窗格中显示的文本

  4.indicator数组

  SetIndicators()函数的第一个参数已指定为indicate数组,为窗格ID数组。

 static UINT indicators[] =
{
ID_SEPARATOR, // status line indicator
ID_INDICATOR_CAPS,
ID_INDICATOR_NUM,
ID_INDICATOR_SCRL,
};

  其中ID_INDICATOR_CAPS表示Caps Lock按键,即大小写按键

    ID_INDICATOR_NUM 表示Num Lock按键,即小键盘按键  

    ID_INDICATOR_SCRL表示Scroll Lock按键,在键盘大小写指示灯左侧第二个按钮

  程序默认运行效果如图2所示:

  

                   图2:Toolkit Pro应用程序默认状态栏

  从图2红色框中可见,状态栏加载了四个窗格,标题分别是:Ready,CAP,NUM,SCRL。

  第一个窗格为默认窗格,一般可以通过SetText来覆盖其名称来显示想要的内容。

  第二个窗格为CAP Lock按键状态,在键盘上按下CAP Lock按键后该窗格的CAP标题处于激活状态。

  第三个窗格为NUM Lock按键状态,默认为激活状态,在键盘上按下NUM Lock后该窗口标题变为灰色。

  第四个窗格为SCroll Lock按键状态,按下对应按钮标题激活。

三、设置自定义状态栏

  要想得到自己想要的状态栏效果,可以重写状态栏。

  1.将MainFrame.cpp中OnCreate的工具栏创建代码注释,添加自己写的CreateStatusBar()函数:

 //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 (!CreateStatusBar())
{
TRACE0("Failed to create status bar\n");
return -;
}

  2.在资源中建立PNG分组,加入两个PNG图片,分别命名为ID_SCREEN_TUBE和ID_SCREEN_NULL

  3.CreateStatusBar()具体实现如下:

 // 创建状态栏
BOOL CMainFrame::CreateStatusBar()
{
  // 状态栏创建
if (!m_wndStatusBar.Create(this))
{
return FALSE;
} // 状态栏面板
CXTPStatusBarPane* pPane; // 状态栏面板-添加指示器,完成第一个窗格的初始化
pPane = m_wndStatusBar.AddIndicator(ID_SEPARATOR);
// 状态栏面板-设置宽度
// 如果SetStyle设置了可拉伸属性SBPS_STRETCH,则无需SetWidth
// pPane->SetWidth(1);
// 状态栏面板-设置面板类型:可拉伸+无边框
pPane->SetStyle(SBPS_STRETCH | SBPS_NOBORDERS);
pPane->SetBeginGroup(TRUE); // 状态栏面板-添加指示器,完成第二个窗格的初始化
pPane = m_wndStatusBar.AddIndicator(ID_SCREEN_TUBE);
// 状态栏面板-设置按钮,调用该函数使窗格可点击,否则为文本状态。
pPane->SetButton();
// 状态栏面板-设置填充物(左,高,右,宽)
pPane->SetPadding(, , , );
// 状态栏面板-设置图标索引
pPane->SetIconIndex(ID_SCREEN_TUBE);
pPane->SetBeginGroup(TRUE); // 状态栏面板-加载图片
UINT nID_Link = ID_SCREEN_TUBE;
m_wndStatusBar.GetImageManager()->SetIcons(ID_SCREEN_TUBE, &nID_Link, , );   // 状态栏面板-设置第三个窗格
pPane = m_wndStatusBar.AddIndicator(ID_SCREEN_NULL);
pPane->SetButton();
pPane->SetPadding(, , , );
pPane->SetBeginGroup(TRUE);
// 状态栏面板-设置窗格标题
pPane->SetText(_T("状态指示灯")); UINT nID_UnLink = ID_SCREEN_NULL;
m_wndStatusBar.GetImageManager()->SetIcons(ID_SCREEN_NULL, &nID_Link, , ); return TRUE;
}

  4.运行效果如图3所示:

  

                图3:自定义状态栏

  5.添加其他窗格

  在CreateStatusBar()函数后面添加代码。

 pPane = m_wndStatusBar.AddIndicator(ID_STATUSBAR_TITLE);
pPane->SetButton();
pPane->SetPadding(, , , );
pPane->SetBeginGroup(TRUE);
pPane->SetText(_T("Title"));

  其中ID_STATUSBAR_TITLE是Resource.h中添加的宏:#define ID_STATUSBAR_TITLE 6001,具体数字与其他宏不冲突即可。

  运行效果如图4所示:

  

                图4:添加窗格

  6.添加时间窗格

  添加时间响应消息;添加SetTimer函数;实现时间消息响应函数OnTimer:

 void CMainFrame::OnTimer(UINT_PTR nIDEvent)
{
// TODO: Add your message handler code here and/or call default
CString strTime;
// 获取系统当前时间,并保存到curTime
CTime curTime = CTime::GetCurrentTime(); // 格式化curTime,将字符串保存到strTime
strTime = curTime.Format(_T("%H:%M:%S"));
// 在状态栏的时间窗格中显示系统时间字符串
m_wndStatusBar.SetPaneText(, strTime); CMDIFrameWnd::OnTimer(nIDEvent);
}

  注意:1)代码11行SetPaneText()函数第一个参数为窗格索引号,从0开始。

     2)若该参数值大于已设定的窗口数,windows会弹出Debug Assertion Failed对话框。比如只添加了3个窗格,那么该参数值的范围就只能是0-2,若设成比2大的值如4就会报错。    

  添加时间窗格详见http://www.jizhuomi.com/software/219.html 《VS2010/MFC编程入门之三十八(状态栏的使用详解)》。

Toolkit Pro学习--Toolbar的创建的更多相关文章

  1. Xtreme Toolkit Pro 免费下载地址

    Xtreme Toolkit Pro 是针对Windows程序员的一套先进的用户界面套包,强大的功能可使您的应用程序具有专业的.现代感的外观. Xtreme Toolkit Pro 由8个专业级的构件 ...

  2. Java学习笔记-多线程-创建线程的方式

    创建线程 创建线程的方式: 继承java.lang.Thread 实现java.lang.Runnable接口 所有的线程对象都是Thead及其子类的实例 每个线程完成一定的任务,其实就是一段顺序执行 ...

  3. Netty学习之客户端创建

    一.客户端开发时序图 图片来源:Netty权威指南(第2版) 二.Netty客户端开发步骤 使用Netty进行客户端开发主要有以下几个步骤: 1.用户线程创建Bootstrap Bootstrap b ...

  4. springmvc学习笔记---idea创建springmvc项目

    前言: 真的是很久没搞java的web服务开发了, 最近一次搞还是读研的时候, 想来感慨万千. 英雄没落, Eclipse的盟主地位隐隐然有被IntelliJ IDEA超越的趋势. Spring从2. ...

  5. ASP.NET MVC 5 学习教程:创建连接字符串

    原文 ASP.NET MVC 5 学习教程:创建连接字符串 起飞网 ASP.NET MVC 5 学习教程目录: 添加控制器 添加视图 修改视图和布局页 控制器传递数据给视图 添加模型 创建连接字符串 ...

  6. 跟着刚哥学习Spring框架--创建HelloWorld项目(一)

    1.Spring框架简介 Spring是一个开源框架,Spring是在2003年兴起的一个轻量级的开源框架,由Rod johnson创建.主要对JavaBean的生命周期进行管理的轻量级框架,Spri ...

  7. windows 下使用VMware Workstation Pro 工具,ubuntu创建虚拟机

    本文记录windows 下使用VMware Workstation Pro 工具,ubuntu创建虚拟机 的步骤 第一步 [文件] --- [新建虚拟机]   第二步 弹出的新建虚拟机向导对话框 标准 ...

  8. angular学习笔记(二)-创建angular模块

    如果在页面的html标签(或任意标签)中添加ng-app,表示对整个页面应用angular来管理. 他是一个模块. 模块有助于把东西从全局命名空间中隔离. 今天学习如何自定义创建模块: <!DO ...

  9. Django:学习笔记(2)——创建第一个应用

    Django:学习笔记(2)——创建第一个应用 创建应用 在 Django 中,每一个应用都是一个 Python 包,并且遵循着相同的约定.Django 自带一个工具,可以帮你生成应用的基础目录结构, ...

随机推荐

  1. Jquery如何获取控件ID

    l  1.#id     用法: $(”#myDiv”);    返回值  单个元素的组成的集合 说明: 这个就是直接选择html中的id=”myDiv” l  2.Element       用法: ...

  2. jQuery日期和时间插件(jquery-ui-timepicker-addon.js)中文破解版使用

    <html> <head> <title></title> <link type="text/css" href=" ...

  3. OA、CRM、ERP之间的区别和联系是什么?

    我们假设你是某机械行业的销售,一切从今天你收到公司的邮件,去上海参加展会开始 因为 去展会 所有 首先 你打开 OA 登陆 填写出差申请表 送交主管审批 填表--审批--行政订票酒店 然后呢 你飞去上 ...

  4. AdapterView及其子类之三:基于ListView及ArrayAdapter实现列表

    见归档项目ListViewDemo.zip. 基本步骤如下: 1.创建主布局文件,里面包含一个ListView元素. <RelativeLayout xmlns:android="ht ...

  5. jQuery的类数组对象结构

    Query就是为了获取DOM.操作DOM而存在的 所以为了更方便这些操作,让节点与实例对象通过一个桥梁给关联起来,jQuery内部就采用了一种叫"类数组对象"的方式作为存储结构,所 ...

  6. js循环遍历

    //获取多个用户id 一般用在复选框 cust_id = 1,2,3,4; var str = cust_id.split(",");          for (var key ...

  7. FastReport.net 使用记录

    FastReport.net  打印设计功能非常强大,打印内容可以自己设计.数据源可以来至许多个表,打印设计后的表格数据是以二进制保存在数据库中的. 1.打印设计: private void Desi ...

  8. ReactNative

    基于ReactNative实现的博客园手机客户端   去年九月,facebook发布了react-native,将web端的javaScript和react技术扩展到了IOS和Android的原生应用 ...

  9. 九章算法系列(#5 Linked List)-课堂笔记

    前言 又是很长时间才回来发一篇博客,前一个月确实因为杂七杂八的事情影响了很多,现在还是到了大火燃眉毛的时候了,也应该开始继续整理一下算法的思路了.Linked List大家应该是特别熟悉不过的了,因为 ...

  10. Activity Window View的关系

    http://blog.csdn.net/chiuan/article/details/7062215 http://blog.163.com/fenglang_2006/blog/static/13 ...