#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>
文件
运行截图