Duilib定义自己的窗口类,实现把皮肤资源打包入程序中

来源:赵克立博客 分类: C/C++ 标签:duilib发布时间:2017-09-24 15:10:56最后更新:2017-09-24 16:36:50浏览:2399
版权声明:
本文为博主原创文章,转载请声明原文链接...谢谢。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

image.png

界面管理

每一个WindowImplBase的实例都有一个CPaintManagerUI 类型的成员变量  m_PaintManager   可以获取跟界面相关的一些信息,具体的一些方法可以查看duilib的源码


微信号:kelicom QQ群:215861553 紧急求助须知
Win32/PHP/JS/Android/Python