DUILIB-编译ZIP皮肤到程序中

来源:互联网 发布:视频配音秀软件 编辑:程序博客网 时间:2024/04/29 19:50

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


下面是示例代码

#include "resource.h"//导入的资源类型必须为ZIPRES,和WindowImplBase的定义一致。为所有资源打包,而不要直接打包资源的文件夹class CDYFrameWnd : public WindowImplBase{public:explicit CDYFrameWnd(LPCTSTR pszXMLPath) :strXMLPath_(pszXMLPath){};explicit CDYFrameWnd(){};virtual ~CDYFrameWnd();virtual LPCTSTR GetWindowClassName()const       { return _T("Window"); }virtual CDuiString GetSkinFile()                { return _T("Window.xml"); }virtual CDuiString GetSkinFolder()              { return _T(""); }  //为UILIB_ZIPRESOURCE时候用不到,随便实现virtual void  InitWindow();virtual LRESULT MessageHandler(UINT uMsg, WPARAM wParam, LPARAM /*lParam*/, bool& /*bHandled*/);virtual void Notify(TNotifyUI& msg);virtual CControlUI* CreateControl(LPCTSTR pstrClass);virtual LPCTSTR GetResourceID() const{return MAKEINTRESOURCE(IDR_ZIP_SKIN);};virtual UILIB_RESOURCETYPE GetResourceType() const{return UILIB_ZIPRESOURCE; };protected:CDuiString strXMLPath_;};


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


case UILIB_ZIPRESOURCE:{HRSRC hResource = ::FindResource(m_PaintManager.GetResourceDll(), GetResourceID(), _T("ZIPRES"));if( hResource == NULL )return 0L;DWORD dwSize = 0;HGLOBAL hGlobal = ::LoadResource(m_PaintManager.GetResourceDll(), hResource);if( hGlobal == NULL ) {

添加后如下

///////////////////////////////////////////////////////////////////////////////// ZIPRES//IDR_ZIP_SKIN            ZIPRES                  "res\\UIZIP.zip"


代码可以去github获取:

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



7 0
原创粉丝点击