#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)
{
if (msg.sType == _T("click"))
{
if (msg.pSender->GetName() == _T("btnHello"))
{
::MessageBox(NULL, _T("我是按钮"), _T("点击了按钮"), NULL);
}
}
} virtual LRESULT HandleMessage(UINT uMsg, WPARAM wParam, LPARAM lParam)
{
LRESULT lRes = ; if (uMsg == WM_CREATE)
{
// 方法1
//CControlUI *pWnd = new CButtonUI;
//pWnd->SetName(_T("btnHello")); // 控件的唯一标识
//pWnd->SetText(_T("Hello World")); // 设置文字
//pWnd->SetBkColor(0xFF00FF00); // 设置背景色 //m_PaintManager.Init(m_hWnd);
//m_PaintManager.AttachDialog(pWnd); //m_PaintManager.AddNotifier(this); // 添加控件响应消息,这样消息就会达到duilib的消息循环 // 方法2
m_PaintManager.Init(m_hWnd); CDialogBuilder builder;
CControlUI *pRoot = builder.Create(_T("duilib.xml"), NULL, NULL, &m_PaintManager, NULL);
ASSERT(pRoot && "Failed to parse XML"); m_PaintManager.AttachDialog(pRoot);
m_PaintManager.AddNotifier(this);
return lRes;
}
// 以下三个消息用于屏蔽系统标题栏
// WM_NCACTIVETE WM_NCCALCSIZE WM_NCPAINT
else if (uMsg == WM_NCACTIVATE)
{
if (!::IsIconic(m_hWnd))
{
return (wParam == ) ? TRUE : FALSE;
}
}
else if (uMsg == WM_NCCALCSIZE)
{
return ;
}
else if (uMsg == WM_NCPAINT)
{
return ;
} if (m_PaintManager.MessageHandler(uMsg, wParam, lParam, lRes))
{
return lRes;
} return __super::HandleMessage(uMsg, wParam, lParam);
} protected:
CPaintManagerUI m_PaintManager;
}; class CDuiXmlFrameWnd : public WindowImplBase
{
public:
// 实现以下三个纯虚函数
virtual LPCTSTR GetWindowClassName()const { return _T("DUIMainFrame"); }
virtual CDuiString GetSkinFile(){ return _T("duilib.xml"); }
virtual CDuiString GetSkinFolder(){ return _T(""); } // 将事件添加到消息队列
virtual LRESULT HandleMessage(UINT uMsg, WPARAM wParam, LPARAM lParam)
{
LRESULT lRes = ; if (uMsg == WM_CREATE)
{
// 方法1
//CControlUI *pWnd = new CButtonUI;
//pWnd->SetName(_T("btnHello")); // 控件的唯一标识
//pWnd->SetText(_T("Hello World")); // 设置文字
//pWnd->SetBkColor(0xFF00FF00); // 设置背景色 //m_PaintManager.Init(m_hWnd);
//m_PaintManager.AttachDialog(pWnd); //m_PaintManager.AddNotifier(this); // 添加控件响应消息,这样消息就会达到duilib的消息循环 // 方法2
m_PaintManager.Init(m_hWnd); CDialogBuilder builder;
CControlUI *pRoot = builder.Create(_T("duilib.xml"), NULL, NULL, &m_PaintManager, NULL);
ASSERT(pRoot && "Failed to parse XML"); m_PaintManager.AttachDialog(pRoot);
m_PaintManager.AddNotifier(this);
return lRes;
}
// 以下三个消息用于屏蔽系统标题栏
// WM_NCACTIVETE WM_NCCALCSIZE WM_NCPAINT
else if (uMsg == WM_NCACTIVATE)
{
if (!::IsIconic(m_hWnd))
{
return (wParam == ) ? TRUE : FALSE;
}
}
else if (uMsg == WM_NCCALCSIZE)
{
return ;
}
else if (uMsg == WM_NCPAINT)
{
return ;
} if (m_PaintManager.MessageHandler(uMsg, wParam, lParam, lRes))
{
return lRes;
} return __super::HandleMessage(uMsg, wParam, lParam);
} // 实现控件响应事件
virtual void Notify(TNotifyUI& msg)
{
if (msg.pSender->GetName() == _T("editHello"))
{
// 获取控件对象方法
CEditUI *pEdit = static_cast<CEditUI *>(m_PaintManager.FindControl(_T("editHello")));
}
// 处理控件响应事件
if (msg.sType == _T("click"))
{
if (msg.pSender->GetName() == _T("btnHello"))
{
::MessageBox(NULL, _T("我是按钮"), _T("点击了按钮"), NULL); // 人为修改控件焦点
CEditUI *pEdit2 = static_cast<CEditUI *>(m_PaintManager.FindControl(_T("editWorld")));
m_PaintManager.SetFocus(pEdit2, TRUE);
}
}
}
}; int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow)
{
// 实例句柄与渲染类关联
CPaintManagerUI::SetInstance(hInstance); // 设置资源的默认路径(设置和exe在同一个目录)
CPaintManagerUI::SetResourcePath(CPaintManagerUI::GetInstancePath()); /*CDuiFrameWnd duiFrame;
duiFrame.Create(NULL, _T("DUIWnd"), UI_WNDSTYLE_FRAME, WS_EX_WINDOWEDGE);
duiFrame.CenterWindow();
duiFrame.ShowModal();*/ // 方法2
CDuiXmlFrameWnd duixmlFrame;
duixmlFrame.Create(NULL, _T("DuiWnd"), UI_WNDSTYLE_FRAME, WS_EX_WINDOWEDGE);
duixmlFrame.CenterWindow();
duixmlFrame.ShowModal(); return ;
}

