当前位置:   article > 正文

2021 Duilib最新入门教程(五)Duilib调用静态库示例_duilib.lib

duilib.lib

目录

原理

  静态库文件后缀名是lib,编译的时候合并到软件里面去。
  调用静态库需要两件套:1、头文件2、静态库。
  特殊的地方:调用Duilib的静态库时,需要先定义静态宏(#define UILIB_STATIC)
  

步骤

  
1、新建项目,选择“Windows 桌面应用程序”

  
2、项目名字定为DuilibMinDemoStatic

  
3、选择“桌面应用程序”和“空项目”

  
4、添加Duilib头文件所在的目录

  
5、复制静态库DuiLib_Static_ud.lib到代码目录下

  
6、添加代码文件main.cpp

  

#define UILIB_STATIC				            // 声明静态宏:UILIB_STATIC(必须在UIlib.h之前声明)			
#include "UIlib.h"		                        // 引入头文件:UIlib.h						
using namespace DuiLib;	                        // 使用命名空间:DuiLib
#pragma comment(lib, "DuiLib_Static_ud.lib")	// 加载静态库:DuiLib_Static_ud.lib      

//CWindowWnd:处理Window消息 INotifyUI:处理Duilib消息
class CDuilibWnd : public CWindowWnd, public INotifyUI  
{
public:
	virtual LPCTSTR GetWindowClassName() const { return _T("DuiWnd"); }
    // 响应消息 重写
	virtual void Notify(TNotifyUI& msg) INotifyUI::Notify
	{
        //if (msg.sType == DUI_MSGTYPE_CLICK)
		if (msg.sType == _T("click"))	
		{
			if (msg.pSender->GetName() == _T("btn"))
			{
				::MessageBox(NULL, _T("按钮内容"), _T("按钮标题"), NULL);
			}
		}
	}

    // 重写CWindowWnd::HandleMessage处理消息
	virtual LRESULT HandleMessage(UINT uMsg, WPARAM wParam, LPARAM lParam) 
	{
		LRESULT lRes = 0;
        // 初始化窗口消息
		if (uMsg == WM_CREATE) 				    
        {
            // 初始化绘制管理器,m_hWnd句柄在一个消息WM_NCCREATE中赋值
			m_PaintManager.Init(m_hWnd);		
			
            // 使用XML布局文件生成界面
            CDialogBuilder builder;				
			CControlUI* pRoot = builder.Create(_T("duilib.xml"), 0, NULL, &m_PaintManager);
			ASSERT(pRoot && "Failed to parse XML");

            // 添加CControlUI对象,用于管理界面
			m_PaintManager.AttachDialog(pRoot);	

            // 添加INotifyUI对象,用于处理消息
			m_PaintManager.AddNotifier(this);	

			return lRes;
		}
        // CPaintManagerUI处理消息
		if (m_PaintManager.MessageHandler(uMsg, wParam, lParam, lRes)) return lRes;	

        // CWindowWnd兜底处理消息
		return __super::HandleMessage(uMsg, wParam, lParam);						
	}
protected:
	CPaintManagerUI m_PaintManager;				// 绘制管理器:负责绘制界面和管理消息
};

int APIENTRY _tWinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance, _In_ LPWSTR lpCmdLine, _In_ int nShowCmd )
{
    // 绘制管理器CPaintManagerUI绑定窗口句柄
    CPaintManagerUI::SetInstance(hInstance);

    // 绘制管理器CPaintManagerUI设置资源目录,用于加载XML    
    CPaintManagerUI::SetResourcePath(CPaintManagerUI::GetInstancePath()); 

    // 创建窗口
	CDuilibWnd duilibWnd; 
	duilibWnd.Create(NULL, _T("标题"), UI_WNDSTYLE_FRAME, WS_EX_WINDOWEDGE); 

    // 显示窗口并且监听消息
	duilibWnd.ShowModal();  

	return 0;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73

  
7、编译之后出现RuntimeLibrary不匹配问题
错误 LNK2038 检测到“RuntimeLibrary”的不匹配项: 值“MTd_StaticDebug”不匹配值“MDd_DynamicDebug”(main.obj 中) DuilibMinDemoStatic G:\Duilib\DuilibMinDemoStatic\DuilibMinDemoStatic\DuiLib_Static_ud.lib(UIBase.obj) 1

  
8、修改运行库为 MTd

  
9、这里就编译成功了

  
10、在Debug目录下加上界面文件duilib.xml

<?xml version="1.0" encoding="UTF-8"?>
<Window size="200,100">
    <HorizontalLayout bkcolor="#FFFFFFFF">
		<Button name="btn" text="按钮" height="40" width="80" bordersize="1,1,1,1" bordercolor="#FFBCBCBC"/>
    </HorizontalLayout>
</Window>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6


  
11、软件运行效果

  
Duilib技术交流群:799142530
源码地址:https://github.com/KongKong20/DuilibTutor

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/942906
推荐阅读
相关标签
  

闽ICP备14008679号