内容全部为转载:
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
具体为:
- 下载duilib-master;
- 解压后用VS编译器编译一遍,编译部分参考第一个网址;
- 配置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
#endifclass 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的基本框架,下面来总结一下:
- CPaintManagerUI::SetInstance(hInstance);设置进程的实例句柄,这个值会在注册窗口类时使用
- 在CWindowWnd类中由Create函数完成窗口类的创建于注册,以及窗口的创建工作
- CWindowWnd类中的ShowWindow函数用于显示窗口
- 消息循环由CPaintManagerUI::MessageLoop();代码完成
- 最后需要重写MessageHandle函数用于处理我们感兴趣的消息。并且在最后需要调用基类的MessageHandle函数,主要是为了调用DefWindowProc处理我们不感兴趣的消息。