首页 > 代码库 > DUILIB-编译ZIP皮肤到程序中
DUILIB-编译ZIP皮肤到程序中
为了防止客户随意的修改皮肤文件,可以把皮肤文件打包为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
DUILIB-编译ZIP皮肤到程序中
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。