博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Duilib—基础框架
阅读量:2168 次
发布时间:2019-05-01

本文共 3454 字,大约阅读时间需要 11 分钟。

  1. 基本框架

一个简单的Duilib程序一般是下面这个样子的:

// Duilib使用设置部分#pragma once#define WIN32_LEAN_AND_MEAN#define _CRT_SECURE_NO_DEPRECATE#include 
#include
#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

 

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

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;}

可以看出,这个程序分三个部分:

  1. Duilib使用设置部分,这个部分都是一些使用Duilib所需要的头文件和自动链接到相应的Duilib库,一般来说基本上不用改动。
  2. 窗口实例及消息响应部分,基本的窗口实现类和简单的消息响应,需要重点关注的是void Notify(TNotifyUI& msg)中的事件处理,这是Duilib程序最重要的部分。
  3. 程序入口及Duilib初始化部分,Duilib初始化和窗口创建。

 

编译这个程序,出现如下效果:

 

图片1

点击红色区域的任意位置,窗口会立即关闭。这样我们就完成了最简单的一个Duilib程序编写,虽然这个例子还不能展现Duilib的强大,但也算是麻雀虽小,肝胆俱全了。因为很多美观的界面都不使用系统的标题栏和边框这些非客户区绘制,我们也把这掉,修改

CFrameWindowWnd:: HandleMessage为:    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);        }        else if( uMsg == WM_NCACTIVATE ) {            if( !::IsIconic(m_hWnd) ) {                return (wParam == 0) ? TRUE : FALSE;            }        }        else if( uMsg == WM_NCCALCSIZE ) {            return 0;        }        else if( uMsg == WM_NCPAINT ) {            return 0;        }        LRESULT lRes = 0;        if( m_pm.MessageHandler(uMsg, wParam, lParam, lRes) ) return lRes;        return CWindowWnd::HandleMessage(uMsg, wParam, lParam);}

编译运行,我们得到如下效果:

 

图片2

 

转载地址:http://wftzb.baihongyu.com/

你可能感兴趣的文章
走进JavaWeb技术世界16:极简配置的SpringBoot
查看>>
初探Java设计模式1:创建型模式(工厂,单例等)
查看>>
初探Java设计模式2:结构型模式(代理模式,适配器模式等)
查看>>
初探Java设计模式3:行为型模式(策略,观察者等)
查看>>
初探Java设计模式4:一文带你掌握JDK中的设计模式
查看>>
初探Java设计模式5:一文了解Spring涉及到的9种设计模式
查看>>
Java集合详解1:一文读懂ArrayList,Vector与Stack使用方法和实现原理
查看>>
Java集合详解2:一文读懂Queue和LinkedList
查看>>
Java集合详解3:一文读懂Iterator,fail-fast机制与比较器
查看>>
Java集合详解4:一文读懂HashMap和HashTable的区别以及常见面试题
查看>>
Java集合详解5:深入理解LinkedHashMap和LRU缓存
查看>>
Java集合详解6:这次,从头到尾带你解读Java中的红黑树
查看>>
Java集合详解7:一文搞清楚HashSet,TreeSet与LinkedHashSet的异同
查看>>
Java集合详解8:Java集合类细节精讲,细节决定成败
查看>>
Java并发指南1:并发基础与Java多线程
查看>>
Java并发指南2:深入理解Java内存模型JMM
查看>>
Java并发指南3:并发三大问题与volatile关键字,CAS操作
查看>>
Java并发指南4:Java中的锁 Lock和synchronized
查看>>
Java并发指南5:JMM中的final关键字解析
查看>>
Java并发指南6:Java内存模型JMM总结
查看>>