duilib环境配置以及简单入门介绍

内容全部为转载:
VS2013的编译,https://www.cnblogs.com/Alberl/p/3342030.html
duilib框架介绍,以及VS2013配置,创建工程,调试代码部分:
https://blog.csdn.net/lanuage/article/details/52040306
https://blog.csdn.net/GG_SiMiDa/article/details/70792890
具体为:

  1. 下载duilib-master;
  2. 解压后用VS编译器编译一遍,编译部分参考第一个网址;
  3. 配置VS环境, 调试代码,参考第二个网址和第三个网址;

环境配置为:

在这里插入图片描述
在环境变量的Path变量中添加对应的dll路径,这样就不需要将dll文件拷贝到自己项目的exe文件所在位置处。
在这里插入图片描述

创建工程,测试代码

我这里为,创建了一个win32工程,选择空项目,添加.cpp文件,文件内容为:

#include <DuiLib\UIlib.h>
using namespace DuiLib;

#ifdef _DEBUG
#   ifdef _UNICODE
#       pragma comment(lib, "Duilib_ud.lib")
#   else
#       pragma comment(lib, "Duilib_d.lib")
#   endif
#else
#   ifdef _UNICODE
#       pragma comment(lib, "Duilib_u.lib")
#   else
#       pragma comment(lib, "Duilib.lib")
#   endif
#endif

class CFrameWnd : public CWindowWnd
{
public:
	virtual LPCTSTR GetWindowClassName() const{
		return _T("FrameWnd");
	}
	virtual void OnFinalMessage(HWND hWnd){
		delete this;
	}
};

int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
	LPTSTR lpCmdLine, int nShowCmd){
	
	// new一个窗口对象
	CFrameWnd* pFrame = new CFrameWnd;
	// 注册窗口类、创建窗口
	pFrame->Create(NULL, _T("sample01"), UI_WNDSTYLE_FRAME, UI_WNDSTYLE_EX_FRAME,
		100, 100, 800, 600, NULL);
	// 显示窗口、进入窗口消息循环
	pFrame->ShowModal();

	return 0;
}

显示效果为:
在这里插入图片描述

duilib简介:

国内首个开源 的directui 界面库,它提供了一个所见即所得的开发工具——UIDesigner,它只有主框架窗口,其余的空间全部采用绘制的方式实现,所以对于控件来说没有句柄和窗口类等内容,它通过UIDesigner工具将用户定义的窗口保存在xml文件中,在创建窗口时读取xml文件中的内容,来绘制相应的控件。目前有许多界面采用duilib编写,大家可以去网上搜集相关资料。

窗口显示前的最后一个函数为:

CWindowWnd::Create(HWND hwndParent, LPCTSTR pstrName, DWORD dwStyle, DWORD dwExStyle, int x, int y, int cx, int cy, HMENU hMenu)
{
    if( GetSuperClassName() != NULL && !RegisterSuperclass() ) return NULL;
    if( GetSuperClassName() == NULL && !RegisterWindowClass() ) return NULL;
    m_hWnd = ::CreateWindowEx(dwExStyle, GetWindowClassName(), pstrName, dwStyle, x, y, cx, cy, hwndParent, hMenu, CPaintManagerUI::GetInstance(), this);
    ASSERT(m_hWnd!=NULL);
    return m_hWnd;
}
//::CreateWindowEx(...)为win32 API函数,该函数运行完即显示窗口,

总结

duilib的基本框架,下面来总结一下:

  1. CPaintManagerUI::SetInstance(hInstance);设置进程的实例句柄,这个值会在注册窗口类时使用
  2. 在CWindowWnd类中由Create函数完成窗口类的创建于注册,以及窗口的创建工作
  3. CWindowWnd类中的ShowWindow函数用于显示窗口
  4. 消息循环由CPaintManagerUI::MessageLoop();代码完成
  5. 最后需要重写MessageHandle函数用于处理我们感兴趣的消息。并且在最后需要调用基类的MessageHandle函数,主要是为了调用DefWindowProc处理我们不感兴趣的消息。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
DuiLib中,HandleMessage函数是用于处理窗口消息的关键函数。它位于CDuiControl类中,是一个虚函数,可以在派生类中进行重写,以实现自定义的消息处理逻辑。 HandleMessage函数的原型如下: ```cpp LRESULT CDuiControl::HandleMessage(UINT uMsg, WPARAM wParam, LPARAM lParam); ``` 参数解释: - uMsg:表示收到的消息类型,比如WM_PAINT、WM_KEYDOWN等。 - wParam:表示消息的附加参数,具体含义根据消息类型而定。 - lParam:表示消息的附加参数,具体含义根据消息类型而定。 返回值: - LRESULT:表示消息处理的结果,通常是0或者一个非零值。 在派生类中重写HandleMessage函数时,可以根据uMsg的不同值来处理不同的消息。常见的消息类型包括但不限于: - WM_CREATE:窗口创建消息。 - WM_DESTROY:窗口销毁消息。 - WM_PAINT:绘制窗口消息。 - WM_SIZE:窗口大小改变消息。 - WM_KEYDOWN、WM_KEYUP:键盘按键消息。 - WM_MOUSEMOVE、WM_LBUTTONDOWN、WM_RBUTTONDOWN:鼠标消息等等。 重写HandleMessage函数时,可以根据具体需求进行相应的处理逻辑。例如,在WM_KEYDOWN消息中,可以判断按下的键盘按键是哪个键,并执行相应的操作。在WM_PAINT消息中,可以绘制窗口的内容。 需要注意的是,在重写HandleMessage函数时,需要调用父类的HandleMessage函数来处理未被重写的消息,以保证窗口的正常处理流程。 总之,HandleMessage函数是DuiLib中用于处理窗口消息的重要函数,通过重写该函数可以实现自定义的消息处理逻辑。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值