当前位置:   article > 正文

DUILIB-编译ZIP皮肤到程序中_duilib getskinfile() 例子 csdn博客

duilib getskinfile() 例子 csdn博客

为了防止客户随意的修改皮肤文件,可以把皮肤文件打包为ZIP编译到程序中。虽说不能阻止牛掰软件的资源提取,但是防一般的菜鸟客户足矣。


下面是示例代码

  1. #include "resource.h"
  2. //导入的资源类型必须为ZIPRES,和WindowImplBase的定义一致。为所有资源打包,而不要直接打包资源的文件夹
  3. class CDYFrameWnd : public WindowImplBase
  4. {
  5. public:
  6. explicit CDYFrameWnd(LPCTSTR pszXMLPath) :strXMLPath_(pszXMLPath){};
  7. explicit CDYFrameWnd(){};
  8. virtual ~CDYFrameWnd();
  9. virtual LPCTSTR GetWindowClassName()const { return _T("Window"); }
  10. virtual CDuiString GetSkinFile() { return _T("Window.xml"); }
  11. virtual CDuiString GetSkinFolder() { return _T(""); } //为UILIB_ZIPRESOURCE时候用不到,随便实现
  12. virtual void InitWindow();
  13. virtual LRESULT MessageHandler(UINT uMsg, WPARAM wParam, LPARAM /*lParam*/, bool& /*bHandled*/);
  14. virtual void Notify(TNotifyUI& msg);
  15. virtual CControlUI* CreateControl(LPCTSTR pstrClass);
  16. virtual LPCTSTR GetResourceID() const
  17. {
  18. return MAKEINTRESOURCE(IDR_ZIP_SKIN);
  19. };
  20. virtual UILIB_RESOURCETYPE GetResourceType() const
  21. {
  22. return UILIB_ZIPRESOURCE;
  23. };
  24. protected:
  25. CDuiString strXMLPath_;
  26. };


需要注意的是WindowImplBase中是这样载入ZIP资源的,因此资源类型必须为ZIPRES


  1. case UILIB_ZIPRESOURCE:
  2. {
  3. HRSRC hResource = ::FindResource(m_PaintManager.GetResourceDll(), GetResourceID(), _T("ZIPRES"));
  4. if( hResource == NULL )
  5. return 0L;
  6. DWORD dwSize = 0;
  7. HGLOBAL hGlobal = ::LoadResource(m_PaintManager.GetResourceDll(), hResource);
  8. if( hGlobal == NULL )
  9. {

添加后如下

  1. /
  2. //
  3. // ZIPRES
  4. //
  5. IDR_ZIP_SKIN ZIPRES "res\\UIZIP.zip"


代码可以去github获取:

https://github.com/CodeBees/duilib-Ex-Debug/tree/master/Demo/UIZIPExample



声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/黑客灵魂/article/detail/942862
推荐阅读
相关标签
  

闽ICP备14008679号