Duilib

来自删除百科
本条目“Duilib”在中文维基百科已被删除(其它版本),这是一个删除前的存档副本。
Alberth2删除了Duilib,理由是:
存廢討論通過:[[Wikipedia:頁面存廢討論/記錄/2012/09/16]]。
这个理由未必准确 (为什么?)

本条目共存留89天:

  • 创建于:2012-06-25
  • 删除于:2012-09-23
  • 贡献者:6人
  • 编辑:38次
  • 浏览:无数据
请阅读免责声明。删除百科只是中文维基百科被删除条目的存档。   Alert icon 建议删除本条目

本条目在2012/09/16被提交删除。理由是:“关注度不足, 已掛模版30天”

本条目在2012-08-17T13:18:45+00:00被标记为不符合通用关注度指引,或下列標準:傳記、虛構事物、發明研究或網站。

Duilib是一个开源的DirectUI界面库,使用C++语言开发,运行于windows平台。该库为开源项目,遵循BSD许可证[1][2]。

简介

Duilib由中国大陆开发者"当个傻瓜蛋"基于viksoe的windowless开发[3],并且开源。该库使用c++语言开发,使用流行的DirectUI技术构建用户界面,采用纯Win32 API,不依赖MFC等大型类库,部署体积小。

项目成员

  • 当个傻瓜蛋:项目创建者[4]
  • 踏雪流云:Duilib UI设计器开发者
  • achellies:Duilib开发者,Duilib WinCE移植版维护者
  • tojen:Duilib开发者,维护者
  • 李军辉:Duilib开发者,维护者

应用案例

已知的有一定影响力的应用案例有“华为网盘客户端”、“酷我音乐”。

快速入门

下载并编译Duilib

使用SVN客户端从 http://duilib.googlecode.com/svn/trunk/ 下载最新代码,用Visual Studio(6,2005或2010)打开DuiLib.sln并生成解决方案。

HelloWorld

  • 创建一个win32空项目,命名为helloworld,复制Duilib项目文件下的bin\duilib*.dll、bin\duilib*.lib、duilib\UI*.h、duilib\WebBrowserEventHandler.h到helloworld项目目录下
  • 添加helloworld.h
#pragma once

#define WIN32_LEAN_AND_MEAN             //  从 Windows 头文件中排除极少使用的信息

#include <windows.h>
#include <objbase.h>
#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 CMainForm : public CWindowWnd, public INotifyUI 
{
public: 
     CMainForm() { }; 
     LPCTSTR GetWindowClassName() const { return _T("UIMainForm"); }; 
     UINT GetClassStyle() const { return UI_CLASSSTYLE_FRAME | CS_DBLCLKS; }; 
     void OnFinalMessage(HWND /*hWnd*/) { delete this; }; 
     void Notify(TNotifyUI& msg);
     LRESULT HandleMessage(UINT uMsg, WPARAM wParam, LPARAM lParam);

public: 
     CPaintManagerUI m_pm; 
};
  • 添加helloworld.cpp
#include "helloworld.h"

//实现窗体类方法:Duilib消息处理
void CMainForm::Notify(TNotifyUI& msg)
{
     if( msg.sType == _T("click") ) { 
          if( msg.pSender->GetName() == _T("btnClose") ) { 
               Close(); 
          } 
     } 
}

//实现窗体类方法:Windows消息处理
LRESULT CMainForm::HandleMessage(UINT uMsg, WPARAM wParam, LPARAM lParam) 
{
     if( uMsg == WM_CREATE ) { 
          m_pm.Init(m_hWnd);       
          CControlUI *pButton = new CButtonUI;      //动态创建一个按钮
          pButton->SetName(_T("btnClose")); 
          pButton->SetBkColor(0xFFFF0000); 
          pButton->SetText(_T("点击我关闭窗体"));
          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); 
}

//程序入口及Duilib初始化部分 
int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE /*hPrevInstance*/, LPSTR /*lpCmdLine*/, int nCmdShow)
{ 
     CPaintManagerUI::SetInstance(hInstance); 
     CPaintManagerUI::SetResourcePath(CPaintManagerUI::GetInstancePath()); 
 
     HRESULT Hr = ::CoInitialize(NULL);
     if( FAILED(Hr) ) return 0;

     CMainForm* pMainForm = new CMainForm();
     if( pMainForm == NULL ) return 0; 
     pMainForm->Create(NULL, _T("Helloworld"), UI_WNDSTYLE_FRAME, WS_EX_WINDOWEDGE); 
     pMainForm->ShowWindow(true); 

     CPaintManagerUI::MessageLoop(); 
 
     ::CoUninitialize();
     return 0; 
}
  • 按F5运行

UI设计

响应事件

换肤

API参考

消息类型

消息 说明 Sender
click 鼠标点击 CButtonUI[5]
dropdown 下拉显示 CComboUI[6]
headerclick 点击列标题 CListHeaderItemUI[7]
itemactivate CListElementUI[8]、CListContainerElementUI[9]
itemclick 单击选项 CListLabelElementUI[10]、CListContainerElementUI[11]
itemselect 选择选项 CComboUI[12]、CListUI[13]
killfocus 失去焦点 CControlUI[14]
link CTextUI[15]、CListTextElementUI[16]
menu CButtonUI[17]、CControlUI[18]
return 回车 CEditWnd、CRichEditUI
scroll 滚动 CScrollBarUI
selectchanged 变更选项 COptionUI
setfocus 获得焦点 CControlUI
showactivex CActiveXUI
textchanged 文本被改变 CEditWnd
tabselect 标签页被选中 CTabLayoutUI
timer CControlUI
valuechanged 值发生变化 CSliderUI
windowinit 窗体初始化

Q&A

范例

外部链接

参考资料