C++轻量级界面库DuiLib简介(二)—使用DuiLib
来源:互联网 发布:编程一小时网站 编辑:程序博客网 时间:2024/05/20 23:05
书接上文。
前面我们已经建立好test.xml文件了,现在要做的是把刚建好的xml文件和所用到的图标文件打包形成一个压缩包(test.zip)。在VS 编译器中导入这个test.zip的资源。我这里最后形成的ID是IDR_ZIPRES。一切准备就绪,下面就开始代码部分的说明了。
二、创建Dialog
新建一个win32项目,在_tWinMain函数中加入以下代码:
CPaintManagerUI::SetInstance(hInstance);CPaintManagerUI::SetResourcePath(CPaintManagerUI::GetInstancePath()); // 设置资源的默认路径(此处设置为和exe在同一目录)CTestUIDlg *pFrame = new CTestUIDlg(_T("test.xml"));pFrame->Create(NULL, _T("这是一个最简单的测试用exe,修改test.xml就可以看到效果"), UI_WNDSTYLE_FRAME, WS_EX_WINDOWEDGE);pFrame->CenterWindow();pFrame->ShowModal();CPaintManagerUI::MessageLoop();//!消息循环
以上代码用于创建出一个对话框并居中显示。
三、对话框类的介绍
上面代码中CTestUIDlg即是我们的对话框类,它继承于WindowImplBase类,WindowImplBase类是一个XML的包装类,封装了常用操作,以方便大家使用。 它是以XML作为界面描述的,所以用它的时候,我们必须将界面描述写到XML里。
下面是CTestUIDlg类的定义:
using namespace DuiLib;class CTestUIDlg: public WindowImplBase{public:virtual ~CTestUIDlg(void);virtual LPCTSTR GetWindowClassName() const{return _T("TestButtonDlg");}virtual CDuiString GetSkinFile(){return m_strXMLPath;}virtual CDuiString GetSkinFolder(){return _T("");}virtual LPCTSTR GetResourceID() const{return MAKEINTRESOURCE(IDR_ZIPRES);}virtual UILIB_RESOURCETYPE GetResourceType() const{return UILIB_ZIPRESOURCE; }explicitCTestUIDlg(LPCTSTR pszXMLPath);virtualvoid InitWindow();virtualCControlUI* CreateControl(LPCTSTR pstrClassName);virtualvoid Notify(TNotifyUI& msg);virtualLRESULT HandleMessage(UINT uMsg,WPARAM wParam,LPARAM lParam);private:CButtonUI*m_BtnOk;CButtonUI*m_BtnCancel;CButtonUI*m_BtnClose;CPaintManagerUIm_pm;CDuiStringm_strXMLPath;};
CTestUIDlg类前面实现了一些父类的虚函数,用于返回一些基本信息。最重要的是下面的5个函数,下面为你一一解析。
1、explicit CTestUIDlg(LPCTSTR pszXMLPath);构造函数,同其他构造函数一样,做一些初始化操作。传入的参数是xml文件路径,也就是test.xml的路径。具体代码如下:
CTestUIDlg::CTestUIDlg( LPCTSTR pszXMLPath ):m_strXMLPath(pszXMLPath),m_BtnOk(NULL),m_BtnCancel(NULL),m_BtnClose(NULL){}
2、void InitWindow();初始化窗口信息,根据前面xml文件中我们说的控件唯一标识,创建空间,其余功能相当于MFC下的OnInitDialog(),用于一些控件的初始化之类的。具体代码如下:
void CTestUIDlg::InitWindow(){m_pm= this->m_PaintManager;CenterWindow();m_BtnOk= static_cast<CButtonUI*>(m_pm.FindControl(_T("btnTest")));m_BtnCancel = static_cast<CButtonUI*>(m_pm.FindControl(_T("btnTest2")));m_BtnClose= static_cast<CButtonUI*>(m_pm.FindControl(_T("btnClose")));m_BtnClose->SetEnabled(false);}3、CControlUI* CreateControl(LPCTSTR pstrClassName);用于自定义控件的创建,暂时先return NULL,后面会为大家介绍到。
4、void Notify(TNotifyUI& msg);操作消息响应,一般用于点击操作等的响应。用于处理duilib自己定义的一套消息,其消息类型请参见duilib的UIDefine.h。具体代码如下:
void CTestUIDlg::Notify( TNotifyUI& msg ){if( msg.sType == _T("click") ) {if(msg.pSender==m_BtnOk){MessageBox(NULL,"点击确定按钮","sure",MB_OK);}else if (msg.pSender==m_BtnCancel){MessageBox(NULL,"点击取消定按钮","cancel",MB_OK);}if(msg.pSender==m_BtnClose){PostQuitMessage(0);}}}
5、LRESULT HandleMessage(UINT uMsg,WPARAM wParam,LPARAM lParam);消息响应,类似于MFC的DefWindowProc()。部分代码如下:
LRESULT CTestUIDlg::HandleMessage( UINT uMsg,WPARAM wParam,LPARAM lParam ){LRESULT lRes = 0;BOOL bHandled = TRUE;switch(uMsg){case WM_SIZE: lRes = OnSize(uMsg, wParam, lParam, bHandled); break;case WM_NCPAINT: lRes = OnNcPaint(uMsg, wParam, lParam, bHandled); break;case WM_GETMINMAXINFO: lRes = OnGetMinMaxInfo(uMsg, wParam, lParam, bHandled); break;case WM_SYSCOMMAND: lRes = OnSysCommand(uMsg, wParam, lParam, bHandled); break;case WM_NCCALCSIZE: lRes = OnNcCalcSize(uMsg, wParam, lParam, bHandled); break;}return WindowImplBase::HandleMessage(uMsg,wParam,lParam);}
- C++轻量级界面库DuiLib简介(二)—使用DuiLib
- Duilib界面库使用简介
- C++ 轻量级界面库DuiLib库简介(一)—XML基础配置
- 初识Duilib界面库
- Duilib界面库入门笔记(一)
- 开源界面库Duilib
- Duilib界面库学习笔记
- duilib 界面库资料收集
- 【duilib界面库】duilib界面库(1)初识duilib界面库及编译配置详解
- DuiLib(6)——界面管家CPaintManagerUI的函数简介
- C++界面库 《duilib入门到精通》- duilib概述
- Duilib
- DuiLib
- duilib
- MFC中混合使用Duilib制作界面
- DuiLib界面库学习笔记(源码获取和编译)
- DuiLib界面库学习笔记(开始例子)
- DuiLib库
- 马特-福特无奈为何外界对卡特勒评价糟糕
- jQuery获取Select选中的Text和Value,根据Value值动态添加属性等
- 使用ant打包android生成apk文件
- org.springframework.beans.MethodInvocationException: Property 'cacheManager' threw exception; neste
- hdu5319(模拟)
- C++轻量级界面库DuiLib简介(二)—使用DuiLib
- 802.11N blockACK
- Spring 框架简介
- 欢迎使用CSDN-markdown编辑器
- 包含min函数的栈
- 计算机中丢失 msvcr110.dll 怎么办
- Broken pipe 和 connection reset by peer
- Leetcode-gas-station
- PHP current() 函数