duilib say Hello (duilib 的第一个程序)——duilib

前言

目前将要接手的一个活儿是将duilib写的项目转为Qt,为此,我稍微了解了一下duilib这个框架,并且写了一个简单的hello world。

先稍微了解一下duilib吧:(来自网络)

Duilib 是 国内首个开源 的directui 界面库,是一款强大的界面开发工具,可以将用户界面和处理逻辑彻底分离,极大地提高用户界面的开发效率。 Duilib 目前支持Windows 32 、Window CE、Mobile等平台,使用C++开发,遵循BSD协议,可以免费用于商业项目 。

DirectUI界面库使用XML来描述界面风格,界面布局,可 以很方便的构建高效,绚丽的,非常易于扩展的界面。从而很好的将界面和逻辑分离,同时易于实现各种超炫的界面效果如换色,换肤,透明等。

我来总结一下吧,Duilib是一款轻量的界面库,一般用于开发Windows应用,xml书写界面,c++描述逻辑,易于开发。但是Duilib没有专业的团队维护管理,也没有官方文档,所以比较小众。

准备工作

下载库:https://github.com/duilib/duilib

下载界面开发工具(不好用,但是聊胜于无):https://github.com/quanzhuo/DuiDesigner

代码和说明 

开发工具:vs2017

创建项目及使用DuiDesigner具体流程参考:Duilib教程-HelloDuilib及DuiDesigner的简单使用 - 夜雨無聲 - 博客园 (cnblogs.com)

我在这里只说一下我遇到的问题

xml及图片路径:

一般是在可执行文件路径下创建一个叫skin的文件夹,然后把xml和资源图片放进去(图片可另外创建子文件夹保存)。如下图

然后代码中一定要设置资源的路径,不然是找不到xml文件,运行不了的。

	//将此段代码写到mian函数创建窗体之前,进行资源路径的设置
    CPaintManagerUI::SetResourceType(UILIB_FILE);
	CDuiString sResPath;
	sResPath.Format(_T("%sskin"), CPaintManagerUI::GetInstancePath());
	CPaintManagerUI::SetResourcePath(sResPath);

在设置此路径后,就可以在获取皮肤文件上直接写了

virtual CDuiString GetSkinFile() { return _T("UISkin1.xml"); }

 

添加标题栏

默认的窗体是没有标题栏的,这就很奇怪,也不知道是不是我姿势不对,反正是我新加了自定义的标题栏

xml文件时这么写的:

<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<Window size="800,600" caption="0,0,0,32">
  <Font id = "1" name="楷体" size="30" italic="false" />
    <VerticalLayout width="800" height="600" bkimage="img10.jpg">
        <HorizontalLayout height="32" bkcolor="#FFE6E6DC" bkcolor2="#FF00AAA0">
            <VerticalLayout height="32" />
            <VerticalLayout width="77" height="32">
                <Button name="minbtn" tooltip="最小化" float="true" pos="0,5,0,0" width="23" height="19" bkimage="209.bmp" textcolor="#FF000000" disabledtextcolor="#FFA7A6AA" align="center" normalimage="file=&apos;MinNormal.bmp&apos;" hotimage="file=&apos;209.bmp&apos;" />
                <Button name="closebtn" tooltip="关闭" float="true" pos="44,5,0,0" width="28" height="19" bkimage="206.bmp" textcolor="#FF000000" disabledtextcolor="#FFA7A6AA" align="center" normalimage="file=&apos;CloseNormal.bmp&apos;" hotimage="file=&apos;206.bmp&apos;" />
            </VerticalLayout>
        </HorizontalLayout>
        <HorizontalLayout>
            <Button font="1" name="btn1" text="Hello World" textcolor="#FF000000" disabledtextcolor="#FFA7A6AA" align="center" />
        </HorizontalLayout>
    </VerticalLayout>
</Window>

注意:在Window下设置caption,这样自定义的标题才能拖动窗体。 

c++代码中重写方法OnClick,这样才能响应关闭和最小化(我只配置了这两个按钮,因为我只有这两个图片~,但是下面代码写了响应)

void CHelloDuilibWnd::OnClick(TNotifyUI& msg)
{
	CDuiString sCtrlName = msg.pSender->GetName();
	if (sCtrlName == _T("closebtn"))
	{
		PostQuitMessage(0);
		return;
	}
	else if (sCtrlName == _T("minbtn"))
	{
		SendMessage(WM_SYSCOMMAND, SC_MINIMIZE, 0);
		return;
	}
	else if (sCtrlName == _T("maxbtn"))
	{
		SendMessage(WM_SYSCOMMAND, SC_MAXIMIZE, 0);
		return;
	}
	else if (sCtrlName == _T("restorebtn"))
	{
		SendMessage(WM_SYSCOMMAND, SC_RESTORE, 0);
		return;
	}
}

结束语

大概就如此。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值