第一步:先大概介绍下我们的窗体的布局框架,窗体大体分为以下3大块:

顶部:也就是大的模块划分(比如首页,软件管家,在线服务等)

内容区域:根据选择的不同的顶部模块,进行不同的内容展示;

底部:设置,下载管理,版本提示区域等等;

其中,顶部和底部是公用的,我们大多数的操作更多集中在内容区域;

第二步:DuiLib界面引擎原理介绍

首先打开首页所对应的XML;

F:\gjsvn\c\C++\GPlusTest\bin\Debug_u\GPlus_skin\MainFrame\MainFrame.xml

在真正的进行添加前,我们先介绍下DuiLib界面引擎原理;

做过web开发的同学们应该比较更容易理解;

先截取一个首页的XML片段

大家看以看到,新版G+的窗体的布局就是以多个XML来进行控制的;

可以控制字体,大小,颜色,背景图,模块布局(相当于DIV)等等,也就是说我们基本上在web页面上能控制的常用样式,在XML里基本都可以实现;但是有个小小的不方便,不提供预览的功能;后期可以搭建一个只为创建预览页面效果的纯净工具项目;

第三步:顶部添加一个我们自己的大的模块(KPI)

先上图:顶部导航

 

我们会发现里面有很多Option,这个和我们一般的程序里的作用是差不多的,就是一个分组里的各个选项;

我们先在这个分组里添加一个自己的选项,如下图:

 

大家可以看到这个选项中的各个属性,在这里我就不一一介绍各个属性的作用了,用到的时候大家可以自己尝试;最后一个group就是分组;上面的这几个模块他们都属于quickbar1这一分组;

顶部添加完了,但是他的对应内同在那显示呢,OK,现在我们就同样的道理在内容区域加上我们自己的展示位置;

其中,userkpi.xml就是我们添加的内容展示页面;

在这个XML里我们还可以控制页面级别的样式展示以及布局;大家注意到,这里我们又出现了一个新的控件: TabLayout ; 他就相当于咱们web中的页签;

还有一个比较有用的命令:Include, 做过新干线后台的同学们都比较明白,顾名思义,他的作用就是包含,包含source指定的子模板;

然后,我们需要去创建我们自己的userkpi.xml;

这里面,我们引入了新的控件;webBrowser,预览器容器;作用和WEB开发中的一样;

至此,我们自己的KPI页面就已经完全添加完成了;

第四步:首页程序中添加KPI页面;

首先:现在工程中添加一个新类:UserKpiPage.cpp  注意,如果是有页面的类,命名一定要和模板命名相对应,后面加上page;模板叫做userkpi.xml; 这样DUILIB界面引擎才能识别出来,才会去自动加载界面XML;

创建完页面后,去首页,也就是MainFrame.cpp中去添加对UserKpiPage的操作;

操作简单分为以下几步:

First:先在MainFrame.h顶部中添加userkpipage的引用;

代码如下:#include "UserKpiPage.h"

然后声明页面变量:

代码如下:UserKpiPage   m_UserKpiPage;

Second:在MainFrame的构造函数中添加虚拟窗体;

代码如下:

m_UserKpiPage.SetPaintMagager(&m_pm);

AddVirtualWnd(_T("userkpipage"),&m_UserKpiPage);

Third: 在MainFrame的OnSelectChanged响应事件中添加KPI页面的触发;

代码如下:

注意了:showPage是我们在页面中自己定义的方法,用来进行构建页面,初始化数据等等;

SelectItem就是根据索引选中上文提到到分组中的对应页签;

Fourth:进入到UserKpiPage.cpp内部

我们先看看showpage方法:

发现他的功能很简单,初始化控件-》加载页面-》更改状态;代码本身无不好理解的地方;

然后我们看下InitControl方法:

这里面其实和。Net里的一些写法还是比较像的,注意FindControl,这个方法就是在你所对应的XML模板里,根据name属性找到对应的控件;比如找到webbrowser容器,然后创建CWebBrowserEventHandler对象,并进行对象初始化;

其他的ChangeShowStatus等和业务相关的方法就不细讲了;

Fifth:给页面添加各种响应事件;

首先在头文件里定义消息Map;(标黄处)

public:

UserKpiPage(void);

virtual ~UserKpiPage(void);

void SetPaintMagager(CPaintManagerUI* pPaintMgr);

void ShowPage();

DUI_DECLARE_MESSAGE_MAP()

然后再文件中添加消息响应类别已经对应的事件;

DUI_BEGIN_MESSAGE_MAP(UserKpiPage, CNotifyPump)

DUI_ON_MSGTYPE(DUI_MSGTYPE_SELECTCHANGED,OnSelectChanged)

DUI_END_MESSAGE_MAP()

然后创建对应的方法OnSelectChanged

在这里,我们可以根据不同的按钮触发不同的操作,你可以自定义你自己的业务,不细讲;

当然,消息类别不仅仅只有DUI_MSGTYPE_SELECTCHANGED

还有很多种,比如:

DUI_ON_MSGTYPE(DUI_MSGTYPE_CLICK,OnClick)

DUI_ON_MSGTYPE(DUI_MSGTYPE_SELECTCHANGED,OnSelectChanged)

DUI_ON_MSGTYPE(DUI_MSGTYPE_ITEMCLICK,OnItemClick)

DUI_ON_MSGTYPE(DUI_MSGTYPE_ITEMSELECT,OnItemSelect)

