- #pragma once
- /************************
- *Duiib XML配置界面
- *Author:邱于涵
- *2016年12月18日23:43:35
- *********************/
- #include<Windows.h>
- //Duilb的头文件
- #include<UIlib.h>
- //Duilib的命名空间
- using namespace DuiLib;
- //|根据宏判断语句 判断是否Unicode 以及相应的动态链接库
- #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
- // CDuiWnd 继承于 CWindowWnd 主要实现两个虚函数 GetWindowClassName
- //和 HandleMessage(相应消息)
- //如果需要相应控件的消息还需要继承INotifyUI实现虚函数Notify
- //每个CWindowWnd必须包含CPaintMessageUI界面管理器
- class CDuiFrameWnd :public CWindowWnd,public INotifyUI
- {
- protected:
- CPaintManagerUI m_PaintManager;
- public:
- //WindowClassName
- virtual LPCTSTR GetWindowClassName()const{ return _T("DUIWND"); }
- //响应控件消息
- virtual void Notify(TNotifyUI & msg)
- {
- //消息类型为点击
- if (msg.sType == _T("click"))
- {
- //这里的 GetName是唯一的,相当于MFC里面的ID
- if (msg.pSender->GetName() == _T("btnHello"))
- {
- MessageBox(NULL,_T("提示"),_T("你点击了"),NULL);
- }
- }
- }
- //响应窗口消息
- virtual LRESULT HandleMessage(UINT uMsg,WPARAM wParam,LPARAM lParam)
- {
- //返回值
- LRESULT lRes = 0;
- //WM_CREATE消息
- if (uMsg == WM_CREATE)
- {
- //把自己的窗口句柄 与窗口绘制管理器挂钩
- m_PaintManager.Init(m_hWnd);
- //设置关联的xml文件
- CDialogBuilder builder;
- CControlUI * pRoot = builder.Create(_T("UISkin1.xml"),(UINT)0,NULL,&m_PaintManager);
- //把这个控件绘制到窗口上
- m_PaintManager.AttachDialog(pRoot);
- //// 把自己加入到CPaintManagerUI的m_aNotifiers数组中,用于处理Notify函数
- m_PaintManager.AddNotifier(this);
- return lRes;//返回
- }
- //如果此消息没有处理 就交给 绘制管理器 进行默认处理(Notify函数将在这里被绘制管理器调用)
- if (m_PaintManager.MessageHandler(uMsg,wParam,lParam,lRes))
- {
- return lRes;
- }
- //如果还没处理就交给 CWindowWnd处理()
- return __super::HandleMessage(uMsg,lParam);
- }
- };
- int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE preInstance,LPSTR lpCmdLin,int nCmdShow)
- {
- //将程序实例 与 皮肤绘制管理器挂钩
- CPaintManagerUI::SetInstance(hInstance);
- //这里设置 资源的路径(也就是xml皮肤文件在哪里~~(在实例的相同目录下))
- CPaintManagerUI::SetResourcePath(CPaintManagerUI::GetInstancePath());
- CDuiFrameWnd duiFrame;
- //Create创建窗口(发送WM_CREATE消息)
- duiFrame.Create(NULL,_T("涵涵的Duilib按钮实例"),WS_OVERLAPPEDWINDOW,WS_EX_WINDOWEDGE);
- //显示
- duiFrame.ShowModal();
- return 0;
- }
UISkins1.xml(这个可用DUIDesigner生成)
- <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
- <Window>
- <VerticalLayout enabled="true" width="400" height="400" bkimage="QQ截图20161217235251.png" bkcolor="#FF00FFFF">
- <Progress float="true" pos="251,143,0" enabled="true" width="60" height="30" bkcolor="#FFFF00FF" bkcolor2="#00008080" textcolor="#FF000000" disabledtextcolor="#FFA7A6AA" align="center" min="0" max="100" value="0" hor="true" />
- <Slider float="true" pos="246,242,0" enabled="true" width="60" height="30" bkcolor="#FF008000" bkcolor2="#00008080" textcolor="#FF000000" disabledtextcolor="#FFA7A6AA" align="center" min="0" max="100" value="50" hor="true" thumbimage="QQ截图20161217235137.png" thumbsize="10,10" />
- <Button name="btnHello" float="true" pos="81,116,0" enabled="true" width="60" height="30" bkcolor="#FF00FFFF" textcolor="#FF000000" disabledtextcolor="#FFA7A6AA" align="center" />
- </VerticalLayout>
- </Window>
文件
运行截图