第一步:先大概介绍下我们的窗体的布局框架,窗体大体分为以下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. printf("%d, %d\n", i++, ++i)的输出结果是确定的吗???

    1. 问题描述 以下代码的输出结果是什么? 题目1: ; printf("%d, %d\n", i++, ++i); 题目2: ; printf("%d, %d, %d, ...

  2. 虎扯:纯css3各方向小三角的制作原理分析

    入驻博客园两个月之后的第一篇随笔,希望能够做到三个原则: One:不浪费自己的时间, Tow:不浪费读者的时间, 第三就是希望有缘的朋友们多多指教,共度前端快乐的大坑!!! 咱们今天来做一个居家旅行必 ...

  3. Table显示边框

    style="border-bottom: 1px solid #CCCCCC;"

  4. swipe.js文档及用法

    最近的一个项目中使用到了swipe.js这个插件 感觉非常的好用的 官方网站 http://swipejs.com/ https://github.com/bradbirdsall/Swipe 简介 ...

  5. Oralce Exp 与 Imp 的使用方法

    1.完全:EXP  SYSTEM/SYSTEM@ORCL  FILE=C:\FULL.DMP  LOG=C:\FULL.DMP.LOG  FULL=Y  BUFFER=819200如果要执行完全导出, ...

  6. ViEmu for VS2013-3.2.1 破解(转)

    ViEmuVS2013-3.2.1 破解   VS升级到2013后,作为一个Vimer,自然需要更新最新的ViEmu插件,因为现在离了Vim,写代码已经寸步难行了. ViEmu 3.2.1的破解其实和 ...

  7. java23中设计模式详解

    设计模式(Design Patterns) ——可复用面向对象软件的基础 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了 ...

  8. C++_知识点_结构体/枚举/联合

    //C++中结构体的不同之处 #include <iostream> #include <string> using namespace std; int main(void) ...

  9. BZOJ 3261: 最大异或和( 可持久化trie )

    搞成前缀和然后就可以很方便地用可持久化trie维护了.时间复杂度O((N+M)*25) -------------------------------------------------------- ...

  10. 汉化testlink

    testlink版本:1.9.13 1.登录testlink后,打开my setting(左上角小人人) 2.Locale 选择chinese,然后点击save 3.over,汉化完毕