duilib WindowImplBase基础类的初次使用

本文详细介绍了使用Duilib创建窗口应用程序的过程,包括引入库、窗口类的声明与定义、XML配置及窗口类的使用等内容,并提供了关键代码示例。

第一步、引入duilib的Lib:

 

#include "../DuiLib/UIlib.h"  //包含头文件
using namespace DuiLib;       //使用Duilib命名空间

#ifdef _DEBUG
#   ifdef _UNICODE
#       pragma comment(lib, "../Libs/DuiLib_ud.lib")// 这是我duilib编译生成的lib路径
#   else
#       pragma comment(lib, "../Libs/DuiLib_d.lib")
#   endif     
#else
#   ifdef _UNICODE
#       pragma comment(lib, "../Libs/DuiLib_u.lib")
#   else
#       pragma comment(lib, "../Libs/DuiLib.lib")
#   endif
#endif

 

  我将上面代码写到stdafx.h这个文件中,是因为所有的MFC实现文件第一条语句都是:#include "stdafx.h"。

这样我项目中的任何位置都是包含了这个文件的,比较方便。

第二步、窗口类的声明与定义

声明:文件名为"EtcdExitTipWnd.h"

 

#ifndef  _ETCDEXITTIPWND_H__
#define  _ETCDEXITTIPWND_H__
#include "stdafx.h"

class CEtcdExitTipWnd: public DuiLib::WindowImplBase
{
public:
    CEtcdExitTipWnd();//这里构造函数定义为共有的,是为了我可以在其他文件定义对象   
    ~CEtcdExitTipWnd();
private:
	virtual LPCTSTR GetWindowClassName() const;
	virtual CDuiString GetSkinFile();
	virtual CDuiString GetSkinFolder();
};

#endif

定义:

 

 

#include "stdafx.h"
#include "EtcdExitTipWnd.h"

CEtcdExitTipWnd::CEtcdExitTipWnd()
{
   
}

CEtcdExitTipWnd::~CEtcdExitTipWnd()
{

}

LPCTSTR CEtcdExitTipWnd::GetWindowClassName() const
{
	return _T("EtcdExitTipWnd");//此处如果是返回“” return _T(""); 
       // 运行出错  ASSERT(m_pSlotData[nSlot].dwFlags & SLOT_USED);
}

CDuiString CEtcdExitTipWnd::GetSkinFile()
{
	return _T("EtcdExitTipWnd.xml");//默认在exe运行文件目录下,就可以找到(前提是使用的时候设置了默认路径是exe所在目录)
}

CDuiString CEtcdExitTipWnd::GetSkinFolder()
{
	CDuiString strPath = _T("EtcdRes\\");//为自己的xml资源文件压缩包创建单独的文件夹,在程序运行文件aaa.exe所在             目录下,如我的程序运行exe所在目录为 ..\\Bin\\    那么返回的文件夹目录就为 ..\\Bin\\EtcdRes\\
	return strPath;
}


第三步、xml配置

 

 

<?xml version="1.0" encoding="UTF-8"?>
<Window size="1280,1024" sizebox="4,4,4,4" caption="0,0,0,118" mininfo="1280,1024" maxinfo="1280,1024">
<VerticalLayout height="1024" bkimage="file='image.jpg'" ><!-- 窗口没有布局,duilib无法创建资源,没有任何控件等-->
</VerticalLayout>
</Window>

第四步、窗口类的使用

 

 

        TCHAR szBuf[MAX_PATH] = { 0 };
	CString	szPath = _T("");
	GetAppPath(szBuf, MAX_PATH);  //获取EXE所在文件目录 这个是用C++自己写的函数
	szPath.Format(_T("%s"), szBuf);
	szPath += _T("\\EtcdRes");//我的xml是放在EXE所在文件目录下的EtcdRes文件夹下面的
	DuiLib::CPaintManagerUI::SetInstance(m_hInstance);//hInstance是win32项目,m_hInstance时MFC项目
        //CDuiString strPath = CPaintManagerUI::GetInstancePath();//duilib获取bin目录
       DuiLib::CPaintManagerUI::SetResourcePath(szPath); //设置xml文件路径,duilib 会在你设置的这个目录下寻找
	//DuiLib::CPaintManagerUI::SetResourceZip(_T("EtcdRes.zip"));   //如果使用ZIP压缩包则需要设置此项

	CEtcdMainWnd *pEtcdWnd = new CEtcdMainWnd;
	pEtcdWnd->Create(NULL, _T("DUIWnd"), UI_WNDSTYLE_FRAME, WS_EX_WINDOWEDGE);
	pEtcdWnd->CenterWindow();
	pEtcdWnd->ShowModal();
	delete pEtcdWnd;
	pEtcdWnd = NULL;

这样你的窗口就显示出来了;

 

需要注意的地方:

GetWindowClassName() 函数定义如下:

 

LPCTSTR CEtcdMainWnd::GetWindowClassName() const
{
    return _T(""); // 运行出错  ASSERT(m_pSlotData[nSlot].dwFlags & SLOT_USED);
}

运行出错:

 

xml只有窗口没有布局:

 

