第一步:创建Windows 桌面向导

1、解决方案和项目不放在同一目录中

kv253vbx.png

2、不勾选任何选项

kv254jqt.png

3、删除多余代码只保留如下代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include "framework.h"
#include "DuilibDemo.h"

int APIENTRY wWinMain(_In_ HINSTANCE hInstance,
_In_opt_ HINSTANCE hPrevInstance,
_In_ LPWSTR lpCmdLine,
_In_ int nCmdShow)
{
UNREFERENCED_PARAMETER(hPrevInstance);
UNREFERENCED_PARAMETER(lpCmdLine);

// TODO: 在此处放置代码。

return 0;
}

第二步:配置项目环境

1、创建bin/libs/kits/tmp目录

kv2560bb.png

2、将刚才下好的NIM_Duilib中的base/build/duilib 拷贝至kits文件中

kv256cz4.png

3、将base项目和duilib项目加入到我们的解决方案中

kv2570o0.png

kv2577lj.png

4、配置base项目和duilib项目的设置
a. 输出目录改为刚刚的libs目录路径
b. 中间目录改为刚刚的tmp目录路径
c. Windows SDK选择自己的版本
d. 平台工具集要和自己的项目一致

kv258uah.png

5、配置自己的项目
a. 输出路径改为bin目录路径
b. 平台工具集要和base项目、duilib项目一致

kv259ooo.png

6、将base项目和duilib项目引入我们的项目中

kv25a5sr.png

kv25ab0u.png

7、将kits文件加入我们项目的包含路径中

kv25ao6w.png

8、设置 Debug 模式下运行库为 多线程调试(/MTd)

kv25bb6s.png

9、设置 Release 模式下运行库为 多线程(/MT)

kv25bzhb.png

10、在我们项目中的 framework.h 文件中添加如下代码

1
2
3
4
5
// base 头文件
#include "base/base.h"

// duilib 头文件
#include "duilib/UIlib.h"

kv25dzyd.png

11、在wWinMain函数上添加 ThreadId 枚举类型

1
2
3
4
enum ThreadId
{
kThreadUI
};

kv25ey00.png

第三步:创建一个窗口

1、从NIM_Duilib项目中的bin目录拷贝resources文件到我们的bin路径下

kv25g2qs.png

kv25g8a8.png

2、将 NIM_Duilib_Framework-master\examples\basic 路径下的 basic_form.h 文件和 basic_form.cpp 文件拷贝到我们的项目中

kv25gu30.png

kv25gye1.png

3、将 basic_form.h 文件和 basic_form.cpp 文件添加至我们的项目中

kv25hzqn.png

4、在wWinMain的头文件中加入如下代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class MainThread : public nbase::FrameworkThread
{
public:
MainThread() : nbase::FrameworkThread("MainThread") {}
virtual ~MainThread() {}

private:
/**
* 虚函数,初始化主线程
* @return void 无返回值
*/
virtual void Init() override;

/**
* 虚函数,主线程退出时,做一些清理工作
* @return void 无返回值
*/
virtual void Cleanup() override;
};

kv25il7t.png

5、在wWinMain函数中加入如下代码

1
2
3
4
5
// 创建主线程
MainThread thread;

// 执行主线程循环
thread.RunOnCurrentThreadWithLoop(nbase::MessageLoop::kUIMessageLoop);

kv25j9b2.png

6、实例化MainThread类中的 Init() 函数和 Cleanup() 函数
7、在 Init() 函数中加入如下代码

1
2
3
4
5
6
7
8
nbase::ThreadManager::RegisterThread(kThreadUI);

// 获取资源路径,初始化全局参数
// 默认皮肤使用 resources\\themes\\default
// 默认语言使用 resources\\lang\\zh_CN
// 如需修改请指定 Startup 最后两个参数
std::wstring theme_dir = nbase::win32::GetCurrentModuleDirectory();
ui::GlobalManager::Startup(theme_dir + L"resources\\", ui::CreateControlCallback(), false);

kv25k5k0.png

8、在 Cleanup() 函数中加入如下代码

1
2
3
ui::GlobalManager::Shutdown();
SetThreadWasQuitProperly(true);
nbase::ThreadManager::UnregisterThread();

kv25kuuo.png

9、引入头文件 basic_form.h 并在 Init() 函数添加如下代码

1
2
3
4
5
// 创建一个默认带有阴影的居中窗口
BasicForm* window = new BasicForm();
window->Create(NULL, BasicForm::kClassName.c_str(), WS_OVERLAPPEDWINDOW & ~WS_MAXIMIZEBOX, 0);
window->CenterWindow();
window->ShowWindow();

kv25m4rj.png

10、修改 basic_form.cpp 文件中的头文件 stdafx.h 改为我们的 framework.h
11、至此项目配置成功

kv25mz8u.png