Code Monkey home page Code Monkey logo

nim_duilib_framework's Introduction

NIM Duilib

NIM Duilib 包含了一整套桌面软件的开发部件,与其说这是一个界面库,不如说它是一个开发框架。从原有 Duilib 基础上拓展了一些新的能力,并整合了 Google base 基础类库(线程、内存、闭包等)。您完全可以直接使用这个框架来开发任何你想要的桌面应用。

GitHub Build status Join the chat at https://gitter.im/NIM_Duilib_Framework/community

English

特色

  • 多国语言支持
  • 通用样式支持
  • DPI 缩放支持
  • GIF 动画支持
  • CEF 控件支持(CEF 2623 支持 XP)
  • 触控设备支持(Surface、Wacom)
  • 抽象渲染接口(为其他渲染引擎提供支持)

预览

preview

开始

克隆项目到你的磁盘中

git clone https://github.com/netease-im/NIM_Duilib_Framework

进入 NIM_Duilib_Framework/examples 目录,使用 Visual Studio 2013 Update 5 以上版本 IDE 打开 examples.sln,按下 F7 即可编译所有示例程序

文档

目录

├─base 基础类库
├─bin 各个示例程序输出目录,包含预设的皮肤和语言文件以及 CEF 依赖
├─docs duilib 接口的说明文档
├─duilib duilib 核心代码,依赖 base 但不依赖 shared
├─libs 静态库编译后的输出目录,包含预设的一些 CEF 组件静态库
├─examples 各类示例程序源代码
├─third_party 第三方库,目前仅有 cef_control 有依赖
├─ui_components 基于 duilib 封装的常用组件库如 msgboxtoastcef_control

交流

  • 遇到问题:欢迎查看我们整理过的中文文档参考示例程序来帮助你解决疑惑
  • 提交缺陷:在确保使用最新版本依然存在问题时请尽量以简洁的语言描述清楚复现该问题的步骤并提交 issue
  • 功能建议:如果你有什么好的想法或者提案,欢迎提交 issue 与我们交流

#推荐好友使用云信,即享1500元京东卡奖励# 点击参与https://yunxin.163.com/promotion/recommend?channel=github main

nim_duilib_framework's People

Contributors

gitter-badger avatar nmgwddj avatar quanzhuo avatar smallevilbeast avatar xuhuajie-2021 avatar yunxinusecase avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

nim_duilib_framework's Issues

按钮的 normalimage 怎么设置可以在按钮内居中显示?

我尝试使用 dest,不能达到居中显示的效果。
xml 如下:

<Button name="testbtn" width="100" height="35" bkcolor="blue" normalimage="file='add_normal.png' dest='0,0,25,25'" hotimage="file='add_hover.png' dest='0,0,25,25'" pushedimage="file='add_pushed.png' dest='0,0,25,25'" />

父容器尺寸不是根据子元素计算出来的

我按照文档“快速上手”新建一个工程,xml 如下:

<?xml version="1.0" encoding="UTF-8"?> <Window size="500,450" caption="0,0,0,35"> <VBox bkcolor="white"> <VBox name="vbox1" bordersize="2" bordercolor="red"> <Button text="test" height="16" bordersize="1" bordercolor="blue"></Button> <Button text="test" height="16" bordersize="1" bordercolor="blue"></Button> </VBox> <VBox name="vbox2"> </VBox> </VBox> </Window>

运行效果是 vbox1 与 vbox2 的高度是一样的。

想问一下这里必须要设置一下vbox1 的高度吗?有办法让 vbox 的高度等于其子元素的高度之和吗?
谢谢。

Controller中的float属性没有作用

问题现象

<Label name="test_label" text="helloworld" float="true" normaltextcolor="black" width="80" height="30" />

重现步骤

  1. 不显示Label
  2. 而且不能设置位置
  3. 增加floatalign和pos属性
  • name="float" default="false" type="BOOL" comment="是否使用绝对定位,如(true)"
  • name="pos" default="0,0,0,0" type="RECT" comment="位置,如果为float控件则指定位置和大小,否则只指定大小,如(0,0,100,100)"
  • name="floatalign" default="" type="STRING" value="left,right,center,top,bottom,vcenter" comment="用于控制float控件先对于父控件的对齐方式(left\center\right、top\vcenter\bottom)