<?xml version="1.0" encoding="UTF-8"?>
<Window size="1280,1024" sizebox="4,4,4,4" caption="0,0,0,118" mininfo="1280,1024" maxinfo="1280,1024">

</Window>

 

我测试不设置资源文件路径,与EXE文件放在同一个目录下,也能找到xml,显示窗口。

 

还有关于HandleMessage()函数相关错误信息,下回分解!

 

             每天进步一点点!COMN  ON ————————SMART MAN!

 


 

 

 

 

因文件超过20M不能上传,所以拆分为两个文件分次上传 第1章 COM背景知识 1.1 COM的起源 1.1.1 软件业面临的挑战 1.1.2 传统解决方案 1.1.3 面向对象程序设计方法 1.1.4 最终解决方案:组件软件 1.1.5 面向对象的组件模型——COM 1.2 COM的发展历程 1.2.1 COM以前的对象技术:DDE、OLE 1、VBX控件 1.2.2 COM首次亮相:OLE2 1.2.3 Microsoft拥抱Internet:ActiveX 1.2.4 更多的新名词:Windows DNA和COM+ 1.2.5 远程对象:ORBs和DCOM 1.2.6 COM的最新版本:COM+ 1.3 COM技术现状 1.3.1 COM与CORBA 1.3.2 COM与Enterprise Java Beans 1.3.3 Windows之外的COM 小结 第2章 从C++到COM 2.1 C++客户重用C++对象——例程DB 2.1.1 C++对象 2.1.2 客户程序 2.2 将C++对象移进DLL中——例程DB_cppdll 2.2.1 成员函数的引出 2.2.2 内存分配 2.2.3 Unicode/ASCII兼容 2.2.4 例程实现 2.2.4.1 修改接口文件 2.2.4.2 修改对象程序 2.2.4.3 修改客户程序 2.3 C++对象使用抽象基——例程DB_vtbl 2.3.1 问题:私有数据成员被暴露 2.3.2 解决方案:抽象基 2.3.2.1 什么是抽象基(Abstract Base Class) 2.3.2.2 实现秘诀:虚函数(Virtual Functions) 2.3.3 使用抽象基 2.3.4 例程实现 2.3.4.1 修改接口文件 2.3.4.2 修改对象程序 2.3.4.3 修改客户程序 2.4 改由COM库装载C++对象——例程dbalmostcom 2.4.1 COM库 2.4.2 对象创建的标准入口点 2.4.3 标准对象创建API 2.4.4 标准对象注册 2.4.5 例程实现 2.4.5.1 修改接口文件 2.4.5.2 修改对象程序 2.4.5.3 修改客户程序 2.5 将C++对象变成COM对象 2.5.1 引用计数 2.5.2 多接口 2.5.3 IUnknown接口 2.5.4 标准厂接口:IClassFactory 2.5.5 对象代码的动态卸载 2.5.6 自动注册 2.5.7 例程实现 2.5.7.1 修改接口文件 2.5.7.2 修改对象程序 2.5.7.3 修改客户程序 2.6 为COM对象添加多接口支持 2.6.1 多接口 2.6.2 DEFINE_GUID 2.6.3 例程实现 2.6.3.1 修改接口文件 2.6.3.2 修改对象程序 2.6.3.3 修改客户程序 小结 第3章 COM基础知识 3.1 对象与接口 3.1.1 COM对象 3.1.2 COM接口 3.1.3 IUnknown接口 3.1.3.1 生存期控制:AddRef和Release 3.1.3.2 接口查询:QueryInterface 3.1.4 全球唯一标识符GUID 3.1.5 COM接口定义 3.1.6 接口描述语言IDL 3.2 COM应用模型 3.2.1 客户/服务器模型 3.2.2 进程内组件 3.2.3 进程外组件 3.2.4 COM库 3.2.5 HRESULT返回值 3.2.6 COM与注册表 3.3 COM组件 3.3.1 实现厂对象 3.3.2 厂对象的创建 3.3.3 实现自动注册 3.3.4 实现自动卸载 3.4 COM客户 3.4.1 COM对象创建函数 3.4.1.1 CoGetClassObject 3.4.1.2 CoCreateInstance 3.4.1.3 CoCreateInstanceEx 3.4.2 如何调用进程内组件 3.4.3 COM客户调用进程外组件 3.5 进一步认识COM 3.5.1 可重用机制:包容和聚合 3.5.2 进程透明性 3.5.3 安全性机制 小结 第4章 COM扩展技术 4.1 可连接对象机制 4.1.1 客户、接收器与可连接对象 4.1.1.1 接收器 4.1.1.2 可连接对象 4.1.1.3 客户 4.1.2 实现可连接对象 4.1.3 实现接收器 4.1.4 建立接收器与连接点的连接 4.1.5 获得出接口的型信息 4.2 结构化存储 4.2.1 什么叫结构化存储和复合文件 4.2.2 存储对象和IStorage接口 4.2.2.1 IStorage接口 4.2.2.2 获得IStorage指针 4.2.2.3 释放STATSTG内存 4.2.2.4 枚举存储对象中的元
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值