duilib教程之duilib入门简明教程3.第一个程序 Hello World
小伙伴们有点迫不及待了么,来看一看Hello World吧:新建一个空的win32项目,新建一个main.cpp文件,将以下代码复制进去:
- #include <windows.h>
- #include <tchar.h>
- int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow)
- {
- ::MessageBox(NULL, _T("Hello World !"), NULL, NULL);
- return 0;
- }
复制代码
运行即可看到如下结果:
![]()
咦,这不是win32程序么,你小子忽悠我?
~O(∩_∩)O~ 这正是Alberl想要说的:duilib仅仅是一个基于win32的UI库而已,并不是用了duilib以后,它就不是win32程序了。
很多小伙伴在群里问怎么加托盘,加程序图标等等,可能觉得duilib应该会像MFC一样提供很多封装好的类;或者觉得duilib有实现托盘的功能;或者觉得duilib完全替代了win32和MFC。所以这里Alberl提醒下: duilib并没有像MFC那样把所有的东西全包了,它仅仅包装了UI部分而已,其他的还是需要用win32、MFC的知识,所以除了UI部分,其他的都和duilib木有关系,小伙伴们直接搜索windows相应的关键字就行啦。
再次强调:把duilib当作一个类库用,而不是一个语言、IDE、框架 ~(^o^)/~
下面我们来看一看duilib的Hello World。
(注意:
1、本教程使用的是duilib目前最新的代码,不会下载最新代码的,请阅读【2013 duilib入门简明教程 -- VS环境配置(2)】
2、编译错误的,说明还没配置好环境,请阅读【2013 duilib入门简明教程 -- VS环境配置(2)】
3、鉴于许多网友后面有各种小问题,所以建议大家先下载整个教程的源码,下载请进【2013 duilib入门简明教程 -- 总结 (20)】
)
- #pragma once
- #include <UIlib.h>
- using namespace DuiLib;
- #ifdef _DEBUG
- # ifdef _UNICODE
- # pragma comment(lib, "DuiLib_ud.lib")
- # else
- # pragma comment(lib, "DuiLib_d.lib")
- # endif
- #else
- # ifdef _UNICODE
- # pragma comment(lib, "DuiLib_u.lib")
- # else
- # pragma comment(lib, "DuiLib.lib")
- # endif
- #endif
- class CDuiFrameWnd : public CWindowWnd, public INotifyUI
- {
- public:
- virtual LPCTSTR GetWindowClassName() const { return _T("DUIMainFrame"); }
- virtual void Notify(TNotifyUI& msg) {}
- virtual LRESULT HandleMessage(UINT uMsg, WPARAM wParam, LPARAM lParam)
- {
- LRESULT lRes = 0;
- if( uMsg == WM_CREATE )
- {
- CControlUI *pWnd = new CButtonUI;
- pWnd->SetText(_T("Hello World")); // 设置文字
- pWnd->SetBkColor(0xFF00FF00); // 设置背景色
- m_PaintManager.Init(m_hWnd);
- m_PaintManager.AttachDialog(pWnd);
- return lRes;
- }
- if( m_PaintManager.MessageHandler(uMsg, wParam, lParam, lRes) )
- {
- return lRes;
- }
- return __super::HandleMessage(uMsg, wParam, lParam);
- }
- protected:
- CPaintManagerUI m_PaintManager;
- };
- int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow)
- {
- CPaintManagerUI::SetInstance(hInstance);
- CDuiFrameWnd duiFrame;
- duiFrame.Create(NULL, _T("DUIWnd"), UI_WNDSTYLE_FRAME, WS_EX_WINDOWEDGE);
- duiFrame.ShowModal();
- return 0;
- }
复制代码
![]()
一个Hello World就完成了,是不是很简单呢^_^
PS:上述代码除了显示了文字以外,还有以下特点:
1、鼠标移到客户区(绿色部分)时,鼠标样式会变成手型
2、调整窗口大小以及最大化时,Hello World会自适应窗口的大小,一直都居中
3、如果想改变背景颜色的话,直接调用SetBkColor就行啦,是不是比win32和MFC方便呢~(^o^)/~
duilib教程之duilib入门简明教程3.第一个程序 Hello World的更多相关文章
- duilib教程之duilib入门简明教程17.事件处理和消息响应
界面的显示方面就都讲完啦,下面来介绍下控件的响应. 前面的教程只讲了按钮和Tab的响应,即在Notify函数里处理.其实duilib还提供了另外一种响应的方法,即消息映射DUI_BEGIN_ME ...
- duilib教程之duilib入门简明教程14.部分bug 2
上一个教程中提到了ActiveX的Bug,即如果主窗口直接用变量生成,则关闭窗口时会产生崩溃 如果用new的方式生成,则不会崩溃,所以给出一个临时的快速解决方案,即主窗口都用new生成,_t ...
- duilib教程之duilib入门简明教程15.自绘控件
在[2013 duilib入门简明教程 -- 复杂控件介绍 (13)]中虽然介绍了界面设计器上的所有控件,但是还有一些控件并没有被放到界面设计器上,还有一些常用控件duilib并没有提供(比如菜单控件 ...
- duilib教程之duilib入门简明教程13.复杂控件介绍
首先将本节要介绍的控件全部拖到界面上,并调整好位置,如图: 然后将Name属性改成其他名字, 不能是[控件名+UI+数字]这种,因为这是DuiDesigner默认的名字,它不会实际写 ...
- duilib教程之duilib入门简明教程11.部分bug
一.WindowImplBase的bug 在第8个教程[2013 duilib入门简明教程 -- 完整的自绘标题栏(8)]中,可以发现窗口最大化之后有两个问题, 1.最大化按钮的样式还是没 ...
- duilib教程之duilib入门简明教程1.前言
关于duilib的介绍就不多讲了,一来不熟,二来小伙伴们想必已经对比了多个界面库,也无需赘述.下面进入正题: 不看广告看疗效! 已有众多知名公司采用duilib做为界面库,如华为网盘.PPS(P ...
- duilib教程之duilib入门简明教程9.界面布局
上一个教程实现的标题栏代码中,并没有看到处理自适应窗口大小的代码,但是窗口大小变化后,按钮的位置会跟着变化,这是因为我们将按钮放到了HorizontalLayout.VerticalLayout,这样 ...
- duilib教程之duilib入门简明教程2.VS环境配置
既然是入门教程,那当然得基础点,因为搜索duilib相关资料时,发现有些小伙伴到处都是编译错误,以及路径配置错误等等,还有人不知道SVN,然后一个个文件手动下载的. 其实吧,duilib的定位好 ...
- duilib教程之duilib入门简明教程16.结合win32和MFC
虽然duilib自带在MFC中使用duilib的Demo,但只是MFC窗口和duilib窗口不重叠的情况.如果要在MFC窗口中嵌入duilib控件,或者在duilib控件中嵌入MFC的控件的话,就没有 ...
随机推荐
- Unity 如何修改 particle system 的 start color 属性
代码如下: ParticleSystem ps = GetComponent<ParticleSystem>(); var main = ps.main; var color = Colo ...
- HDU-1754-I Hate It-线段树-求区间最值和单点修改
开学新拉的题目,老题重做,思路会稍微比之前清晰,不过这也算是一点点进步了. 很多学校流行一种比较的习惯.老师们很喜欢询问,从某某到某某当中,分数最高的是多少. 这让很多学生很反感. 不管你喜不喜欢,现 ...
- 【校OJ】选网线
暑假学校OJ上的题目. 一道很有意思的二分. 题意:三个数组,每个数组各选一个数出来看是否能组成目标数. 题解:前两个数组两两的和组合一下,二分第三个数组,找是否能组成目标数. 代码: #includ ...
- 在CentOS 7上安装常用的YUM源
参考地址:https://blog.csdn.net/u010048823/article/details/51298183 以epel源为例子,来讲解如何添加额外的YUM源. Extra Packa ...
- 22个Photoshop网页设计教程网站推荐
这些网站都会经常更新一些优秀且高质量的Web界面设计教程.如果你热爱网页设计并且经常搜集各种界面设计教程,那么你一定要把下面这些网站收藏起来. 您还可以参考以下网页设计相关教程及资源:<Web ...
- Qt学习笔记----基础知识
一.qt的本质 qt的本质是c++的图形界面类库,本身是mvc结构.qt能火最大程度 归功于它跨平台的特性,一次编码,多次编译应用. 注意:qt由于历史原因,经历了奇趣.诺基亚.digit公司,导致q ...
- java笔试之字符串加密
有一种技巧可以对数据进行加密,它使用一个单词作为它的密匙.下面是它的工作原理:首先,选择一个单词作为密匙,如TRAILBLAZERS.如果单词中包含有重复的字母,只保留第1个,其余几个丢弃.现在,修改 ...
- MD5/SHA1/Hmac_SHA1
1.MD5 #import <CommonCrypto/CommonDigest.h> + (NSString *) md5:(NSString *) input { const char ...
- linq语句,常用的查询,模糊查询,实体查询
查询: //List是要查询的实体列表的集合 List.FindAll(n => n.NAME == NAME), //NAME变量是要查询的条件 模糊查询 List.FindAll(s ...
- Java创建List、Map等集合对象的同时进行赋值操作
title: Java创建List.Map等集合对象的同时进行赋值操作 date: 2019-11-28 23:25:47 tags: JavaSE categories: JavaSE 问题简介 ...