我们要独立出来自己创建一个项目,在我们自己的项目上加皮肤这才是初衷。我的新建项目名为:duilibTest

在duilib根目录下面有个 Duilib入门文档.doc 我们就按这个教程开始入门

首先新建一个win32项目

去DuiLib根目录,把目录下DuiLib文件夹拷贝到新建项目的根目录。再把这个项目添加进我们解决方案中。

从教程里面把以下代码粘贴到我们项目的stdafx.h中

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

// Duilib使用设置部分

#pragma once

#define WIN32_LEAN_AND_MEAN

#define _CRT_SECURE_NO_DEPRECATE

#include <windows.h>

#include <objbase.h>

#include "..\DuiLib\UIlib.h"

using namespace DuiLib;

#ifdef _DEBUG

#   ifdef _UNICODE

#       pragma comment(lib, "..\\bin\\DuiLib_ud.lib")

#   else

#       pragma comment(lib, "..\\bin\\DuiLib_d.lib")

#   endif

#else

#   ifdef _UNICODE

#       pragma comment(lib, "..\\bin\\DuiLib_u.lib")

#   else

#       pragma comment(lib, "..\\bin\\DuiLib.lib")

#   endif

#endif

把duilibTest.cpp中,除了头文件引用的代码都删除,再把以下代码粘贴到duilibTest.cpp中

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

// 窗口实例及消息响应部分

class CFrameWindowWnd : public CWindowWnd, public INotifyUI

{

public:

CFrameWindowWnd() { };

LPCTSTR GetWindowClassName() const { return _T("UIMainFrame"); };

UINT GetClassStyle() const { return UI_CLASSSTYLE_FRAME | CS_DBLCLKS; };

void OnFinalMessage(HWND /*hWnd*/) { delete this; };

void Notify(TNotifyUI& msg)

{

if( msg.sType == _T("click") ) {

if( msg.pSender->GetName() == _T("closebtn") ) {

Close();

}

}

}

LRESULT HandleMessage(UINT uMsg, WPARAM wParam, LPARAM lParam)

{

if( uMsg == WM_CREATE ) {

m_pm.Init(m_hWnd);

CControlUI *pButton = new CButtonUI;

pButton->SetName(_T("closebtn"));

pButton->SetBkColor(0xFFFF0000);

m_pm.AttachDialog(pButton);

m_pm.AddNotifier(this);

return 0;

}

else if( uMsg == WM_DESTROY ) {

::PostQuitMessage(0);

}

LRESULT lRes = 0;

if( m_pm.MessageHandler(uMsg, wParam, lParam, lRes) ) return lRes;

return CWindowWnd::HandleMessage(uMsg, wParam, lParam);

}

public:

CPaintManagerUI m_pm;

};

// 程序入口及Duilib初始化部分

int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE /*hPrevInstance*/, LPSTR /*lpCmdLine*/, int nCmdShow)

{

CPaintManagerUI::SetInstance(hInstance);

CPaintManagerUI::SetResourcePath(CPaintManagerUI::GetInstancePath());

CFrameWindowWnd* pFrame = new CFrameWindowWnd();

if( pFrame == NULL ) return 0;

pFrame->Create(NULL, _T("测试"), UI_WNDSTYLE_FRAME, WS_EX_WINDOWEDGE);

pFrame->ShowWindow(true);

CPaintManagerUI::MessageLoop();

return 0;

}

此时编译可能会报错:LINK : fatal error LNK1104: 无法打开文件“..\bin\DuiLib_ud.lib”

一方面是没有拷贝lib文件进来,另外一方面,是编译duilib时应该采用UnicodeDebug模式

重新编译duilib后,在lib文件夹里找到DuiLib_ud.lib拷贝到bin文件夹里。把bin文件夹中的DuiLib_ud.dll拷贝到debug文件夹里。

再次编译duilibTest就能通过编译了。运行结果如下:

到了这一步说明你的duilib已经能正常使用了。接下来继续跟着文档走,我们来读取xml配置

首先改HandleMessage中的代码,把下面注释掉的代码改为新的

//CControlUI *pButton = new CButtonUI;

//pButton->SetName(_T("closebtn"));

//pButton->SetBkColor(0xFFFF0000);

//m_pm.AttachDialog(pButton);

CDialogBuilder builder;

CControlUI* pRoot = builder.Create(_T("test1.xml"), (UINT), NULL, &m_pm);

ASSERT(pRoot && "Failed to parse XML");

m_pm.AttachDialog(pRoot);

创建一个test1.xml,使用vs直接创建一个xml,确保xml文件编码是utf-8格式

在xml中写入如下代码

<?xml version="1.0" encoding="utf-8"?>

<Window mininfo="200,360" size=" 480,320 ">

  <Font name="幼圆" size="16" default="true" 

