step_by_step_G+入门-在线服务
第一步:先大概介绍下我们的窗体的布局框架,窗体大体分为以下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+入门-在线服务的更多相关文章
- Xamarin.Forms入门学习路线
Xamarin 介绍 Xamarin是一套跨平台解决方案,目的是使用C#语言创造原生的iOS,Android,Mac和Windows应用. Xamarin的三个优势: Xamarin App拥有原生A ...
- Web Service简单入门示例
Web Service简单入门示例 我们一般实现Web Service的方法有非常多种.当中我主要使用了CXF Apache插件和Axis 2两种. Web Service是应用服务商为了解决 ...
- WebService 初步入门的理解
先说明 我不是高手 我是菜鸟 也在不断学习的过程 记录下来这些是让自己总结的学习 毕竟我做的时候也是摸索前进的 我没有深入 我是入门摸索 前两天的时候做一个微信的开发的 要用到我们公司微信服务号 ...
- 百度地图JavaScript开发入门先知
最近项目紧急开发了一些百度地图的功能,觉得百度地图实数强大!于是今天不忙总结一下,看到不错的文章先转载. 文章出处:https://www.opengps.cn/Blog/View.aspx?id=1 ...
- 从入门到精通(分布式文件系统架构)-FastDFS,FastDFS-Nginx整合,合并存储,存储缩略图,图片压缩,Java客户端
导读 互联网环境中的文件如何存储? 不能存本地应用服务器 NFS(采用mount挂载) HDFS(适合大文件) FastDFS(强力推荐
- Angular2入门系列教程7-HTTP(一)-使用Angular2自带的http进行网络请求
上一篇:Angular2入门系列教程6-路由(二)-使用多层级路由并在在路由中传递复杂参数 感觉这篇不是很好写,因为涉及到网络请求,如果采用真实的网络请求,这个例子大家拿到手估计还要自己写一个web ...
- ABP入门系列(1)——学习Abp框架之实操演练
作为.Net工地搬砖长工一名,一直致力于挖坑(Bug)填坑(Debug),但技术却不见长进.也曾热情于新技术的学习,憧憬过成为技术大拿.从前端到后端,从bootstrap到javascript,从py ...
- Oracle分析函数入门
一.Oracle分析函数入门 分析函数是什么?分析函数是Oracle专门用于解决复杂报表统计需求的功能强大的函数,它可以在数据中进行分组然后计算基于组的某种统计值,并且每一组的每一行都可以返回一个统计 ...
- Angular2入门系列教程6-路由(二)-使用多层级路由并在在路由中传递复杂参数
上一篇:Angular2入门系列教程5-路由(一)-使用简单的路由并在在路由中传递参数 之前介绍了简单的路由以及传参,这篇文章我们将要学习复杂一些的路由以及传递其他附加参数.一个好的路由系统可以使我们 ...
随机推荐
- iWeb峰会见闻
8.16去参加了iWeb峰会,一大早8点过10分就到了,发现外面已经排起了长队(说明影响力越来越大,关注的人越来越多了.) 此次大会参与的企业也越来越多,当然是有目的而来~ 上午 google商业合作 ...
- Javascript/Jquery 中each() 和forEach()的区别
从名字看上去这两个方法好像有点关系,但在javascript中它们区别还是挺大的. forEach() 用于数组的操作,对数组中的每个元素执行制定的函数(不是数组不能使用forEach()方法). 而 ...
- JavaSE复习日记 : 接口
/* * 接口 * 引用数据类型: * 类,接口,数组; * * 接口是一种引用数据类型,可以看作是一个特殊的类,它存在的目的是为了解决没有多重继承引起的功能弱的问题而设计的,一个类只能有一个父类,但 ...
- springmvc入门demo
目录结构: package com.wyl; import org.springframework.stereotype.Controller; import org.springframework. ...
- POJ 3261 Milk Patterns(后缀数组+二分答案)
[题目链接] http://poj.org/problem?id=3261 [题目大意] 求最长可允许重叠的出现次数不小于k的子串. [题解] 对原串做一遍后缀数组,二分子串长度x,将前缀相同长度超过 ...
- 【C/C++多线程编程之九】pthread读写锁
多线程编程之读写锁 Pthread是 POSIX threads 的简称,是POSIX的线程标准. pthread读写锁把对共享资源的訪问者分为读者和写者,读者仅仅对共享资源 ...
- getline函数
在我的印象中,getline函数常常出如今自己的视野里,模糊地记得它常常常使用来读取字符串 .可是又对它的參数不是非常了解,今天又用到了getline函数,如今来细细地总结一下: 首先要明确设计get ...
- cocos2d-x-3.1 Text Labels(官方正式译文)
介绍 cocos2d支持(true type字体)标签,和纹理地图集标签. LabelTTF 标签的优缺点: 全部 TTF 字体的长处: 随意大小,支持调整字距. 易于使用. 不须要外部编辑器. 创建 ...
- 设计模式入门之桥接模式Bridge
Abstraction:抽象部分的父类,定义须要实现的接口.维护对实现部分的引用,从而把实现桥接到Implementor中去 Implementor:实现部分的接口 RefinedAbstractio ...
- The Linux device model
/sys和 /dev的疑问 1./dev 下放的是设备文件,是由应用层mknod创建的文件.假设底层驱动对mknod的设备号有相应的驱动,如open等函数.那么应用层open "/dev/* ...