精华内容
下载资源
问答
  • windows平台桌面开发技术

    千次阅读 2017-02-09 15:07:00
    目前windows平台主流开发技术。 开源类库duilib。 WPF 徽软.net平台开发技术,替代早期的winform技术 开发语言 c#, 界面设计xaml UWP 徽软的跨windows平台开发技术 开发语言c

    MFC

    传统的windows平台win32应用开发技术

    最大的缺点:设计和代码不能分离,不符合现在的主流开发技术


    DirectUI

    目前windows平台主流的开发技术。

    开源类库duilib。


    WPF

    徽软.net平台开发技术,替代早期的winform技术

    开发语言 c#, 界面设计xaml


    UWP

    徽软的跨windows平台开发技术

    开发语言cx/c#/js, 界面设计xaml


    QT

    优点跨平台, 可以运行在windows, macos, linux平台,开发语言c++


    Electron

    优点跨平台,可以运行在windows, macos, linux平台,开发语言javascript


    展开全文
  • Windows Presentation Foundation (WPF) 是下一代显示系统,用于生成能带给用户震撼视觉体验的 Windows 客户端应用程序。使用 WPF,您可以创建广泛的独立应用程序以及浏览器承载的应用程序。 WPF 的核心是一个与...
  • 桌面主流操作系统

    千次阅读 2018-11-15 19:25:00
    Windows系统是由微软公司开发的一款桌面操作系统。 优点: 用户使用最多的操作系统,原因在于Windows系统拥有很多的应用软件。 缺点:Windows系统的安全性、稳定性不够好。 macOS 由苹果公司基于Linux开发的一款...

    Windows

    Windows系统是由微软公司开发的一款桌面操作系统。

    优点: 用户使用最多的操作系统,原因在于Windows系统拥有很多的应用软件。

    缺点:Windows系统的安全性、稳定性不够好。

    macOS

    由苹果公司基于Linux开发的一款桌面操作系统,

    优点:macOS相对于Windows来说,开发环境设置比较好,适用于开发人员使用。

    Linux

    由于在Linux上运行的软件较少,所以使用用户也比较少。但是Linux经常被用来开发服务器系统和嵌入式系统。

    展开全文
  • HTML5桌面应用程序开发

    万次阅读 多人点赞 2018-10-22 20:27:27
    easy-window 是一个旨在简化桌面开发难度的通用窗体,它可以让你使用当前主流的HTML5技术快速地创建Windows桌面应用程序。创作桌面应用,不需要掌握QT,C++,C#,Java那些繁琐的东西,只要会创建网页就可以。同...

    这段时间要写一个桌面软件,比来比去没有满意的,要么不好看,要么不好用,要么打包体积太大。所以就有了这个小项目——easy-window

    easy-window是什么?

    easy-window 是一个旨在简化桌面开发难度的通用窗体,它可以让你使用当前主流的HTML5技术快速地创建Windows桌面应用程序。创作桌面应用,不需要掌握QT,C++,C#,Java那些繁琐的东西,只要会创建网页就可以。同时相较于NW.jsElectron,使用方式更加简洁,体积更小(只有几M)。

    软件界面可以有多绚,就看想象力了。闲话不多说,先来看看本工具可以创建哪些窗体应用吧。

    应用示例

    1. 简单窗体

    image
    image

    1. 设置窗体图标和标题

    image

    1. 限制窗体宽高

    image

    1. 隐藏最大化最小化按钮

    image

    1. 无边框窗体

    image
    image
    image

    1. 不规则窗体

    image
    image


    使用方法

    如果要运行示例程序,只需下载easy-window.exe文件,samples文件夹和后缀名为.vbs的文件,运行对应的vbs文件即可。可以修改vbs文件中对应的参数调整窗体样式。
    vbs参数示例说明:

    Dim shell
    Set shell = WScript.CreateObject("WScript.Shell") 
    shell.run "easy-window.exe -url https://www.baidu.com -title 百度首页"
    

    其中easy-window.exe是渲染窗体的主程序,-url指定了要显示的页面,-title设置窗口标题为百度首页,运行效果如下图:
    image
    当然,vbs文件不是必须的,可以直接在cmd控制台中运行easy-window.exe -url https://www.baidu.com -title 百度首页,效果是一样的。
    更多启动参数用法请参考下方参数说明

    参数说明

    bool类型值只能是true或者false

    参数 类型 说明
    url string 网页地址,相对地址,绝对地址,远程网址均可
    timeout int 等待页面加载超时时间,单位:毫秒
    icon string 窗体图标路径
    title string 窗体标题
    minbox bool 最小化窗体按钮,默认值:true
    maxbox bool 最大化窗体按钮,默认值:true
    minmax bool 限定窗口缩放范围,默认值:false
    border bool 窗体是否有边框,默认值:true
    resizable bool 窗体是否可缩放,默认值:true
    shadow bool 窗体边框是否有阴影,默认值:false
    posx int 窗体初始横坐标
    posy int 窗体初始纵坐标
    width int 窗体宽度
    height int 窗体高度
    contextmenu bool 是否启用鼠标右键菜单,默认值:true
    layered bool 是否是不规则窗体,默认值:false
    toolwindow bool 是否是弹窗工具窗体,默认值:false
    topmost bool 窗体是否置顶,默认值:false

    内置扩展JS函数

    内置扩展JS函数的作用是弥补Javascript在开发桌面应用时,无法调用Windows api的不足。使用这些扩展的JS函数的时候就跟调用原生的JS函数一样方便,只需要在函数前边加上external.即可。
    使用示例:

    <!DOCTYPE html>
    <html lang="en">
    <head>
    	<meta charset="UTF-8">
    <body>
    	<button onclick="loadFile()">打开文件</button>
    	<script>
    		function loadFile(){
    			//选择文件
    			var filePath = external.openFile('所有文件|*.*|文本文件(.txt)|*.txt|');
    			//读取并显示文件
    			external.alert(external.readFile(filePath), '您选择的文件内容如下');
    		}
    	</script>
    </body>
    </html>
    

    运行效果

    image
    image
    可以看到,调用external.openFile()打开了文件选择窗口,选择文件之后,该函数返回了选择的文件路径。external.readFile()则实现了本地文件的读取。
    更多函数请参见下方函数说明。

    函数 说明
    hitCaption() 主要用于绑定鼠标拖动窗体。比如,在无边框或者不规则窗体中,对指定html元素绑定该函数即可实现鼠标拖动该元素的功能,示例:<img src="images/ecology-heart.png" onmousedown="external.hitCaption()">,详情参见不规则窗体示例
    hitMax() 最大化窗体
    hitMin() 最小化窗体
    close() 关闭窗体
    alert(text, title) 提示框,text:提示内容,title:提示窗口标题
    openFile(fileType, title) 打开文件,fileType:文件类型(所有文件|*.*|文本文件|*.txt|), title:选择文件窗口标题。参数均非必填
    openDir(dir, subTitle, title) 打开目录,dir:初始目录, subTitle:子标题, title:标题。参数均非必填
    saveFile(fileType, title) 保存文件,fileType:文件类型(所有文件|*.*|文本文件|*.txt|), title:窗口标题。参数均非必填
    readFile(path) 读取文件,path:文件路径
    writeFile(path, text) 写文件,path: 文件路径, text:文件内容
    clipRead() 读取剪贴板内容
    clipWrite(text) 将内容写入剪贴板,text:文本内容
    getMousePos() 获取鼠标位置
    getPos() 获取窗体位置
    setPos(x,y,width,height) 设置窗体位置和大小,x:横坐标,y:纵坐标,width:宽度,height:高度。宽高参数可选
    getScreen() 获取屏幕宽高
    setIcon(iconPath) 设置窗体图标
    setTitle(text) 设置窗体标题
    setTopmost(state) 窗体是否置顶,state:true/false

    备注

    本项目主要目的在于简化桌面窗体开发,本身功能有限。如果需要更多功能,有两种方案:

    1. 用户界面使用miniblink(精简浏览器内核)做渲染,浏览器支持的大部分功能基本都支持,所以可以通过Ajax或者Websocket与其它服务器语言通信,更多功能由其他语言实现,其实就是用开发网站那一套开发桌面软件。
    2. 本项目使用aardio语言开发,您可以自行修改编译源码,然后打包,替换本项目的easy-window.exe即可。

    如果你对本项目感兴趣,欢迎使用,共同探讨完善。

    项目地址: https://github.com/lixk/easy-window

    项目引用

    1. aardio 地址 http://www.aardio.com/

    2. miniblink 地址 https://weolar.github.io/miniblink/

    展开全文
  • 总所周知桌面程序开发主流能数出来的就是MFC,Delphi,JavaSE,WinForm,WPF,QT等,但是他们都有较高的技术门槛,一般人要上手做出高效漂亮的界面来很难。特别是当需要做复杂的配置界面与控制面板类界面有一种来自...

    为什么选择CEF

    总所周知桌面程序开发主流能数出来的就是MFC,Delphi,JavaSE,WinForm,WPF,QT等,但是他们都有较高的技术门槛,一般人要上手做出高效漂亮的界面来很难。特别是当需要做复杂的配置界面与控制面板类界面有一种来自内心的无力,毕竟这些技术的职业前端都已经很稀少了。

    幸好CEF的出现帮助我们解决了这个问题,选它有几个优点:

    • 集成快,cef最简单的就是一个浏览器,使用最基础的静态界面+js+界面的Handler就可完成你想要的功能
    • 开发快,web前端技术是门槛最低、库最多的界面技术了
    • 利于开发各种复杂界面,对于美工的设计与个人的想法都能很好很简单的实现
    • 引入了web众多优秀特性

    当然它也存在缺点:

    • 需要将cef打包进程序,近百来兆
    • 熟练的使用需要些时间研究,而官网的文档很简陋,网上的教程很基础
    • 对chromium的版本追得不是那么紧
    • 初次加载与渲染慢
    • 遗传了web的特点,没有高性能

    C#使用CEF——CEFSharp

    其他技术接触过但是了解不多,所以无法论述,本系列是对C#下使用cef封装库CEFSharp使用的经验。cef主要使用方式就是将其自带的浏览器添加到程序界面里面,浏览器只做界面呈现,控制全部通过后台代码实现。

    使用Winform作为载体

    在选择Winform前也是走了弯路,因为觉得WPF更加简洁和高效,所以选择了WPF来作为cef浏览器的载体。这样界面配合起来更好用,但是实践后发现一个残忍的事实:

    最新的51版本对WPF兼容不太好, 运行时界面渲染会出现闪烁。

    另外网上的资料和官方的文档大都以Winfrom作为基础讲解,在学习上也更具有优势。

    资源访问方式

    网络资源

    直接使用浏览器加载初始指定页面即可,界面点击会自动跳转。网上资料泛滥。

    本地资源

    网上资料往往因为作者只是浅尝则止和文章抄袭,形成了一个误区:

    “CEF不能打包本地资源(html、js、css、img),只能将其暴露在程序路径下”。这句话是错误的!

    这是种观点是错误的,使用基础的方法通过相对路径+注册类给浏览器的方式确实不能将其打包。但是将资源添加到程序资源中,通过SchemeHandler包装请求与响应的方式可以将二进制资源以流的形式提供给cef浏览器访问(具体方法后面专文讨论)。总的来说,将程序打包是可行的,了解技术使用Google不要被百度的一大抄的文章欺骗。

    因为cefsharp均支持winform与wpf,都进行了试用。使用方式一致,唯一的区别就是51版本的wpf界面渲染时会出现闪动,所以后续cefsharp均是在winform下使用的。

    本地资源访问方式

    这种方式极不安全,仅可用于学习研究,实际工程中不建议使用。

    项目准备

    • 创建winform界面项目,指定目标框架.net 4.5.2
    • 使用nuget添加cefsharp.winform的引用(wpf添加cefsharp.wpf)
    • 在编译配置管理器中添加x64或者x86,cefsharp不支持编译成Any CPU

    开始撸代码

    废话不多说直接上代码:

    using System;
    using System.Windows.Forms;
    using CefSharp;
    using CefSharp.WinForms;
    
    namespace Ceftest
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
                this.Load += Form1_Load;
                this.FormClosed += Form1_FormClosed;
            }
    
            private void Form1_Load(object sender, EventArgs e)
            {
                // 要先初始化才能用
                Cef.Initialize();
    
                // cefsharp提供的浏览器控件,一般用它充满窗口就搞定了
                ChromiumWebBrowser bs = new ChromiumWebBrowser("http://www.oschina.net")
                {
                    // 填充整个父控件
                    Dock = DockStyle.Fill
                };
    
                // 添加到窗口的控件列表中
                this.Controls.Add(bs);
            }
    
            private void Form1_FormClosed(object sender, FormClosedEventArgs e)
            {
                // 结束时要销毁
                Cef.Shutdown();
            }
        }
    }
    

    在上面的代码里可以看到浏览器初始化的时候访问的是oschina,访问web网页很简单给出地址即可,页面内链接跳转cef会自己处理的。如果需要操作加载指定页面只需要调用浏览器控件的Load(string url)方法即可。

    访问本地网页

    创建web前端界面helloworld.html

    项目结构如下图:

    vs项目结构

    添加生成事件

    在项目属性生成事件中添加后期生成事件如下,就会在编译生成后将web界面相关文件复制到生成目录的Resource文件夹下。

    xcopy /s /y $(ProjectDir)Resource $(TargetDir)Resource\

    编辑hellworld.html

    代码:

    <!DOCTYPE html>
    
    <html lang="en" xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <meta charset="utf-8" />
        <title>hello world</title>
        <link href="../Resource/css/bootstrap.min.css" rel="stylesheet" />
    </head>
    <body>
        <h1 id="h1"></h1>
    </body>
    </html>
    <script src="../Resource/js/jquery-1.10.2.min.js"></script>
    <script src="../Resource/js/bootstrap.min.js"></script>
    <script>
        $(function(){
            $("#h1").html("Hello world!");
        });
    </script>
    

    这里要注意js与css文件的路径,需要在前面加上../,才能通过helloworld.html的相对路径解析文件的绝对路径,不然cef无法访问资源文件。

    修改cef浏览器控件初始化代码

            private void Form1_Load(object sender, EventArgs e)
            {
                // 要先初始化才能用
                Cef.Initialize();
    
                // 获取生成路径下网页文件的绝对路径
                var fileName = Path.Combine(Directory.GetCurrentDirectory(), "Resource/helloworld.html");
    
                // cefsharp提供的浏览器控件,一般用它充满窗口就搞定了
                ChromiumWebBrowser bs = new ChromiumWebBrowser(fileName)
                {
                    // 填充整个父控件
                    Dock = DockStyle.Fill
                };
                
                // 添加到窗口的控件列表中
                this.Controls.Add(bs);
            }
    

    在上一步已经提到了,cefsharp访问本地的文件是以绝对路径的方式进行的,所以要先构造初始界面的绝对路径。如果需要加载其他界面,调用Load方法的时候也要传递网页的绝对路径。

    F5完成,弹出窗口,本地界面被显示出来了

    Hello world

    总结

    这种直接访问本地资源的方式简单粗暴,适合学习、调试使用。正常项目切记不能使用这种方式,因为它使得我们的界面代码文件全部暴露在程序路径下面,可以被随意篡改。

    当然cefsharp也是早就想到了这个问题,提供了一种将web文件打包到程序资源中提供访问的方法。下面是Cefsharp本地开发时如何访问程序资源,C#项目自带有可以打包的资源,而Cefsharp可以通过一些方式在浏览器上访问到这些资源,进而解决html文件的编译打包问题。

    程序资源访问方式

    建立项目添加web文件这些就不赘述,参考上述博文即可。

    准备

    一个新的Winform项目,文件结构如下:

    项目文件结构

    添加资源

    打开Properties下的Resources.resx,将Resource下所有用到的文件拖动到Resources.resx窗口中。
    拿bootstrap.min.js举例:

    1. 拖动过去,界面如下

    添加的资源文件

    1. 重命名资源(加上后缀名),因为默认vs会帮你“智能”的去掉后缀名,然而Resources.resx内不允许建文件夹,所以在使用资源的时候并不能分得清。

    重命名文件名

    1. 调用,使用静态资源类Resources 调用对应的资源名称即可获得资源的值。
    Resources.bootstrap_min_js;
    

    需要注意的是:

    资源分为很多种类型,常见的键值对、文本文件类型为string,二进制文件则为byte[],图片为Bitmap类型。在使用的时候需要注意。

    照着这样将所有的文件都添加进去,这样编译后就些文件会当成资源被打包到.exe中。

    注意:资源中存放的是文件在项目中的相对路径,所以移动后一定要重新新增资源,不然编译就会找不到文件。

    使用资源

    cefsharp能够在浏览器中访问到上述的资源是因为它内部提供了一个Scheme机制,能够截留自定义的Scheme请求,进行处理和响应。这样我们就可以将资源当做请求的返回值,提供给浏览器了。

    正常的Scheme,如http,https这些是不会被这个机制截留的,仍然会按照浏览器正常机制进行。

    创建自定义的Scheme类

    cefsharp有一个自定义接口IResourceHandler,实现这个接口就可以了。

    PS:以前是叫ISchemeHandler的,后面改成IResourceHandler了,我觉着这个还是蛮贴切的,资源处理器。另一层原因可能是因为把将接口这些虚拟自己纳入进来的原因吧,是的,这个里面我们可以提供接口处理。

    自定义的Scheme类CustomSchemeHandler:

    using CefSharp;
    using Ceftest.Properties;
    using System;
    using System.Collections.Generic;
    using System.IO;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace Ceftest
    {
        public class CustomSchemeHandler : IResourceHandler
        {
            private readonly IDictionary<string, byte[]> resources;
    
            private string mimeType;
            private MemoryStream stream;
    
            public CustomSchemeHandler()
            {
                resources = new Dictionary<string, byte[]>
                {
                    {"/asset/bootstrap_min.css", Encoding.UTF8.GetBytes(Resources.bootstrap_min_css) },
                    {"/asset/bootstrap_min.js", Encoding.UTF8.GetBytes(Resources.bootstrap_min_js) },
                    {"/asset/jquery.js", Encoding.UTF8.GetBytes(Resources.jquery_1_10_2_min_js) },
                    {"/helloworld.html", Encoding.UTF8.GetBytes(Resources.helloworld_html) },
                };
            }
    
            // 当收到请求时的处理器
            bool IResourceHandler.ProcessRequest(IRequest request, ICallback callback)
            {
                var uri = new Uri(request.Url);
                var resourceName = uri.AbsolutePath;
    
                if (string.Equals(resourceName, "/exampleUri", StringComparison.OrdinalIgnoreCase))
                {
                    // 这样写就可以针对特定的请求进行处理和响应
                }
    
                // 普通的文件资源处理
                byte[] resource;
                if (resources.TryGetValue(resourceName, out resource))
                {
                    Task.Run(() =>
                    {
                        using (callback)
                        {
                            stream = new MemoryStream(resource);
                            var fileExtension = Path.GetExtension(resourceName);
                            mimeType = ResourceHandler.GetMimeType(fileExtension);
                            callback.Continue();
                        }
                    });
    
                    return true;
                }
                else
                {
                    mimeType = ResourceHandler.GetMimeType(".html");
                    stream = null;
                    callback.Continue();
                }
    
                return false;
            }
    
            // 当包装responseheader的处理代码
            void IResourceHandler.GetResponseHeaders(IResponse response, out long responseLength, out string redirectUrl)
            {
                redirectUrl = null;
                response.MimeType = mimeType;
    
                if (stream != null)
                {
                    responseLength = stream.Length;
                    response.StatusCode = (int)System.Net.HttpStatusCode.OK;
                    response.StatusText = "OK";
                }
                else
                {
                    responseLength = 0;
                    response.StatusCode = (int)System.Net.HttpStatusCode.NotFound;
                    response.StatusText = "NotFound";
                }
            }
            
            // 当包装responsebody的处理代码
            bool IResourceHandler.ReadResponse(Stream dataOut, out int bytesRead, ICallback callback)
            {
                callback.Dispose();
    
                if (stream == null)
                {
                    bytesRead = 0;
                    return false;
                }
    
                var buffer = new byte[dataOut.Length];
                bytesRead = stream.Read(buffer, 0, buffer.Length);
    
                dataOut.Write(buffer, 0, buffer.Length);
    
                return bytesRead > 0;
            }
    
            bool IResourceHandler.CanGetCookie(Cookie cookie)
            {
                return true;
            }
    
            bool IResourceHandler.CanSetCookie(Cookie cookie)
            {
                return true;
            }
    
            void IResourceHandler.Cancel()
            {
            }
    
            void IDisposable.Dispose()
            {
                if (stream != null)
                {
                    stream.Close();
                    stream.Dispose();
                }
            }
        }
    }
    

    按照代码实现的接口就可以将指定的收到的请求的资源返回,基本结构上与cefsharp.example中的代码差不多。但是这里有几个需要说明:

    1. 资源字典没有像官方demo使用<string,string>的键值对,而是使用<string,byte[]>这样的,因为我们的资源都是通过流传递的二进制回去,所以byte[]更能存放图片,文本,二进制文件等多种类型。
    2. 资源字典中定义的资源名,在使用时需要与之同名,而不是使用文件名。

    创建CustomSchemeHandler的工厂类

    因为cefsharp采用了工厂的设计模式,所以还需要实现一个对应的工厂类 CustomSchemeHandlerFactory:

    using CefSharp;
    
    namespace Ceftest
    {
        public  class CustomSchemeHandlerFactory : ISchemeHandlerFactory
        {
            public const string SchemeName = "custom";// 自定义Scheme的名称
    
            public IResourceHandler Create(IBrowser browser, IFrame frame, string schemeName, IRequest request)
            {
                if (schemeName == SchemeName)
                {
                    return new CustomSchemeHandler();
                }
                else
                {
                    // 这里的404界面未添加到程序里
                    var mimeType = ResourceHandler.GetMimeType(".html");
                    return ResourceHandler.FromFilePath("404.html", mimeType);
                }
            }
        }
    }
    

    这里需要注意的两点:

    1. URL的结构为[scheme]://[domain]:[port]/[path],工厂类中只对scheme中做了判断,如果想要对domain与path进行判断则对request中的url进行解析即可。简单情况下请求时,path就是我们的资源名,domain随便填。
    2. create方法就是在一个请求到来是调用,意味着每个请求都会new一个CustomSchemeHandler类进行处理。

    在heloworld.html中添加资源引用

    直接使用资源的名称即可,不用带上'/'。代码如下:

    <!DOCTYPE html>
    
    <html lang="en" xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <meta charset="utf-8" />
        <title></title>
        <link href="asset/bootstrap_min.css" rel="stylesheet" />
    </head>
    <body>
        <h1 id="h1"></h1>
    </body>
    </html>
    <script src="asset/bootstrap_min.js"></script>
    <script src="asset/jquery.js"></script>
    <script>
        $(function(){
            $("#h1").html("Hello world!");
        });
    </script>
    

    最后一步

    这一切准备工作都做好了,只需要将我们的自定义Scheme工厂注册给cef,紧接着在浏览器中访问我们的helloworld.html即可。form1代码如下:

    using System;
    using System.Windows.Forms;
    using CefSharp;
    using CefSharp.WinForms;
    using System.IO;
    
    namespace Ceftest
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
                this.Load += Form1_Load;
                this.FormClosed += Form1_FormClosed;
            }
    
            private void Form1_Load(object sender, EventArgs e)
            {
                // 构造一个初始化的配置类
                var settings = new CefSettings();
                // 在配置类中注册自定义的schemeName与其对应的工厂类
                settings.RegisterScheme(new CefCustomScheme
                {
                    SchemeName = CustomSchemeHandlerFactory.SchemeName,
                    SchemeHandlerFactory = new CustomSchemeHandlerFactory(),
                });
    
                // 要先初始化才能用
                Cef.Initialize(settings);
    
                // cefsharp提供的浏览器控件,一般用它充满窗口就搞定了
                ChromiumWebBrowser bs = new ChromiumWebBrowser("custom://suibiantian/helloworld.html")
                {
                    // 填充整个父控件
                    Dock = DockStyle.Fill
                };
                
                // 添加到窗口的控件列表中
                this.Controls.Add(bs);
            }
    
            private void Form1_FormClosed(object sender, FormClosedEventArgs e)
            {
                // 结束时要销毁
                Cef.Shutdown();
            }
        }
    }
    

    运行后即可看到helloworld的界面,去生成路径下看看没有网页文件是吧。



    作者:术士冲前面
    链接:https://www.jianshu.com/p/3f50cc747606
    来源:简书
    简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

    展开全文
  • 程序开发:目前主流开发技术的分析和总结 主流的程序设计语言:C++、Delphi(ObjectPascal)、Java、C#  桌面应用程序框架:MFC、VCL、QT、JavaAWT\SWING、.Net  企业应用程序框架:WindowsDNA(ASP、COM、COM+)、...
  • 虽然html5+js现在是web的开发主流,但是我们应用一般是windows系统。并且应使用中,需要打开谷歌或其它的浏览器,这个很麻烦。 在百度中找到一个windows的DesktopTools看以很好用,用来分析了一下。在网上下载...
  • SuperMap iDesktopX是业界首款跨平台全功能桌面 GIS 软件,支持主流Linux操作系统,突破了专业桌面 GIS 软件只能运行于 Windows 环境的困境。提供空间数据生产及加工、空间大数据管理分析、可视化建模、服务发布等...
  • c++为什么适合桌面软件开发

    千次阅读 2020-10-05 11:11:02
    C++适合桌面开发?这个不见得,要看是什么系统了,如果是Windows系统,那么C#或Delphi可能更合适,如果考虑到性能和跨平台性,那么Qt等C++框架可能更合适,下面我分别简单介绍一下,感兴趣的朋友可以尝试一下: 01 ...
  • 主流开发技术语言及主要应用方向 C++:面向对象的语言,多应用于图像处理,服务器后台程序...C#:应用于windows桌面应用程序 .net:网站应用 python:脚本语言,大数据处理,软件测试 shell:同python语言 oc:iso开发
  • 其系列用户界面组件ToolKit Pro,Suite Pro不断得到增强,从而为Windows开发人员提供了最全面的,编写良好,稳定的组件。全球各地的公司持续选择Codejock软件来部署专业的前沿应用程序。本文详细介绍其旗下的主流界面...
  • 虽然B/S是目前开发主流,但是C/S仍然有很大的市场需求。受限于浏览器的沙盒限制,网页应用无法满足某些场景下的使用需求,而桌面应用可以读写本地文件、调用更多系统资源,再加上Web开发的低成本、高效率的优势,...
  • 主流的程序设计语言:C++、Delphi(ObjectPascal)、Java、C#  桌面应用程序框架:MFC、VCL、QT、JavaAWT\SWING、.Net  企业应用程序框架:WindowsDNA(ASP、COM、COM+)、J2EE、.NetFramework  开发工具...
  • Ubuntu是一个以桌面应用为主的开源操作系统, 它基于开源的linux系统开发, linux也是一种操作系统, 只不过跟我们常用的Windows不同, linux系统上面没有可视化的头像, 全是代码! 而Ubuntu就是基于linux...
  • 是一个旨在简化桌面开发难度的通用窗体,它可以让你使用当前主流HTML5技术快速地创建Windows桌面应用程序。创作桌面应用,不需要掌握QT,C++,C#,Java那些繁琐的东西,只要会创建网页就可以。 相较于NW.js和...
  • 虽然B/S是目前开发主流,但是C/S仍然有很大的市场需求。受限于浏览器的沙盒限制,网页应用无法满足某些场景下的使用需求,而桌面应用可以读写本地文件、调用更多系统资源,再加上Web开发的低成本、高效率的优势,...
  • Qt开发的程序都是跨平台的,可以在Windows、FreeBSD、Linux(X11)、MacOSX四大主流桌面平台上运行,还支持 Symbian、Embedded Linux、WinCE、Maemo四种嵌入式平台,而OpenSolaris、iPhone OS、Android、Amazon Kindle...
  • 主流的程序设计语言:C++、Delphi(ObjectPascal)、Java、C# 桌面应用程序框架:MFC、VCL、QT、JavaAWT/SWING、.Net 企业应用程序框架:WindowsDNA(ASP、COM、COM+)、J2EE、.NetFramework  开发工具:Visual...
  • c/s 软件 桌面网络应用软件 (QQ) 主流应用模式(http协议 / socket进行tcp/ip编程,多线程) 纯桌面软件(单机软件) 开发这种应用的不会太多 工具 3G网络游戏(一种方向,比现在网游火) 在android操作系统...
  • Delphi开发Pyhron GUI ...它是本机Windows应用程序的主流框架,但是如何在Python中使用它呢?多亏了DelphiVCL Python软件包(基于开源Python4Delphi库),VCL是用于使用Python构建本机Windows...
  • windows vista 简体中文

    2019-12-21 13:24:09
    Windows Vista是微软发行的一款Windows个人桌面操作系统,于2005年7月22日微软正式公布此名称。原代号为Longhorn。Windows Vista的内部版本是6.0(即Windows NT 6.0),正式版的Build是6.0.6000。在2006年11月8日,...
  • windows 程序设计

    2012-03-07 15:25:21
    因为这些窗口看起来有些像桌面上的纸(当然,这是计算机还未占据办公桌之前的年代),Windows有时被称作:一个显示多个程序的「具象化桌面」。 Windows的早期版本使用一种「非优先权式(non-preemptive)」的多任务...
  • 对应用进行打包和发布十分简单,也就是说写一份代码很容易移植到不同的平台(包括主流的Linux, Mac OS X 和 Windows); 课程基本介绍: 本课程属于 NW.JS新手入门跨平台项目实战课程,适合各个阶段的开发人员,大...
  • Windows Mobile Standard是主流的手机操作系统之一,但其中的汉字输入法少,用户选择余地小。首先比较了Windows Mobile Standard中文输入法与桌面Windows中文输入法的异同,分析了Windows Mobile Standard的输入接口...
  • 桌面共享.zip

    2019-10-07 00:29:33
    VNC 是一款优秀的远程控制工具软件,由著名的 AT&T 的欧洲研究实验室开发的。VNC 是在基于 UNIX 和 Linux操作系统的免费的开源软件,远程控制能力强大,高效实用,其性能可以和 Windows 或 MAC 中的任何远程控制软件...
  • 桌面操作系统 ...适合开发人员 Linux 应用软件少 服务器操作系统 Linux 安全、稳定、免费 占有率高 Windows Server 付费 占有率低 嵌入式操作系统 Linux 移动设备操作系统 IOS Android ...
  • Microsoft UWP(通用Windows平台)...正如您可能已经看到的那样,在过去的一个月中,围绕UWP(通用Windows平台)和当前焦点或焦点的变化进行了一些讨论,以及开发人员应如何为其主流操作系统构建应用程序,Windows 1...
  • Qt开发文档

    2018-05-26 21:16:56
    Qt本身支持众多操作系统。从通用操作系统Linux、Windows,到手机系统Android、iOS、WinPhone,嵌入式系统支持QNX、VxWorks,应用...目前主流使用的Qt库有Qt4和Qt5两个大版本,下面介绍其在Windows系统里的下载和安装。

空空如也

空空如也

1 2 3 4 5 ... 11
收藏数 203
精华内容 81
关键字:

windows桌面开发主流