DuiLib学习笔记2.写一个简单的程序的更多相关文章

  1. DuiLib学习笔记2——写一个简单的程序

    我们要独立出来自己创建一个项目,在我们自己的项目上加皮肤这才是初衷.我的新建项目名为:duilibTest 在duilib根目录下面有个 Duilib入门文档.doc 我们就按这个教程开始入门 首先新 ...

  2. Linux系统学习笔记之 1 一个简单的shell程序

    不看笔记,长时间不用自己都忘了,还是得经常看看笔记啊. 一个简单的shell程序 shell结构 1.#!指定执行脚本的shell 2.#注释行 3.命令和控制结构 创建shell程序的步骤 第一步: ...

  3. laravel学习:php写一个简单的ioc服务管理容器

    php写一个简单的ioc服务管理容器 原创: 陈晨 CoderStory 2018-01-14 最近学习laravel框架,了解到laravel核心是一个大容器,这个容器负责几乎所有服务组件的实例化以 ...

  4. 【opencv学习笔记五】一个简单程序:图像读取与显示

    今天我们来学习一个最简单的程序,即从文件读取图像并且创建窗口显示该图像. 目录 [imread]图像读取 [namedWindow]创建window窗口 [imshow]图像显示 [imwrite]图 ...

  5. python 学习笔记 12 -- 写一个脚本获取城市天气信息

    近期在玩树莓派,前面写过一篇在树莓派上使用1602液晶显示屏,那么可以显示后最重要的就是显示什么的问题了. 最easy想到的就是显示时间啊,CPU利用率啊.IP地址之类的.那么我认为呢,假设可以显示当 ...

  6. UNP学习笔记2——从一个简单的ECHO程序分析TCP客户/服务器之间的通信

    1 概述 编写一个简单的ECHO(回复)程序来分析TCP客户和服务器之间的通信流程,要求如下: 客户从标准输入读入一行文本,并发送给服务器 服务器从网络输入读取这个文本,并回复给客户 客户从网络输入读 ...

  7. Django 学习笔记之六 建立一个简单的博客应用程序

    最近在学习django时建立了一个简单的博客应用程序,现在把简单的步骤说一下.本人的用的版本是python 2.7.3和django 1.10.3,Windows10系统 1.首先通过命令建立项目和a ...

  8. Ruby学习笔记2 : 一个简单的Ruby网站,搭建ruby环境

    Ruby on Rails website 的基础是 请求-返回 循环. 首先是浏览器请求服务器, 第二步,Second, in our Rails application, the route ta ...

  9. [原创]java WEB学习笔记12:一个简单的serlet连接数据库实验

    本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...

随机推荐

  1. git学习记录1(本地库管理)

    学习参考地址:https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000 本编随笔只是自己对 ...

  2. MySQL数据库中,将一个字段的值分割成多条数据显示

    本文主要记录如何在MySQL数据库中,将一个字符串分割成多条数据显示. 外键有时是以字符串的形式存储,例如 12,13,14 这种,如果以这种形式存储,则不能直接与其他表关联查询,此时就需要将该字段的 ...

  3. 21-Ubuntu-文件和目录命令-复制文件和目录-cp

    cp 将给出的文件或目录复制到另一个文件或目录,相当于DOS下的copy命令 选项 含义 -f 已经存在的目标文件直接覆盖,不提示 -i 覆盖文件前提示 -r 若给出的源文件是目录文件,则cp将递归复 ...

  4. Qt学习笔记----基础知识

    一.qt的本质 qt的本质是c++的图形界面类库,本身是mvc结构.qt能火最大程度 归功于它跨平台的特性,一次编码,多次编译应用. 注意:qt由于历史原因,经历了奇趣.诺基亚.digit公司,导致q ...

  5. 透彻理解并掌握JavaScript的this

    前言 无论是JavaScript新手还是老手,JavaScript中的this关键词可能都会令你困惑.本文旨在透彻地阐述this.读完本文,就再也不用怕JavaScript中的this了.你将会知道在 ...

  6. JS函数进阶

    函数的定义方式 函数声明 函数表达式 new Function 函数声明  function foo () { } 函数表达式  var foo = function () { ​ } 函数声明与函数 ...

  7. for in循环介绍以及陷阱

    大家都知道在JavaScript中提供了两种方式迭代对象: (1)for 循环: (2)for..in循环: 使用for循环进行迭代数组对象,想必大家都已经司空见惯了.但是,使用for.. in循环时 ...

  8. poj 1742 Coins(二进制优化多重背包)

    传送门 解题思路 多重背包,二进制优化.就是把每个物品拆分成一堆连续的\(2\)的幂加起来的形式,然后把最后剩下的也当成一个元素.直接类似\(0/1\)背包的跑就行了,时间复杂度\(O(nmlogc) ...

  9. BZOJ 1084 (SCOI 2005) 最大子矩阵

    1084: [SCOI2005]最大子矩阵 Time Limit: 10 Sec Memory Limit: 162 MB Submit: 3560 Solved: 1779 [Submit][Sta ...

  10. linux xargs命令一(与find ls等命令组合)(转)

    -p 操作具有可交互性,每次执行comand都交互式提示用户选择 -i -i 选项告诉 xargs 可以使用{}代替传递过来的参数, 建议使用-I,其符合POSIX标准 -I 格式: xargs  - ...