DUI_ON_MSGTYPE(DUI_MSGTYPE_LINK,OnLink)

还有很多未列举,我们可以根据自己的需要自行选择;

自己摸索学习,难免有遗漏或者理解不正确的地方,请各位看官多包涵~

step_by_step_G+入门-在线服务的更多相关文章

  1. Xamarin.Forms入门学习路线

    Xamarin 介绍 Xamarin是一套跨平台解决方案,目的是使用C#语言创造原生的iOS,Android,Mac和Windows应用. Xamarin的三个优势: Xamarin App拥有原生A ...

  2. Web Service简单入门示例

    Web Service简单入门示例     我们一般实现Web Service的方法有非常多种.当中我主要使用了CXF Apache插件和Axis 2两种. Web Service是应用服务商为了解决 ...

  3. WebService 初步入门的理解

    先说明 我不是高手 我是菜鸟  也在不断学习的过程  记录下来这些是让自己总结的学习  毕竟我做的时候也是摸索前进的 我没有深入 我是入门摸索 前两天的时候做一个微信的开发的 要用到我们公司微信服务号 ...

  4. 百度地图JavaScript开发入门先知

    最近项目紧急开发了一些百度地图的功能,觉得百度地图实数强大!于是今天不忙总结一下,看到不错的文章先转载. 文章出处:https://www.opengps.cn/Blog/View.aspx?id=1 ...

  5. 从入门到精通(分布式文件系统架构)-FastDFS,FastDFS-Nginx整合,合并存储,存储缩略图,图片压缩,Java客户端

    导读 互联网环境中的文件如何存储? 不能存本地应用服务器 NFS(采用mount挂载) HDFS(适合大文件) FastDFS(强力推荐

  6. Angular2入门系列教程7-HTTP(一)-使用Angular2自带的http进行网络请求

    上一篇:Angular2入门系列教程6-路由(二)-使用多层级路由并在在路由中传递复杂参数 感觉这篇不是很好写,因为涉及到网络请求,如果采用真实的网络请求,这个例子大家拿到手估计还要自己写一个web ...

  7. ABP入门系列(1)——学习Abp框架之实操演练

    作为.Net工地搬砖长工一名,一直致力于挖坑(Bug)填坑(Debug),但技术却不见长进.也曾热情于新技术的学习,憧憬过成为技术大拿.从前端到后端,从bootstrap到javascript,从py ...

  8. Oracle分析函数入门

    一.Oracle分析函数入门 分析函数是什么?分析函数是Oracle专门用于解决复杂报表统计需求的功能强大的函数,它可以在数据中进行分组然后计算基于组的某种统计值,并且每一组的每一行都可以返回一个统计 ...

  9. Angular2入门系列教程6-路由(二)-使用多层级路由并在在路由中传递复杂参数

    上一篇:Angular2入门系列教程5-路由(一)-使用简单的路由并在在路由中传递参数 之前介绍了简单的路由以及传参,这篇文章我们将要学习复杂一些的路由以及传递其他附加参数.一个好的路由系统可以使我们 ...

随机推荐

  1. .Net 利用消息在进程间通讯实现进程互操作

    有时候我们会遇到需要在两个进程间通过某种方式实现互操作,方法有很多,例如你可以尝试让两个进程持续监视一个外部文件,由此文件记录各自进程的数据:还有可以使用网络端口实现进程间通讯.共享一片内存区域记录及 ...

  2. 从零开始nodejs系列文章

    http://blog.fens.me/series-nodejs/ 从基础的node安装到npm配置,从express到jade,还有mongoDB.是一个很好的node教程

  3. IIS7.0/7.5 MVC3 实现伪静态

    routes.MapRoute(            "Default",            "{controller}/{action}.html/{id}&qu ...

  4. 转场动画2-Pop动画

    上一篇试讲push动画,这篇分解pop动画 里面关于矩阵有不懂得,参考CATransform3D 特效详解 上图(虚拟机下,图是渣渣 ) 代码直接上 // // PopTransition.h // ...

  5. NSURLConnect 的简单实用(iOS8淘汰)

    Demo_1 NSRULConnection NSRULConnection 苹果公司在ios8已经抛弃了,但是我还是要讲一下,因为这和后面的NSSession有着密切的联系 下面开始使用步骤: 1. ...

  6. My blog

    欢迎啦……嘿嘿 http://blog.csdn.net/zuguodexiaoguoabc http://blog.sina.com.cn/u/3914181130

  7. windows下搭建python+selenium环境

    1.安装python https://www.python.org/ 2.安装setuptools(python的基础包工具) 下载地址:https://pypi.python.org/pypi/se ...

  8. 从头编译ARM交叉编译环境

    首先Cygwin需安装基本的命令 例如make binutils gcc 还有diffutils 没有他会报找不到cmp命令 这些都可以在setup.exe中找到 编译gcc时,需要注意一个原则:不要 ...

  9. 五年26个版本:Linux系统内核全程回顾

    Phoronix.com今天将他们对Linux系统的研究发挥到了极致:从2005年年中的2.6.12,到正在开发中的2.6.37,五年多来的26个Linux内核版本来了个“群英荟萃”! 完成如此庞大规 ...

  10. 【转】android权限列表

    访问登记属性 android.permission.ACCESS_CHECKIN_PROPERTIES ,读取或写入登记check-in数据库属性表的权限 获取错略位置 android.permiss ...