[Sharpui]居于dui思想的c++版wpf界面库(免费、开源)

rohnaw 2012-11-11 02:20:49
代码托管:https://github.com/china520/sharpui
注:有些图像没贴上,大家可以从上面地址下载:)

1 什么是Sharpui
Sharpui是居于现在流行的DUI思想的一套界面库,可以方便实现半透明和各种界面效果,采用纯c++实现,分为引擎和控件两个部分,这两个部分采用动态库的形式提供,引擎部分处理了事件、资源、渲染、控制逻辑,同时提供了各种应用层面控件的实现基类,包括:Visual、Element、FrameworkElement、Control、ContentControl、Window、Panel、Popup,这些类封装了基础控件的实现细则,所有用户实现的控件都必须继承自这些类,对于需要呈现的控件必须继承至FrameworkElement。
控件部分提供的所有控件均采用DUI方式实现、分层绘制,实现各种常用的布局控件,可灵活实现界面的自动布局;Sharpui本身所有数据结构采用原生实现,内存自动管理,不依赖于std的任何容器,使得库的使用更加独立、编译更加简单,使用VS任意一个版本编译都可以用在其它版本里,不需要担心由于std版本原因而产生编译问题。
2 资源结构说明
Sharpui库资源包括图像、字体、光标等纯碎的资源,同时样式也定义在资源里;资源可以单独放在独立的文件里,也可以放在界面元素的资源描述节里;两者的描述格式是完全一致的,资源是可以继承,就是说子元素可以继承父元素的资源,以此类推,Application作为所有界面元素的根而存在。
资源除了系统默认提供之外,允许用户自定义自己的资源,由系统进行统一管理。
2.1 资源结构说明
Application格式描述如下:


独立资源格式如下:

在独立的资源描述文件里,使用ResourceDictionary作为根节点,在资源节点还可以通过Source属性合并其它资源。
资源采用x:Key进行定义,而且必须唯一。
界面元素资源格式如下:

在界面元素里,资源定义在元素类名+.Resources节点下。
2.2 样式说明
样式描述在资源节点下,以Style作为节点名称,样式可以定义自己的子样式,但是建议不要超过两层资源链定义。Style包括三个控制属性:TargetType、x:Key、BasedOn,Setter节点描述了样式的应用属性,属性值可以使用“{}”定义为引用某一个资源。
如果属性值是一个复合结构,可以使用<Setter Property=”Background”><Setter.Vaue>进行定义。对于需要通过触发条件控制的样式可以通过Style.Triggers节点进行定义。
完整的样式格式描述如下:

2.3 资源引用说明
资源引用采用界面元素->父界面元素->Application元素的层次进行继承引用。
资源引用采用两种方式进行标定:类型和名称,这里的资源不仅是诸如图像、光标等纯碎资源,还包括样式资源,比如<Setter Property="Background" Value="{mainbkgnd}" />,表示背景刷引用了"mainbkgnd"资源,也可以这样进行描述(<Setter Property="Background" Value="{x:Key mainbkgnd}" />),两者是等价的。
对于样式的引用有完全引用和部分引用两种方式,分别通过Style和BasedOn关键字标识。
Style:语法:<Element Style="{Window}" >,其仅仅定义为元素属性,一旦定义,其内容完全和其引用一致。
BasedOn:语法:<Style BasedOn="{ListBoxItem}" />,其仅仅定义在Style节点,如果Style节点定义了其它资源,将优先使用(本身定义的资源会覆盖引用资源)。
当BasedOn没有定义自己任何资源时,其意义等同Style;比如:
<Style TargetType="ListViewItem" BasedOn="{x:Type ListBoxItem}" />和<ListViewItem Style="{ListBoxItem}" >…是一样的。
3 系统布局说明
系统布局是Sharpui关键部分,所有元素的布局都是相对于其父界面元素进行计算的,一般界面元素分为垂直和水平方向上的布局,水平方向包括Left、Center、Right、Stretch四个属性;垂直方向包括Top、Center、Bottom、Stretch四个属性,系统对水平和垂直上的这四个属性进行默认实现。
布局结合了元素的Width、Height和Margin以及Padding进行计算得到最终结果。
除了Stretch属性外,其余属性都需要元素的Width和Height支持,就是说必须设置Width和Height值,否则元素将不可见。
对于Left和Top,其布局原理如下:

对于Right和Bottom布局原理如下:

对于Center布局原理如下:

对于Stretch布局原理如下:

Stretch自动填充满父界面元素整个空间,然后四个边减掉Margin设定的值。
对于元素大小的测量仅仅在元素准备载入时初始化一次,系统运行过程中,具体元素可以根据需要重新调用进行测量元素。
...全文
1514 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
chcucl 2013-09-16
  • 打赏
  • 举报
回复
如果真想完全控制,自己定制或者自己开发才是王道。而且每个系统的需求不一样,没有必要大而全。
xukaiming 2013-05-27
  • 打赏
  • 举报
回复
损的人还是很多的啊
bfcode 2012-12-23
  • 打赏
  • 举报
回复
开源不开源是你的选择,你能提供给别人用就很不错了,但是,没全部开源就不要动不动在标题上写上开源,免费
vc_dreamver 2012-12-21
  • 打赏
  • 举报
回复
执行文件被微点报告有蠕虫直接删除了!
boostfan 2012-12-18
  • 打赏
  • 举报
回复
这个应该是半开源的东西,核心代码是没有公开的,大家用开源UI就是为了自己能够掌控,这样的一半一半的东西,没人敢用吧?
吴丁 2012-12-14
  • 打赏
  • 举报
回复
不如去看看我从duilib扩展的版本,基本的应用也够用了。 http://directui-erp.googlecode.com/
华美乐章 2012-11-29
  • 打赏
  • 举报
回复
我一搬就拖进回收站了...
引用 7 楼 r3000 的回复:
看了一下,好像没有全部源代码,只是部分, 这种情况是开源么?对这种情况的库,我一般都直接扔垃圾箱。
Eleven 2012-11-29
  • 打赏
  • 举报
回复
路过~~~~~
傻X 2012-11-29
  • 打赏
  • 举报
回复
支持还是要支持下的。 半开源的定位到底是什么意思呢? 站在巨人的肩膀上,打猎不分给巨人?
康斯坦汀 2012-11-29
  • 打赏
  • 举报
回复
看了一下,好像没有全部源代码,只是部分, 这种情况是开源么?对这种情况的库,我一般都直接扔垃圾箱。
这不是鸭头 2012-11-29
  • 打赏
  • 举报
回复
厉害,支持
康斯坦汀 2012-11-29
  • 打赏
  • 举报
回复
好像还不错,支持一下。
hurryboylqs 2012-11-28
  • 打赏
  • 举报
回复
最近搞这个开源的太多了
rohnaw 2012-11-28
  • 打赏
  • 举报
回复
@hexiang2005 这位兄弟说话不腰疼啊!
hexiang2005 2012-11-13
  • 打赏
  • 举报
回复
没有全部开源的代码请不要贴上来了。
ouyh12345 2012-11-11
  • 打赏
  • 举报
回复
支持一下。。

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