SOUI是目前为数不多的轻量级可快速开发window桌面程序开源DirectUI库.其前身为Duiengine,更早期则是源自于金山卫士开源版本UI库Bkwin.经过多年持续更新方得此库

Related tags

Miscellaneous soui
Overview

SOUI

简介:

SOUI是目前为数不多的轻量级可快速开发window桌面程序开源DirectUI库.其前身为Duiengine,更早期则是源自于金山卫士开源版本UI库Bkwin.经过作者多次开发维护升级后得此库.SOUI其寓意为"瘦UI" "UI,just so so!",目的就是能够快速开发,并且在产品发布局时不需要携带其它额外的第三方依赖库,高度精简及集中;模块化使得渲染模块,图片解码模块,资源打包压缩模块得以清晰分离,更能够高度的自定义.UI解析目前可采用的是XML布局,便于理解各控件之间的层级关系及其自身的属性设置.目前已有很多成功的商业产品,深受广大开发者及企业的青睐

Git下载地址

DEMO仓库:

  • 每一个Demo一个单独的仓库,自己分别clone就好了。如果想一次拉取所有demo,可以直接运行SOUI仓库代码下的clone_demos.bat来clone,当然前提是已经安装了git命令行工具。

SOUI3仓库:

SOUI3在SOUI2的基础上完善了矩阵变换,移植了Android的插值动画及数值动画,增加了动画光标,动画滚动条等一系列更炫的效果。SOUI3.0还是100%开源,不过开源协议有更新,有兴趣的朋友注意!

编译

  • SOUI提供了多种编译方式包括qmake,cmake,nmake等等.我们推荐使用qmake方式生成符合自己的Visual Studio 版本项目工程文件,当然,如果你有兴趣也可以尝试cmake与nmake两种方式
  • qmake(推荐)

    使用 git 摘取代码后,进入代码根目录,双击运行"build.bat"
    • 1.选择编译版本[1=x86;2=x64;3=x86+x64]:选择需要编译的cpu架构(eg:1则表示生成win32的可执行文件)
    • 2.选择开发环境[1=2008;2=2010;3=2012;4=2013;5=2015;6=2017;7=2005]:选择对应的 Visual Studio 版本(eg:1表示选择使用 Visual Studio 2008)注意SOUI至少需要Visual Studio 2008 SP1及以上的 Visual Studio 版本
    • 3.选择SOUI编译模式[1=全模块DLL;2=全模块LIB;3=内核LIB,组件DLL(不能使用LUA脚本模块)]:选择生成内核的文件方式(eg:1表示所生成的内核文件及组件均为dll)
    • 4.选择字符集[1=UNICODE;2=MBCS]:(推荐选1)
    • 5.将WCHAR作为内建类型[1=是;2=否]:(推荐选1)
    • 6.选择CRT链接模式[1=静态链接(MT);2=动态链接(MD)]:(根据自大项目需求选择)
    • 7.是否为release版本生成调试信息[1=生成;2=不生成]:(根据自大项目需求选择)
    • open[o], compile[c] "soui.sln" or quit(q) [o,c or q]?输入英文字母o表示打开工程项目,c表示直接编译debug与release,q表示直接退出当前窗口
  • nmake(目前仅支持编译成dll形式)

    • 打开编译工具命令控制台窗口,输入"nmake",默认生成 x86 release 的 soui 内核依赖与两个渲染组件(gdi各skia) 图片解码组件为 png 还有 demo 运行程序,CRT为动态链接
    • 其它额外编译参数如下:
      • nmake TYPE=Debug 表示生成 x86 debug 模式
      • nmake ABI=x64 表示生成 x64 的 release 模式,如果需要 debug 模式在后面增加 TYPE=Debug 即可
      • nmake CRT=-MT 表示静态链接CRT
  • cmake(目前暂时有问题,等待完善)

论坛

SOUI开发产品不完全列表

QQ群

极力推荐

  • 阅读作者博客,能让你更快掌握如何使用SOUI快速开发Window桌面应用
  • 教学视频

捐献

  • 支付宝帐号img 微信帐号img
Issues
  • Static控件DrawMultiLine逻辑存在bug

    Static控件DrawMultiLine逻辑存在bug

    感谢soui开源给大家带来的便捷,帮朋友分析问题跟踪了一下代码,发现一处bug: 在Static控件DrawMultiLine逻辑中,正常判断'\n'即可判定需要换行,目前逻辑中判断的是'\\n',需要修正,以下是相关代码:

        while(i<cchText)
        {
            LPTSTR p2=CharNext(p1);
            if(*p1==_T('\\') && p2 && *p2==_T('n'))
            {
                if(pLineTail > pLineHead && !(uFormat & DT_CALCRECT))
                {
                    CRect rcText(pRect->left,pt.y,nRight, pt.y + nLineHei);
    		OnDrawLine(pRT,pszBuf, (int)(pLineHead-pszBuf),(int)(pLineTail-pLineHead),&rcText,uFormat);
                }
                pt.y+=nLineHei+m_nLineInter;
                pt.x=pRect->left;
                nLine++;
                i+=(int)(p2-p1);
                p1=CharNext(p2);
                i+=(int)(p1-p2);
                
                pLineHead = p2+1;
                continue;
            }
    

    文件地址:soui/SOUI/src/control/SCmnCtrl.cpp

    opened by supertianzhukui 4
  • 小bug修改以及建议

    小bug修改以及建议

    SOUI 非常不错,比较实用!

    最近在做高 DPI 适配,SOUI也在持续改进中,效果还可以,发现几个小问题:

    1. STileView 不能适配高DPI 修改: void STileView::SetItemLocator 中加入 m_tvItemLocator->SetScale(GetScale());

    2. SSplitPane 不能适配高DPI 修改: SSplitPane 使用 SLayoutSize ATTR_LAYOUTSIZE(L"idealSize", m_nSizeIdeal, FALSE) ATTR_LAYOUTSIZE(L"minSize", m_nSizeMin, FALSE) ATTR_LAYOUTSIZE(L"maxSize", m_nSizeMax,FALSE)

    3. SDpiHandler ProcessWindowMessage 中处理 WM_INITDIALOG 消息处,窗口size变化要基于原size居中, HandleScaleChange(nScale, &rc); 之前加入: CPoint ntl = rc.CenterPoint(); ntl.Offset(-sz.cx / 2, -sz.cy / 2); rc = CRect(ntl, sz); 否则原来居中显示的对话框会不居中了。

    还有个问题就是为什么每个窗口要有单独的 m_nScale?整个全局弄一个不就好了?理论上一个程序内部应该只需要一种 DPI 不是吗?现在这样很容易造成一个程序内部 DPI 不统一,仅供参考。

    最后谢谢作者,希望SOUI越来越好!

    opened by chaijh 1
  • 修复SFreeMoveWindow控件在拉伸时,光标形状自动切换成默认形状的bug

    修复SFreeMoveWindow控件在拉伸时,光标形状自动切换成默认形状的bug

    如题,SFreeMoveWindow控件之前就存在这个问题的,光标移动在控件Nc区域的时候,会自动切换光标形状,告知用户此时控件可拖伸或移动,如"sizewe",但是目前存在这么一个bug,用户在此Nc区域按住左键,然后拉伸窗口或移动窗口时,光标形状会切换回默认,此PR修复了此问题

    opened by YaoXuanZhi 0
Owner
soui
SOUI是启程软件历时半年在DuiEngine的基础上全面重构完成的开源DirectUI库
soui