Duilib定义自己的窗口类,实现把皮肤资源打包入程序中
版权声明:
本文为博主原创文章,转载请声明原文链接...谢谢。o_0。
更新时间:
2017-09-24 16:36:50
温馨提示:
学无止境,技术类文章有它的时效性,请留意文章更新时间,如发现内容有误请留言指出,防止别人"踩坑",我会及时更新文章
duilib中有人窗口的父类 CWindowWnd 实现啦窗口的注册等一些功能是所有窗口的基类,
我们写自己的窗口时要继承CWindowWnd 类,如果要响应一些事件,处理一些消息还要实现一些窗口消息的接口类 如 NotifyUI
duilib中提供啦一个类 WindowImplBase 已经实现啦相关的接口直接继承这个类就可以写自己的窗口,但是要实现里面的一些纯虚函数如下:
定义一个自己的 BaseWnd.h 类,其它所有窗口都继承这个类
class BaseWnd: public WindowImplBase { public: BaseWnd(void); ~BaseWnd(void); //返回加载皮肤的方法是zip压缩包还是文件夹还是zip资源 UILIB_RESOURCETYPE GetResourceType() const; //如果是皮肤是zip资源就返回资源id LPCTSTR GetResourceID() const; UINT GetClassStyle() const; LPCTSTR GetWindowClassName() const; void OnFinalMessage(HWND /*hWnd*/); // 通过 WindowImplBase 继承 virtual CDuiString GetSkinFolder() override; //下面保留纯虚函数要求子类一定要实现返回xml文件 //virtual CDuiString GetSkinFile() override; };
上面的GetSkinFile这个方法最好先不实现,让派生类去实现,来返回各个窗口需要的xml文件名
BaseWnd.cpp
#include "BaseWnd.h" #include "resource.h" LPCTSTR BaseWnd::GetWindowClassName() const { return _T("AINIKUUIFRAME"); }; UINT BaseWnd::GetClassStyle() const { return UI_CLASSSTYLE_FRAME | CS_DBLCLKS; }; void BaseWnd::OnFinalMessage(HWND /*hWnd*/) { delete this; } BaseWnd::BaseWnd(void) { } BaseWnd::~BaseWnd(void) { } CDuiString BaseWnd::GetSkinFolder() { return "skin"; } UILIB_RESOURCETYPE BaseWnd::GetResourceType() const { return UILIB_FILE; //下面是资源zip文件,调试期间用上面那个就可以 //return UILIB_ZIPRESOURCE; } LPCTSTR BaseWnd::GetResourceID() const { return MAKEINTRESOURCE(IDR_ZIPRES1); }
把皮肤压缩成zip文件然后导入项目中文件类型输入 ZIPRES
界面管理
每一个WindowImplBase的实例都有一个CPaintManagerUI 类型的成员变量 m_PaintManager 可以获取跟界面相关的一些信息,具体的一些方法可以查看duilib的源码