原来在写MFC的时候感觉界面太丑太单调了,想自己弄一个好看一点的APP,大多皮肤要么收费要么不好用。后来看到Duilib皮肤库,果然很强大。下面看下简介 国内首个开源 的directui 界面库,开放,共享,惠众,共赢,遵循bsd协议,可以免费用于商业项目,目前支持Windows 32 、Window CE、Mobile等平台。 Duilib 是一款强大的界面开发工具,可以将用户界面和处理逻辑彻底分离,极大地提高用户界面的开发效率。提供所见即所得的开发工具UIDesigner。使用DirectUI后将使得我们的设计人员彻底解 放,不会受到开发的束缚,可以充分地发挥其设计能力来设计软件界面,并参与到用户界面开发过程中。 Duilib 目前支持Windows 32 、Window CE、Mobile等平台,使用C++开发,遵循BSD协议,可以免费用于商业项目 。 DirectUI界面库 取名自微软的一个窗口类名“DirectUIHWND”,意为Paint on parent dc directly。 即子窗口不以窗口句柄的形式创建,只是逻辑上的窗口,绘制在父窗口之上。 DirectUI界面库使用XML来描述界面风格,界面布局,可 以很方便的构建高效,绚丽的,非常易于扩展的界面。从而很好的将界面和逻辑分离,同时易于实现各种超炫的界面效果如换色,换肤,透明等。
认识了这玩意儿现在开始动手吧,首先创建一个Win32工程,名字任意,注意:Windows应用程序。然后把相关的头文件复制到工程的Duilib目录(便于区分),如图:
然后在stdafx.h头文件末尾加上以下代码:
认识了这玩意儿现在开始动手吧,首先创建一个Win32工程,名字任意,注意:Windows应用程序。然后把相关的头文件复制到工程的Duilib目录(便于区分),如图:
然后在stdafx.h头文件末尾加上以下代码:
// TODO: 在此处引用程序需要的其他头文件 #include我用的是Unicode工程,库也是UNICODE格式编译的。如果你是多字符集就需要重新编译Duilib工程。然后在CPP中实现DUILIB的界面类//一定要加此头文件,uirichedit.h 报错:error C2143: 语法错误 : 缺少“;”(在“*”的前面) #include "Duilib\UIlib.h" using namespace DuiLib; #ifdef _DEBUG #pragma comment(lib, "DuiLib_d.lib")//debug #else #pragma comment(lib, "DuiLib.lib")//release #endif
// DUIDemo.cpp : 定义应用程序的入口点。 // #include "stdafx.h" #include "DUIDemo.h" class CFrameWindowWnd : public CWindowWnd, public INotifyUI { public: CFrameWindowWnd() { } ~CFrameWindowWnd() { } LPCTSTR GetWindowClassName() const { return _T("UIMainFrame"); } UINT GetClassStyle() const { return UI_CLASSSTYLE_FRAME | CS_DBLCLKS; } void OnFinalMessage(HWND /*hWnd*/) { delete this; } void Init() { } void Notify(TNotifyUI& msg) { } LRESULT HandleMessage(UINT uMsg, WPARAM wParam, LPARAM lParam) { if( uMsg == WM_CREATE ) { m_pm.Init(m_hWnd); CDialogBuilder builder; CControlUI* pRoot = builder.Create(_T("DuiLib.xml"), (UINT)0, NULL, &m_pm); ASSERT(pRoot && "Failed to parse XML"); m_pm.AttachDialog(pRoot); m_pm.AddNotifier(this); Init(); return 0; } else if( uMsg == WM_DESTROY ) { ::PostQuitMessage(0L); } else if( uMsg == WM_ERASEBKGND ) { return 1; } LRESULT lRes = 0; if( m_pm.MessageHandler(uMsg, wParam, lParam, lRes) ) return lRes; return CWindowWnd::HandleMessage(uMsg, wParam, lParam); } public: CPaintManagerUI m_pm; }; int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow) { CPaintManagerUI::SetInstance(hInstance); CPaintManagerUI::SetResourcePath(CPaintManagerUI::GetInstancePath()); HRESULT Hr = ::CoInitialize(NULL); if( FAILED(Hr) ) return 0; CFrameWindowWnd* pFrame = new CFrameWindowWnd(); if( pFrame == NULL ) return 0; pFrame->Create(NULL, _T("DuiLib"), UI_WNDSTYLE_FRAME, WS_EX_WINDOWEDGE); pFrame->CenterWindow(); pFrame->ShowWindow(true); CPaintManagerUI::MessageLoop(); ::CoUninitialize(); return 0; }
收藏的用户(0) X
正在加载信息~
推荐阅读
最新回复 (0)
站点信息
- 文章2302
- 用户1336
- 访客10970171
每日一句
Qingming Festival invites us to honor ancestors with quiet reflection and respect.
清明节邀请我们以静思与敬意祭奠祖先。
清明节邀请我们以静思与敬意祭奠祖先。
新会员