本文共 3454 字,大约阅读时间需要 11 分钟。
一个简单的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;}
可以看出,这个程序分三个部分:
编译这个程序,出现如下效果:
点击红色区域的任意位置,窗口会立即关闭。这样我们就完成了最简单的一个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);}
编译运行,我们得到如下效果:
转载地址:http://wftzb.baihongyu.com/