duilib开发(四):使用xml基础类、并自绘标题栏

您所在的位置:网站首页 duilib开发 duilib开发(四):使用xml基础类、并自绘标题栏

duilib开发(四):使用xml基础类、并自绘标题栏

2024-01-30 22:03| 来源: 网络整理| 查看: 265

代码仓库:https://github.com/yangpan4485/duilib/tree/develop/MyDemo

一、使用xml基础类

1、duilib对常用的基础类使用了包装,我们可以直接使用WindowImplBase进行操作,这样可以减少我们的代码操作

2、WindowImplBase是以xml作为界面描述的,所有使用WindowImplBase基础类的时候也要使用到xml文件

3、xml文件不改变,只改变我们的main.cpp文件,内容如下

#include #include #include "UIlib.h" class CDuiFrameWnd : public DuiLib::WindowImplBase { public: virtual LPCTSTR GetWindowClassName() const { return _T("DUIMainFrame"); } virtual DuiLib::CDuiString GetSkinFile() { return _T("MyDemo.xml"); } virtual DuiLib::CDuiString GetSkinFolder() { return _T("resources"); } virtual void Notify(DuiLib::TNotifyUI& msg) { if (msg.sType == _T("click")) { if (msg.pSender->GetName() == _T("btnWnd")) { std::cout

其中

name:表示 Button 的名字

tooltip:表示当把鼠标移动到上面显示的文字

float:true 表示使用绝对布局

pos:位置

normalimage:原始图片

hotimage:当把鼠标移动上去显示的图片

pushedimage:当鼠标按下显示的图片

其中标题栏的几个 Button 名字是固定的,我们不可以做修改

2、运行结果

感觉还是原始的最大化最小化按钮好看,自定义的按钮不好看 

3、我们可以看到在这里已经有我们的自定义标题栏了,但是点击没有效果,需要我们在代码中再做一些处理,具体代码如下

#include #include #include "UIlib.h" using DuiLib::CButtonUI; using DuiLib::CControlUI; class CDuiFrameWnd : public DuiLib::WindowImplBase { public: virtual LPCTSTR GetWindowClassName() const override { return _T("DUIMainFrame"); } virtual DuiLib::CDuiString GetSkinFile() override { return _T("MyDemo.xml"); } virtual DuiLib::CDuiString GetSkinFolder() override { return _T("resources"); } virtual void Notify(DuiLib::TNotifyUI& msg) override { return WindowImplBase::Notify(msg); } void InitWindow() override { m_pCloseBtn = static_cast(m_PaintManager.FindControl(_T("closebtn"))); m_pMaxBtn = static_cast(m_PaintManager.FindControl(_T("maxbtn"))); m_pRestoreBtn = static_cast(m_PaintManager.FindControl(_T("restorebtn"))); m_pMinBtn = static_cast(m_PaintManager.FindControl(_T("minbtn"))); m_pHelloBtn = static_cast(m_PaintManager.FindControl(_T("btnHello"))); } void OnClick(DuiLib::TNotifyUI &msg) override { if (msg.pSender == m_pCloseBtn) { PostQuitMessage(0); return; } else if (msg.pSender == m_pMinBtn) { SendMessage(WM_SYSCOMMAND, SC_MINIMIZE, 0); return; } else if (msg.pSender == m_pMaxBtn) { SendMessage(WM_SYSCOMMAND, SC_MAXIMIZE, 0); return; } else if (msg.pSender == m_pRestoreBtn) { SendMessage(WM_SYSCOMMAND, SC_RESTORE, 0); return; } else if (msg.pSender == m_pHelloBtn) { std::cout SetVisible(true); } else { CControlUI* pControl = static_cast(m_PaintManager.FindControl(_T("maxbtn"))); if (pControl) pControl->SetVisible(true); pControl = static_cast(m_PaintManager.FindControl(_T("restorebtn"))); if (pControl) pControl->SetVisible(false); } } return lRes; } private: CButtonUI* m_pCloseBtn; CButtonUI* m_pMaxBtn; CButtonUI* m_pRestoreBtn; CButtonUI* m_pMinBtn; CButtonUI* m_pHelloBtn; }; int main(void) { HINSTANCE hInstance = GetModuleHandle(0); DuiLib::CPaintManagerUI::SetInstance(hInstance); CDuiFrameWnd duiFrame; duiFrame.Create(NULL, _T("DUIWnd"), UI_WNDSTYLE_FRAME, WS_EX_WINDOWEDGE); duiFrame.ShowModal(); return 0; }

 

 



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3