Duilib学习(一)的更多相关文章

  1. DuiLib学习笔记(二) 扩展CScrollbar属性

    DuiLib学习笔记(二) 扩展CScrollbar属性 Duilib的滚动条滑块默认最小值为滚动条的高度(HScrollbar)或者宽度(VScrollbar).并且这个值默认为16.当采用系统样式 ...

  2. Duilib学习笔记《06》— 窗体基类WindowImpBase

    在前面的例子中我们发现,窗口都是继承CWindowWnd.INotifyUI,然后重载相关函数去实现.显然,我们发现窗口的创建流程实际上都是差不多的,主要只是在OnCreate加载的配置文件不同等等… ...

  3. Duilib学习笔记《05》— 消息响应处理

    在Duilib学习笔记<04>中已经知道了如何将窗体显示出来,而如何处理窗体上的事件.消息呢? 一. 系统消息 窗体显示的时候我们就已经说了,窗体是继承CWindowWnd类的,对于窗体的 ...

  4. Duilib学习笔记《04》— 窗体显示

    在前面已经了解了duilib控件以及界面布局相关内容,接下来就要考虑该如何将xml中描述的布局通过界面展现出来.实际上在 Duilib学习笔记<01> 中我们已经简单提到过基本的流程及元素 ...

  5. Duilib学习笔记《03》— 控件使用

    在前面已经对duilib有个一个基本的了解,并且创建了简单的空白窗体.这仅仅只是一个开始,如何去创建一个绚丽多彩的界面呢?这就需要一些控件元素(按钮.文本框.列表框等等)来完善. 一. Duilib控 ...

  6. duilib学习 --- 360demo 学习

    我想通过360demo的学习,大概就能把握duilib的一般用法,同时引申出一些普遍问题,和普遍解决方法.并在此分享一些链接和更多内容的深入学习..... 原谅我是一个菜鸟,什么都想知道得清清楚楚.. ...

  7. DuiLib学习笔记5——标题栏不能正常隐藏问题

    我之前代码都是照着官方那个Duilib入门文档.doc来学习的.但是遇到一个问题,虽然他隐藏了windows的自带标题栏,可以自己绘画一个标题栏了,但是在这个标题栏下方,用力乱戳,就可能把系统自带的, ...

  8. Duilib学习笔记《07》— 资源加载

    Duilib的界面表现力能如此丰富,很大程度上得益于贴图描述的简单强大.通过之前的学习及参看相关例子,我们可以发现,在XML布局文件中,不管是窗体背景还是控件,都添加了对应的图片资源以此来美化界面.而 ...

  9. Duilib学习笔记《02》— 界面布局

    1. 界面描述XML文件 Duilib主要是通过XML来进行界面的布局配置,程序通过读取并解析XML文件来创建对应的窗体.DuiLib的页面布局分为三类:窗体(Window).容器(Contain)和 ...

  10. Duilib学习笔记《01》— duilib整体框架认识

    从GoogleCode上下载的duilib工程中附带的一副总体设计图(如下所示),可以先整体了解一下,有个初步的认识,对后续进一步深入了解学习会很有帮助. 通过设计图有了一个初步认识后,接下来开始进一 ...