2个小问题

1: 最大化窗口后 拖动窗口会还原到原窗口大小,但最大化按钮状态没还原.
2: 我没看源码只编译了例子,layout例子那个 richedit控件应该是输入文本鼠标会消失,

DPI 文本缩放更改时崩溃

问题现象

启用DPI后 ,改变文本缩放比例时 出现崩溃

重现步骤

  1. 启用dpi, 改变显示器文本缩放比例

我查了下崩溃dump,在这里
image

改的话,只需要加下判断就可以么,还是还有什么相关项,我是加了下判断,能继续执行了,但不知有无隐患
image

tool_kits里的base怎么编译成动态库

一直想写个工具库,功能用NIM_PC_Demo的太重了好多用不上,自己整合编译dll一直error,奈何是做web开发的...想请教tool_kits里的base怎么编译成动态库,或tool_kits里其他的组件to dll....

颜色值设置问题

问题现象

<HBox width="stretch" height="35" bkcolor="#ff0E8EE7">

bkcolor 不能这样设置吗

这样设置就直接报错了

CEF 不能播放mp4

问题现象

测试国内的视频网站(爱奇艺、腾讯视频、优酷、bilibili)基本播放不了。YouTube可以。
使用samples/cef 打开以下链接:
https://www.bilibili.com/blackboard/html5playerhelp.html
检测,提示不支持mp4播放。看网易云信的文档:cef2623版本可以直接支持mp3、mp4播放

请问需要做什么操作才能开启mp4支持?

image

HBox 添加buttondown 事件 不起作用

          <HBox name="stdHBox" hotcolor="bk_menuitem_hovered" height="auto" padding="10,10,60,10" borderround="5,5" bordersize="1" bordercolor="lightcolor4" mouse="true">
              		      		   
              <Option class="circle_option_yellow" text="标准连麦" name="standard_option" group="layout" valign="center" margin="20,0,0,0" name="std_layout"/>
              <Control />
              <Button name="standard_option" bkimage="standard_int.png"  width="auto" height="auto"/>
            <Event type="buttondown" receiver=".\std_layout" applyattribute="selected=&quot;true&quot;" />
                             
          </HBox>

EVENT事件不起作用 ,调试发现,刚开始时XML加载了该事件,但handlemessage时,事件又没有了,不知道怎么回事

高DPI字体显示模糊问题

问题现象

高DPI,采用缩放时,字体显示模糊。(4K 250%缩放)。
image

重现步骤

1.在高分屏上,设置缩放,运行项目中的例子。

PS:因为我只是喜欢做自己一些小软件的开发,不是专门做这块的,了解其实并不是很多,昨晚通过duilib找到这里,克隆之后运行起来,发现挺好看的,而且文档也好,就是高DPI字体显示有问题,可以给个解决方法吗?麻烦说得简单一点,太专业我可能不了解,谢谢大佬。

CEF 可否更换更高版本的

2326对应谷歌49版本 有点太低了, 有些浏览器新功能不支持
不知道,能否在开发版本中,提供个高版本的cef

关于void Window::Close(UINT nRet)函数的改进

m_pRoot->SetVisible(false);修改成为ShowWindow(false, false);原始只是隐藏根节点,在close中关闭到托盘的时候,第一,这样任务栏还有项,这样点击项并不能打开,体验不好。第二,显示的时候还要操作根节点,我觉得这样代码对于很多人而言还需要找,比较麻烦。

给 HBox 添加 cursortype="hand" 属性,没有效果

问题现象

因为想定义一个这样的控件:
<HBox><Control bkimage='icon.png'/><Label /></HBox>
并且想给Label和 icon 都加上 hand cursor,但是不能给 HBox 加。需要分别给每个控件加。
但是icon 和 Label 之间的空隙是 margin 产生的,没办法添加 hand cursor。
虽然空隙也可以定义一个控件,加上 hand cursor,但是这种方式感觉不好。

