配置duilib库

一个简单的使用Duilib程序一般要在stdafx.h中进行配置(链接duilib的文件,包括头文件)。通常的配置代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#pragma once
#define WIN32_LEAN_AND_MEAN       
#define _CRT_SECURE_NO_DEPRECATE
 
#include <windows.h>
#include <objbase.h>
#include "..\DuiLib\UIlib.h"
usingnamespaceDuiLib;
 
#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

工程之间不同的相对目录,代码中的lib,头文件的目录一样。根据实际情况需要做相应变化。

编写工程的主窗口

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
// 窗口实例及消息响应部分
classCFrameWindowWnd : publicCWindowWnd,publicINotifyUI
{
public:
   CFrameWindowWnd() { };
   LPCTSTRGetWindowClassName() constreturn_T("UIMainFrame");};
   UINTGetClassStyle() constreturnUI_CLASSSTYLE_FRAME | CS_DBLCLKS; };
   voidOnFinalMessage(HWND/*hWnd*/) { deletethis; };
 
   voidNotify(TNotifyUI& msg)
   {
      if( msg.sType == _T("click") ) {
 
           if( msg.pSender->GetName() == _T("closebtn") ) {
 
                Close();
 
           }
 
       }
 
    }
     
    LRESULTHandleMessage(UINTuMsg, WPARAMwParam, LPARAMlParam)
    {
       if( uMsg == WM_CREATE )
       {
           m_pm.Init(m_hWnd);
            
           CControlUI *pButton = newCButtonUI;
           pButton->SetName(_T("closebtn"));
           pButton->SetBkColor(0xFFFF0000);
            
           m_pm.AttachDialog(pButton);
           m_pm.AddNotifier(this);
 
           return0;
       }
       elseif( uMsg == WM_DESTROY )
       {
           ::PostQuitMessage(0);
       }
 
       LRESULTlRes = 0;
       if( m_pm.MessageHandler(uMsg, wParam, lParam, lRes) ) returnlRes;
 
       returnCWindowWnd::HandleMessage(uMsg, wParam, lParam);
    }
     
public:
   CPaintManagerUI m_pm;
};

在winmain处加入消息循环及Duilib初始化部分,窗口创建

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// 程序入口及Duilib初始化部分
intAPIENTRY WinMain(HINSTANCEhInstance,HINSTANCE/*hPrevInstance*/LPSTR/*lpCmdLine*/intnCmdShow)
{
   CPaintManagerUI::SetInstance(hInstance);
   CPaintManagerUI::SetResourcePath(CPaintManagerUI::GetInstancePath());
 
   CFrameWindowWnd* pFrame = newCFrameWindowWnd();
   if( pFrame == NULL ) return0;
 
   pFrame->Create(NULL, _T("测试"), UI_WNDSTYLE_FRAME, WS_EX_WINDOWEDGE);
   pFrame->ShowWindow(true);
    
   CPaintManagerUI::MessageLoop();
 
   return0;
}

 