随机推荐

  1. Hive thrift服务(将Hive作为一个服务器,其他机器可以作为客户端进行访问)

    步骤一:启动为前台:bin/hiveserver2 步骤二:启动为后台:nohup bin/hiveserver2 1>/var/log/hiveserver.log 2>/var/log ...

  2. iOS学习——UIAlertController详解

    在开发中,弹出提示框是必不可少的.这两天项目中统一对已经被iOS API废弃的UIAlertView和UIActionSheet进行替换,我们知道,UIAlertView和UIActionSheet都 ...

  3. 搬个小板凳,我们扯扯Docker的前生

    一.新瓶装旧酒 首先我们需要知道,Docker是一个"箩筐": 1.存储:Device Mapper.BtrFS.AUFS 2.名字空间:UTS.IPC.Mount.PID.Net ...

  4. 【django基础】

    一.MTV模型 Django的MTV分别代表: Model(模型):负责业务对象与数据库的对象(ORM) Template(模版):负责如何把页面展示给用户 View(视图):负责业务逻辑,并在适当的 ...

  5. React Native分享第三方遇到的问题

    这几天做APP的分享,好多东西都不懂,踩了好多坑,所幸现在做好了,开心^_^ 时间紧,随便记一下先. 1.签名文件要和各平台的签名一致 2.新浪微博和微信的分享要打包之后,加上签名了才可以(我一直不知 ...

  6. windbg关于.NET分析的扩展命令

    收到一个dump文件,运行环境的.net framework的详细版本是多少呢? dump信息与性能计数器结合分析时,想知道该dump运行的进程号是多少? dump定位到有效的堆栈信息,而对应的源码是 ...

  7. BZOJ2726: [SDOI2012]任务安排

    题目:http://www.lydsy.com/JudgeOnline/problem.php?id=2726 倒着做,前面的点对后面的点都是有贡献的. f[i]=min(f[j]+cost[i]*( ...

  8. python写一个DDos脚本(DOS)

    前言:突然想写,然后去了解原理 DDOS原理:往指定的IP发送数据包(僵尸网络),导致服务器 拒绝服务,无法正常访问. 0x01: 要用到的模块 scapy模块 pip install scapy 或 ...

  9. 再起航,我的学习笔记之JavaScript设计模式29(节流模式)

    节流模式 概念介绍 节流模式(Throttler): 对重复的业务逻辑进行节流控制,执行最后一次操作并取消其他操作,以提高性能. 优化滚动事件 有的时候我们再为滚动条添加动画的时候,会发现滚动条不停的 ...

  10. Nginx实战之反向代理WebSocket的配置实例

    http://www.jb51.net/article/112183.htm 最近在工作中遇到一个需求,需要使用 nginx 反向代理websocket,经过查找一番资料,目前已经测试通过,所以这篇文 ...