重现步骤

单击 Combo 控件,程序崩溃

问题现象

重现步骤

在例子 controls 工程 controls.xml 里添加一个 Combo 代码,如下:
<!-- Option --> <VBox> <Option class="circle_option_2" group="option_group" text="option1" margin="0,3,0,10" selected="true"/> <Option class="circle_option_2" group="option_group" text="option2" margin="0,3,0,10"/> <Option class="circle_option_2" group="option_group" text="option3" margin="0,3,0,10"/> </VBox> <!--我是添加的COMBO--> <HBox> <Combo height="30" bordersize="1" bordercolor="red"> <ListContainerElement height="20" text="t1" /> <ListContainerElement height="20" text="t1" /> </Combo> </HBox> <!-- List --> <VListBox class="list" name="list" padding="5,3,5,3">
2.
点击 Combo 就会崩溃。
3.
在这里崩溃了
CPoint ptOldOrg = pRender->OffsetWindowOrg(ptOffset);

Event事件 同名控件问题

比如,我想实现关联操作,选中第一个的某个option, 第二个盒子中的也同样选中, 反之亦然, 但是两个option名字是相同的,
这种情况下,全局的my_option 肯定是两个VBOX的某一个 ,比如是第一个的话,则点击第一个时, 第二个盒子并没有被关联

能不能除了全局、 .\ 可以扩展成 某个父节点下的定位 比如 test\my_option 这样的,如果能扩展成这样,就没这个问题了

布局不支持比例么

比如一个水平布局中,有两个子布局,第一个占3/4宽度 第二个占1/4宽度

这样的如何设置好呢

multi_browser工程的flash问题;

问题现象

打开多个页面,关闭正在播放的flash页面,flash仍然在运行;

重现步骤

1.官网安装最新版flash,查看C:\Windows\SysWOW64\Macromed\Flash\PepperFlash\pepflashplayer.dll;是否存在;

2.在void ClientApp::OnBeforeCommandLineProcessing(const CefString& process_type, CefRefPtr command_line)函数中增加

 //允许使用系统flash;
 //command_line->AppendSwitchWithValue("--enable-system-flash", "1");

2.运行multi_browser工程,打开www.bilibili.com,运行其中有声音的视频,关闭此标签页,问题重现

发现一个BUG

问题现象

CEF 离屏模式下, 网址输入框 是半透明的 ,将shadowattached="false" 改为true 时 才正确

重现步骤

  1. CEF 离屏模式
  2. CEF示例 网址输入框 输入文字时,色彩根据背景色改变 ,好像加载新网页时,下面的网页部分也完全透明,加载成功后,才正常显示

Control控件设置alpha值的问题

问题现象

在XML中设置alpha值为102,并且设置了bkimage, 这时显示后是正常的,在程序运行时,在代码中使用SetBkImage重新设置了一张新的本地图片后,就变成空白了,并没有显示新的图片

<Control name="wx_avatar" width="45" height="45" borderround="45,45" halign="center" bkimage="head/default.png" alpha="102" mouse="false" /> 

使用代码设置背景图后就显示异常,如果alpha值为255,则没有问题

m_pControlAvatar->SetBkImage(sLocalAvatar);

某些电脑下 弹窗窗口不稳定,显示不出 或半透明 或各种问题

问题现象

在MAC双系统下 或 老电脑下 弹窗窗口显示有问题 尤其是debug环境下,在某些电脑上经常出现

之前提过一个issue 不过当时不知道怎么复现的, 现在知道复现原因了
不过那个 issue关闭了,不知道怎么打开

重现步骤

复现了
使用网易纯直播demo

https://yx-web-nosdn.netease.im/package/LiveStreaming_Windows_Demo_v2.7.0.zip?download=LiveStreaming_Windows_Demo_v2.7.0.zip

添加进采集系统声音后, 点击关于, 这个弹窗就会出现黑色、或不出现等问题

