`
ladymaidu
  • 浏览: 678548 次
文章分类
社区版块
存档分类
最新评论

巧用boost库实现字符串映射消息处理函数

 
阅读更多


作者:朱金灿
来源:http://blog.csdn.net/clever101/


Boost库实在是一个博大精深的库。经过实验,我发现巧用boost::bind和boost::function可以实现一些巧妙的设计。


编写过MFC程序的朋友都知道,通过资源编辑器编辑菜单项,设定菜单项ID,然后MFC内部通过该ID来映射菜单命令处理函数和菜单界面更新函数。我设想撇开MFC的资源编辑,在MFC程序中通过xml文件来进行界面配置,然后利用字符串来映射消息处理函数。借助boost库,我实现了这一设想。具体就是在xml文件指定一个字符串,然后通过这个字符串就能找到它的命令消息处理函数和界面更新命令消息处理函数。


下面具体谈谈怎么实现这一设想。我需要解决的是两大问题:一是通过xml文件来动态创建界面;二是根据xml文件里指定的菜单项字符串找到它的命令消息处理函数。


第一个问题相对简单。首先我谈谈我的系统界面配置xml文件的设计。我的系统界面配置xml文件比较简单,具体如下:



简单解释就是:Framework节点保存的是程序的基本信息,包括包含了程序名、公司名和公司网址;接着就是UIDescription--界面描述,主要包括全部菜单栏信息和菜单项信息。


对应这个系统配置xml文件,我们需要在程序中定义相应的结构体,具体如下:



程序定义了一个基于tinyxml库的xml文件解析类CXmlParse,关于如何解析xml文件本博客已经有过详细介绍,具体参考如下文章:
TinyXml快速入门(一)

TinyXml快速入门(二)

TinyXml快速入门(三)

就TinyXml使用答复一位网友

将TinyXml快速入门的接口面向对象化


具体做法是在应用程序类里定义两个变量:



在程序初始化实例函数InitInstance()里调用CXmlParse类的接口来解析系统配置文件。根据解析系统xml文件来动态创建菜单栏的代码也比较简单,集中在GetAllmenubar和MainMenubarCreate两个函数,具体见上传的代码,这里不作赘述。


下面我具体谈谈如何通过xml文件中指定的菜单ID字符串来映射它的消息处理函数,概括来说是通过一个函数来实现的。



在框架类里定义一个map,菜单ID作为键,消息处理函数指针作为键值:



然后在创建菜单的时候将消息处理函数指针添加进这个map:



最后重载框架类的OnCmdMsg函数,根据菜单ID值调用map里的函数:



程序用到的第三方库包括:tinyxml 2.5.3和boost 1.34。相关源码已上传到联合程序开发网:boost库测试下载 。程序界面如下:


boost library test





























分享到:
评论

相关推荐

    boost之lexical_cast之字符串转换成数值.rar_Boost_boost_字符串转换成数值

    c++通过boost库实现字符串之间与数字之间的

    boost库中对字符串的一些算法

    这是对boost库中所有字符串算法的函数总结,我也是找的别人的,来赚点积分。#include <boost/algorithm/string.hpp>主要是这里面的函数

    Boost库定制安装更新版

    Boost库是一个经过千锤百炼、可移植、提供源代码的C++库,,作为标准库的后备,是C++标准化进程的发动机之一。 Boost库由C++标准委员会库工作组成员发起,其中有些内容有望成为下一代C++标准库内容。在C++社区中影响...

    Boost程序库完全开发指南.pdf

     它由C++标准委员会部分成员所设立的Boost社区开发并维护,使用了许多现代C++编程技术,内容涵盖字符串处理、正则表达式、容器与数据结构、并发编程、函数式编程、泛型编程、设计模式实现等许多领域,极大地丰富了...

    C++ boost库,最新版本

    大部分boost库功能的使用只需包括相应头文件即可,少数(如正则表达式库,文件系统库等)需要链接库。里面有许多具有工业强度的库,如graph库。STL集中在算法部分,而boost包含了不少工具类,可以完成比较具体的工作...

    Boost C++扩展库

    Boost库是一个经过千锤百炼、可移植、提供源代码的C++库,作为标准库的后备,是C++标准化进程的发动机之一。 Boost库由C++标准委员会库工作组成员发起,其中有些内容有望成为下一代C++标准库内容。 Boost中比较有...

    boost库boost库boost库boost库

    boot库

    c++ boost库1.73.0 boost最新版

    Boost库由Boost社区组织开发、维护。其目的是为C++程序员提供免费、同行审查的、可移植的程序库。Boost库可以与C++标准库完美共同工作,并且为其提供扩展功能。Boost库使用Boost License来授权使用,根据该协议,...

    纯C++ 文件流 处理函数

    用C++ STL 实现的文件处理函数大全,包括一些常用的但标准库中没有字符串处理。内部含有的正则部分,是采用的boost库,不需要的完全可以去掉,不影响其他函数的使用。

    boost::asio::serialport实现串口通信

    通过boost::asio::serialport类实现串口通信的例子

    C/C++利用Boost库发送POST/GET请求

    http协议是互联网上应用最为广泛的一种网络协议,他在接口中扮演着重要的角色,Post/Get请求,想必大家都有所耳闻,我们一起利用Boost::Asio库来实现Post/Get请求的发送。 VS2013 文章地址:...

    CPP转Json字符串

    标准json字符串编码使用unicode,即boost 提供的 中拼接起来的字符串采用unicode字符集编码,而很多网页采用编码为utf8。 这个库字符编码采用系统编码,系统采用utf8字符集的话拼接起来字符串就是ut8了;另外在博客...

    c++boost库最新版本

    c++boost库最新版本

    boost库中文

    Boost库是为C++语言标准库提供扩展的一些C++程序库的总称。  Boost库由Boost社区组织开发、维护。其目的是为C++程序员提供免费、同行审查的、可移植的程序库。Boost库可以与C++标准库完美共同工作,并且为其提供...

    vc++6/MFC中使用boost示例,利用正则表达式分解字符串,替换文本等

    vc++6/MFC中使用boost示例,利用正则表达式分解字符串,替换文本,批量替换等,

    boost boost库

    boost boost库 boost boost库boost boost库 boost boost库boost boost库boost boost库

    vc++6.0环境下的使用boost库实现正则表达式

    vc++6.0环境下的使用boost库实现正则表达式;图文解说如何下载boost;如何编译boost库文件;如何配置vc;实例代码测试

    boost库简介

    boost库简介 介绍了boost库的各种各样的奇怪函数的用法

Global site tag (gtag.js) - Google Analytics