赞
踩
为了防止客户随意的修改皮肤文件,可以把皮肤文件打包为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
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。