在自己的工程中使用开源界面库Duilib的更多相关文章

  1. C++100款开源界面库[转]

    (声明:Alberl以后说到开源库,一般都是指著名的.或者不著名但维护至少3年以上的.那些把代码一扔就没下文的,Alberl不称之为开源库,只称为开源代码.这里并不是贬低,像Alberl前面那个系列的 ...

  2. C++ 100款开源界面库 (10)

    (声明:Alberl以后说到开源库,一般都是指著名的.或者不著名但维护至少3年以上的.那些把代码一扔就没下文的,Alberl不称之为开源库,只称为开源代码.这里并不是贬低,像Alberl前面那个系列的 ...

  3. 仿迅雷播放器教程 -- C++ 100款开源界面库 (10)

      (声明:Alberl以后说到开源库,一般都是指著名的.或者不著名但维护至少3年以上的.那些把代码一扔就没下文的,Alberl不称之为开源库,只称为开源代码.这里并不是贬低,像Alberl前面那个系 ...

  4. 曲线控件我一直用codeproject上的那几个(C++ 100款开源界面库)

    Alberl#23楼[楼主] 2013-11-04 11:47 Alberl @baita00引用看了大神的教程,真的不错,学习了很多东西,^_^.这节教程里,大神好像在找曲线控件,是吗?大神有什特殊 ...

  5. 在vc中使用xtremetoolkit界面库-----安装及环境配置

    近期想用一下xtremetoolkitPro界面库.网上的使用教程资源也不多,当中着实遇到了很多的困难,毕竟是首次使用. 首先当然是配置发开环境了: 我使用的是vc6.0+xtremetoolkitP ...

  6. Android开源界面库--ResideMenu用法

    网上关于ResideMenu用法的教程很多,但基本上全是从Github上copy下来的,Gitbub上给出的了对应的demo,但是由于我的IDE原因吧,demo一直导入不成功.为此自己又捣鼓了一翻,终 ...

  7. WPF开源界面库及控件

    WPF开源项目 WPF有很多优秀的开源项目,我以为大家都知道,结果,问了很多人,其实他们不知道.唉,太可惜了! 先介绍两个比较牛逼的界面库 1.MaterialDesignInXamlToolkit ...

  8. WPF开源界面库

    WPF开源项目 WPF有很多优秀的开源项目,我以为大家都知道,结果,问了很多人,其实他们不知道.唉,太可惜了! 先介绍两个比较牛逼的界面库 1.MaterialDesignInXamlToolkit ...

  9. [C++] 在Visual Studio工程中管理C++第三方库

    目前的项目依赖于很多第三方库,每次要再一个新的环境编译/运行,都要花很长时间先编译/安装各种第三方库,而且会出现各种问题,因此决定将所有第三方库编译好之后,放入工程的子目录中,以后就不用重复编译了. ...

随机推荐

  1. DXP 常用功能

    1. PCB布板篇 t+s: 从原理图对应到pcb图中 F11: 修改顶层,底层信息 v+f: 回到PCB板中 i+l: 放置到画的矩形框内 对齐功能: ctrl + shift + t: 顶部对齐 ...

  2. IPv6 三个访问本地地址的小Tips

    最近发现家里宽带支持IPv6了,这里分享三个利用IPv6访问本地地址(内网地址)的方法. 通常来说,我们用localhost来代表本地地址127.0.0.1.其实在IPv6中有他自己的表示方法ip6- ...

  3. Python: 比较两个字典是否相等

    有些情况下会遇到比较两个字典是否相等的问题 直观来想,会比较键是否一致,其对应的值是否相等 python中,还有有另外两种方法: 直接使用== a = {'a': 1, 'b': 2} b = {'a ...

  4. Activiti学习笔记5 — 常用API解析

    常用API解析: 一.ProcessEngineConfiguration 流程引擎配置对象(配置数据库连接4个大配置和建表策略) 二.ProcessEngine          流程引擎核心对象( ...

  5. Largest Submatrix

    Largest Submatrix 给出一个\(n\times m\)的网格,网格里只放有字符a,b,c,d,w,x,,z,现在你可以将其中的w换成a,b,把x换成b,c,把y换成a,c,把z换成a, ...

  6. mysql连接卡死,很多线程sleep状态,导致CPU中mysqld占用率极高

    关闭所有 .................................. .连接: ##把全部的MySQL连接kill掉for i in $(mysql -uroot -p123456 -Bse ...

  7. Java 多线程 - 原子操作AtomicInteger & CAS(Compare-and-Swap)

    原子类简介:https://www.cnblogs.com/stephen0923/p/4505902.html AtomicInteger 介绍: https://yuwenlin.iteye.co ...

  8. python 之单例模式

    单例模式1 单例=>只有一个单例2 静态方法+静态字段3 所有实例中等转的内容相同时 用单例模式class Sqllite: __instance=None def __init__(self) ...

  9. 选择器zuoye

    代码: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title ...

  10. C/C++实现单向循环链表(尾指针,带头尾节点)

    C语言实现单向循环链表,主要功能为空链表创建,链表初始化(头插法,尾插法),链表元素读取,按位置插入,(有序链表)按值插入,按位置删除,按值删除,清空链表,销毁链表. 单向循环链表和单向链表的区别:( ...