Duilib支持xml界面布局文件,使得界面设计与逻辑处理相分离。
需要以下几个步骤:
1、创建并初始化CPaintManagerUI对象。
2、创建CDialogBuilder对象,调用CDialogBuilder对象的Create函数加载xml界面布局文件,该函数返回界面元素根节点。使用UIDesigner工具编写xml界面布局文件。
3、调用CPaintManagerUI的AttachDialog將界面元素根节点附加到CPaintManagerUI对象中。
实例:
//Helloworld.h
- #pragma once
- #include "resource.h"
- #include "COMUTIL.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
//Helloworld.cpp
- #include "Helloworld.h"
- class CDuiFrameWnd : public CWindowWnd,public INotifyUI
- {
- public:
- CDuiFrameWnd()
- {
- m_pRoot = NULL;
- m_pHelloBtn = NULL;
- };
- virtual LPCTSTR GetWindowClassName() const { return _T("DUIMainFrame"); }
- UINT GetClassStyle() const { return UI_CLASSSTYLE_FRAME | CS_DBLCLKS; };
- void OnFinalMessage(HWND /*hWnd*/) { delete this; };
- virtual void Notify(TNotifyUI & msg)
- {
- if(msg.sType == _T("click"))
- {
- if (msg.pSender->GetName() == _T("btnHello"))
- {
- ::MessageBox(NULL,_T("我是按钮"),_T("点击了按钮"),NULL);
- }
- }
- }
- virtual LRESULT HandleMessage(UINT uMsg,WPARAM wParam,LPARAM lParam)
- {
- LRESULT lRes = 0;
- if( uMsg == WM_CREATE )
- {
- m_PaintManager.Init(m_hWnd);
- //从xml中加载界面
- CDialogBuilder builder;
- m_pRoot = builder.Create("main.xml",(UINT)0,NULL,&m_PaintManager);
- m_PaintManager.AttachDialog(m_pRoot);
- m_PaintManager.AddNotifier(this); //添加控件等消息响应,这样消息就会传达到duilib的消息循环
- m_pHelloBtn = m_PaintManager.FindControl(_T("btnHello"));
- if(m_pHelloBtn != NULL)
- {
- m_pHelloBtn->SetBorderSize(10);
- m_pHelloBtn->SetBkColor(0xff00ff00);
- }
- return lRes;
- }
- else if(uMsg == WM_PAINT)
- {
- }
- else if( uMsg == WM_DESTROY ) {
- ::PostQuitMessage(0L);
- }
- else if( uMsg == WM_ERASEBKGND ) {
- return 1;
- }
- lRes = 0;
- if(m_PaintManager.MessageHandler(uMsg,wParam,lParam,lRes) )
- return lRes;
- return CWindowWnd::HandleMessage(uMsg,lParam);
- }
- protected:
- CPaintManagerUI m_PaintManager;
- CControlUI *m_pHelloBtn;
- CControlUI *m_pRoot;
- };
- 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;
- CDuiFrameWnd* pFrame = new CDuiFrameWnd();
- if( pFrame == NULL )
- return 0;
- pFrame->Create(NULL,_T("简单测试demo-2"),UI_WNDSTYLE_FRAME,WS_EX_WINDOWEDGE);
- pFrame->CenterWindow();
- pFrame->ShowWindow(true);
- CPaintManagerUI::MessageLoop();
- ::CoUninitialize();
- return 0;
- }