debug下,频繁出现 release下 大部分机子正常 ,但有些机子也会出现弹窗窗口 不能显示等问题

很奇怪 这个采集系统声音API 会影响到UI,我把它改到其它线程执行,也没效果

59147932-64778e00-8a34-11e9-8c7e-1aa991f6131d

浏览器BUG

问题现象

跳转网址不起作用

重现步骤

1.输入biying.com 随便搜索什么,跳出很多网址
2. 点击这些网址,并没有跳转到对应网站,还是停留在当前网页上

如何定义给一个带有滚动条的 VBox

我定义了一个带滚动条的 VBox 类,如下:
class CustomScrollVBox : public ui::ScrollableBox { public: CustomScrollVBox() : ui::ScrollableBox(new ui::VLayout()) { } };
然后CreateControl 也正确调用了。
xml 定义如下:
<CustomScrollVBox halign="center" width="350" margin="0,20,0,0" height="300" vscrollbar="true">

但是没有效果,滚动条不出现。
请问我哪里写的不对啊?

WindowsManager::SingletonShow 设置的 win_id 无效

问题现象

当调用 WindowsManager::SingletonShow 创建窗口,给第一个参数设置窗口 id。
然后在其他地方用这个 id 调用函数 WindowsManager::GetWindow,返回的窗口指针是空的。

重现步骤

调试发现:

bool WindowEx::RegisterWnd()
{
	std::wstring wnd_class_name = GetWindowClassName();
	std::wstring wnd_id = GetWindowId();
	if (!WindowsManager::GetInstance()->RegisterWindow(wnd_class_name, wnd_id, this))
	{
		return false;
	}
	return true;
}

窗口创建的时候,调用的是 GetWindowId(), SingletonShow 设置的 id 没有被用上。

发现一个扩展屏大BUG

问题现象

窗口在扩展屏中,点击放大,再点击最小化,再点击还原,发现窗口位置不对,窗口大小超出了屏幕范围
可以用demo中的,CEF、控件例子 做测试

重现步骤

1.把窗口放在第二屏中, 点击放大 再点击最小化
2.点击还原,就会出现这个问题

cef退出导致崩溃

问题现象

Samples里面的cef demo与qq拼音输入法冲突。退出导致崩溃

重现步骤

1.切换当前输入法为qq拼音输入法。退出导致崩溃,
2.切换为其他输入法则退出正常。

离屏渲染模式输入法位置不正确问题

问题现象

使用离屏渲染模式,WEB页面的编辑框输入时候输入法的位置不正确,无法显示在WEB页面内

重现步骤

1.simples的例子cef修改const bool kEnableOffsetRender = true;
2.WEB页面的编辑框输入中文可以看到输入法位置不能显示在整个CEF区域

真窗口模式下的输入法位置
cef-真窗口

离屏渲染模式下的输入法位置

cef-离屏模式

render.exe被360删掉

问题现象

开着360
运行程序时, CEF render.exe进程会被360报毒杀掉

重现步骤

  1. 开着360
  2. 运行程序

可能和我用的版本有关,移植的之前PCDEMO 中的

是否支持64位

  • vs2017版最新编译
    我使用64位编译会报一大堆错误
    而且不论32位或64位都看到有很多强制转换类型 还有很多其它警告.在64位可能会出错。

建议增加一个类似 spy++ 的功能

比如在窗口上,给鼠标所在的控件增加边框,并且有一个提示框显示当前控件的 xml 内容。
增加功能原因:
1.
在参考其他项目的时候,找 xml 有些麻烦,新手更不容易快速定位到。
2.
在自己写代码的时候,也容易看到控件显示的位置。

有一个登录对话框,一个主界面,正确的做法是怎么安排?

比如我有一个登录对话框,一个主界面。先显示登录对话框,登录后,再显示主界面。如果我用ShowModal 显示登录对话框,然后再显示主界面,这样做主界面不会显示出来。

我看了所有的例子,都是在显示一个窗口的,没有显示两个的。所以想问一下正确做法是什么?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.