桌面应用程序_桌面应用程序开发 - CSDN
精华内容
参与话题
  • HTML5桌面应用程序开发

    万次阅读 2019-05-08 10:14: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/

    展开全文
  • 欢迎阅读学习用C++编写Windows程序系列。本系列的目的是教你如何用C++编写Windows程序。 在第一个模块中,您将逐步学习如何创建和显示一个窗口。稍后的模块将引入组件对象模型(COM),图形和文本以及用户输入。 对于...

    本入门系列的目的是教您如何使用Win32和COM API在C ++中编写桌面程序。

    在第一个模块中,您将逐步了解如何创建和显示窗口。 后面的模块将介绍组件对象模型(COM),图形和文本以及用户输入。

    对于本系列,假设您具有良好的C ++编程工作知识。 没有以前的Windows编程经验。如果您不熟悉C ++,可以在Visual C ++开发人员中心找到学习资料。(某些语言和国家/地区可能无法使用此资源。)
    在这个部分

    话题 描述
    学习用C++编写Windows程序简介 本节介绍Windows编程中使用的一些基本术语和编码约定。
    模块1.您的第一个Windows程序 在这个模块中,您将创建一个显示空白窗口的简单Windows程序。
    模块2.在Windows程序中使用COM 本模块介绍了组件对象模型(COM),它是许多现代Windows API的基础。
    模块3.Windows图形 本模块介绍Windows图形体系结构,重点介绍Direct2D。
    模块4.用户输入 本模块介绍鼠标和键盘输入。
    示例代码 包含链接以下载本系列的示例代码。

    原文链接:Get Started with Win32 and C++

    展开全文
  • 应用程序窗口的屏幕截图 这种类型的窗口被称为应用程序窗口或主窗口。它通常有一个标题栏框架,最小化和最大化按钮,以及其他标准的UI元素。这个框架被称为窗口的非客户区,所谓的是因为操作系统管理窗口的那一部分。...

    什么是窗口?
    显然,窗口是Windows的核心。他们是如此重要,以至于他们命名操作系统。但是,窗口是什么?当你想到一个窗口,你可能会想到这样的东西:
    这里写图片描述
    应用程序窗口的屏幕截图

    这种类型的窗口被称为应用程序窗口主窗口。它通常有一个标题栏框架,最小化最大化按钮,以及其他标准的UI元素。这个框架被称为窗口的非客户区,所谓的是因为操作系统管理窗口的那一部分。框架内的区域是客户区。这是您的程序管理窗口的一部分。
    这是另一种类型的窗口:
    这里写图片描述
    控制窗口的屏幕截图

    如果你不熟悉Windows编程,可能会让你感到意外的是,UI控件(如按钮和编辑框)本身就是一个窗口。UI控件和应用程序窗口之间的主要区别在于控件本身不存在。相反,控件相对于应用程序窗口定位。当你拖动应用程序窗口时,控件随着它移动,就像你期望的那样。另外,控件和应用程序窗口可以相互通信。(例如,应用程序窗口收到来自按钮的点击通知。)
    因此,当你认为窗口时,不要简单地想应用程序窗口。相反,将一个窗口想象成一个编程构造:

    • 占据屏幕的某个部分。
    • 可能会在某个特定时刻显示或不显示。
    • 知道如何绘制自己。
    • 响应来自用户或操作系统的事件。

    父窗口和所有者窗口
    在UI控制的情况下,控制窗口被认为是应用程序窗口的子窗口。应用程序窗口是控制窗口的父窗口。父窗口提供用于定位子窗口的坐标系。拥有父窗口会影响窗口外观的各个方面;例如,一个子窗口被裁剪掉,这样子窗口的任何部分都不能出现在其父窗口的边界之外。
    另一种关系是应用程序窗口和模式对话框窗口之间的关系。当应用程序显示模式对话框时,应用程序窗口是所有者窗口,对话框是被拥有窗口。拥有的窗口总是出现在其拥有者窗口的前面。当所有者被最小化时,它被隐藏,并且与所有者同时被销毁。
    下图显示了一个应用程序,它显示一个带有两个按钮的对话框:
    这里写图片描述
    使用对话框的应用程序的屏幕截图

    应用程序窗口拥有对话窗口,对话窗口是两个按钮窗口的父窗口。下图显示了这些关系:
    这里写图片描述
    显示父母/孩子和所有者/拥有关系的插图

    窗口句柄
    Windows是对象——它们有代码和数据——但它们不是C++类。相反,程序通过使用称为句柄的值来引用窗口。句柄是不透明的类型。从本质上讲,操作系统只是用来识别一个对象。您可以将Windows绘制为具有已经创建的所有窗口的大表格。它使用这个表来通过他们的句柄来查找窗口。(不管内部是如何工作的并不重要。)窗口句柄的数据类型是HWND,通常读作”aitch-wind”。窗口句柄由创建窗口的函数返回:CreateWindowCreateWindowEx
    要在窗口上执行一个操作,通常会调用某个函数,它将HWND值作为参数。例如,要在屏幕上重新定位窗口,请调用MoveWindow函数:

    BOOL MoveWindow(HWND hWnd,int X,int Y,int nWidth,int nHeight,BOOL bRepaint);

    第一个参数是要移动的窗口的句柄。其他参数指定窗口的新位置以及是否应重新绘制窗口。
    请记住,句柄不是指针。如果hwnd是一个包含句柄的变量,试图通过写* hwnd来解除引用句柄是一个错误。
    屏幕和窗口坐标
    坐标以与设备无关的像素来衡量。当我们讨论图形时,我们将更多地讨论设备无关像素设备无关部分。
    根据您的任务,您可以测量相对于屏幕的相对于窗口(包括框架)的坐标,或相对于窗口的客户区域的坐标。例如,您可以使用屏幕坐标在屏幕上放置一个窗口,但是您将使用客户端坐标在窗口内绘制。在每种情况下,原点(0,0)始终是该区域的左上角。
    这里写图片描述
    显示屏幕,窗口和客户端坐标的插图

    下一个
    WinMain:应用程序入口点


    原文链接:What Is a Window?

    展开全文
  • 文章转载于:https://blog.csdn.net/u011583927/article/details/54896961如何创建一个最简单的Windows桌面应用程序 (C++) 最近刚开始学习C/C++开发Windows应用程序,这里将会以零基础的视角把学习过程完全记录下来...

    文章转载于:https://blog.csdn.net/u011583927/article/details/54896961


    如何创建一个最简单的Windows桌面应用程序 (C++)


         最近刚开始学习C/C++开发Windows应用程序,这里将会以零基础的视角把学习过程完全记录下来。如果你也刚刚起步,那本文一定非常适合你。

         进入正题,本文讨论如何使用Visual Studio生成一个最简单的C窗体应用程序,并向用户显示Hello~

         下面我们一步步来介绍,对于涉及代码的地方,我们只介绍大体的框架,完整的代码会在文章最后给出。   

         创建基于 Win32 的项目

         1.在文件菜单上,单击新建,然后单击项目。

         2.在“新建项目”对话框的左窗格中,依次单击“已安装模板”和“Visual C++”,然后选择“Win32”。在中间窗格中,选择“Win32 项目”。在“名称”框中,键入项目名称,例如HelloApp。单击“确定”。

         3.在“Win32 应用程序向导”的欢迎页面中,单击“下一步”。在“应用程序设置”页的“应用程序类型”下,选择“Windows 应用程序”。 在“附加选项”下,选择“空项目”。 单击“完成”以创建项目。

         4.在“解决方案资源管理器”中,右键单击 HelloApp项目,然后依次单击“添加”和“新建项”。 在“添加新项”对话框中选择“C++ 文件(.cpp)”。 在“名称”框中,键入文件名,例如GT_HelloWorldWin32.cpp。单击“添加”。

         添加引用

         我们的应用程序需要使用许多现有定义才能完成所需功能,针对我们的需求,添加引用如下(其中前两个是必须的):

    1. #include <windows.h>   
    2. #include <stdlib.h>   
    3. #include <string.h>   
    4. #include <tchar.h>   

         WinMain函数     

         正如每个 C/C++控制台应用程序在起始点必须具有 main 函数,每个基于 Win32 的应用程序的函数也必须具有 WinMain 函数。WinMain就相当于是入口函数,并且具有固定的语法:

    1. int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow);   

         实现WinMain函数时内部逻辑大体相同,主要有以下几部分:

         1.创建描述窗体信息的窗口类结构WNDCLASSEX 

         如何创建一个 WNDCLASSEX 类型的窗口类结构?下面的代码演示了一个典型的窗口类结构WNDCLASSEX 的定义:

    1. //创建 WNDCLASSEX 类型的窗口类结构。 此结构包含关于窗口的信息  
    2.     //例如应用程序图标、窗口背景色、标题栏中显示的名称、窗口过程函数的名称等。  
    3.     WNDCLASSEX wcex;   
    4.     wcex.cbSize = sizeof(WNDCLASSEX);   
    5.     wcex.style          = CS_HREDRAW | CS_VREDRAW;   
    6.     wcex.lpfnWndProc    = WndProc;   
    7.     wcex.cbClsExtra     = 0;   
    8.     wcex.cbWndExtra     = 0;   
    9.     wcex.hInstance      = hInstance;   
    10.     wcex.hIcon          = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_APPLICATION));   
    11.     wcex.hCursor        = LoadCursor(NULL, IDC_ARROW);   
    12.     wcex.hbrBackground  = (HBRUSH)(COLOR_WINDOW+1);   
    13.     wcex.lpszMenuName   = NULL;   
    14.     wcex.lpszClassName  = szWindowClass;   
    15.     wcex.hIconSm        = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_APPLICATION));   

         对于初学者,我们不用过分纠结代码的细节,暂时从宏观上把控。我们需要知道,此结构包含关于窗口的信息,例如应用程序图标、窗口背景色、标题栏中显示的名称、窗口过程函数的名称等。
         2.对窗口类进行注册

         现在已创建了窗口类,必须进行注册。

         使用 RegisterClassEx 函数,并将窗口类结构作为参数传递。

    1. RegisterClassEx(&wcex);  

         3.创建并显示窗口

         现在需要使用CreateWindow函数创建窗口

         使用ShowWindow函数显示窗口

         这部分也很好理解,详见文末的代码

         4.侦听消息

         添加用于侦听操作系统所发送消息的消息循环。

         当应用程序收到一条消息时,此循环将该消息调度到 WndProc 函数。WndProc 函数用于对接收的消息进行处理,我们下面会介绍到。 

         该消息循环类似于以下代码:

    1. // Main message loop:   
    2.     // 添加用于侦听操作系统所发送消息的消息循环。   
    3.     // 当应用程序收到一条消息时,此循环将该消息调度到 WndProc 函数以进行处理。   
    4.     MSG msg;   
    5.     while (GetMessage(&msg, NULL, 0, 0)) {   
    6.         TranslateMessage(&msg); //翻译消息  
    7.         DispatchMessage(&msg);  //派遣消息  
    8.     }   

         WndProc 函数

         WndProc 函数用以处理应用程序收到的消息。

         首先需要判断收到的消息类型进而做出不同的处理,这需要使用 switch 语句。
         系统提供了众多的消息命令,例如 WM_PAINT 代表收到了绘图消息,而收到鼠标点击消息的标识是WM_LBUTTONDOWN...

         这里以处理 WM_PAINT 消息为例进行说明。

         要处理 WM_PAINT 消息,首先应调用 BeginPaint,然后处理所有的绘图逻辑,例如在窗口中布局文本、按钮和其他控件,然后调用 EndPaint。 

         对于此应用程序,开始调用和结束调用之间的逻辑是在窗口中显示字符串 “Hello,World!”。 在以下代码中,TextOut 函数用于显示字符串。

    1. LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) {   
    2.     PAINTSTRUCT ps;  
    3.     HDC hdc;   
    4.     TCHAR greeting[] = _T("Hello, World!");   
    5.     switch (message) {   
    6.         case WM_PAINT:   
    7.             //要处理 WM_PAINT 消息,首先应调用 BeginPaint  
    8.             //然后处理所有的逻辑以及在窗口中布局文本、按钮和其他控件等  
    9.             //然后调用 EndPaint。   
    10.             hdc = BeginPaint(hWnd, &ps);   
    11.   
    12.             // -----------------在这段代码对应用程序进行布局------------------------   
    13.             // 对于此应用程序,开始调用和结束调用之间的逻辑是在窗口中显示字符串 “Hello,World!”。  
    14.             // 请注意 TextOut 函数用于显示字符串。  
    15.             TextOut(hdc, 50, 5, greeting, _tcslen(greeting));   
    16.             // -----------------------布局模块结束----------------------------------  
    17.   
    18.             EndPaint(hWnd, &ps);  
    19.             break;   
    20.         case WM_DESTROY:   
    21.             PostQuitMessage(0);   
    22.             break;  
    23.         default:   
    24.             //DefWindowProc缺省窗口处理函数  
    25.             //这个函数是默认的窗口处理函数,我们可以把不关心的消息都丢给它来处理  
    26.             return DefWindowProc(hWnd, message, wParam, lParam);   
    27.             break;   
    28.     }   
    29.     return 0;   
    30. }   

         程序运行的结果为:


         完整代码

         到此我已经理清了写一个Windows应用程序的主要逻辑

         我是按照Microsoft官方文档进行的学习,详见创建Windows桌面应用程序

         对于更多的细节,代码中给出了详细注释。

    1. // GT_HelloWorldWin32.cpp   
    2. // compile with: /D_UNICODE /DUNICODE /DWIN32 /D_WINDOWS /c   
    3. // 这是一个最简单的Win32程序,亦可作为开发桌面应用程序的模板  
    4.   
    5. #include <windows.h>   
    6. #include <stdlib.h>   
    7. #include <string.h>   
    8. #include <tchar.h>   
    9.   
    10. // ------------------------Global variables---------------------------------  
    11. // 主窗体类名  
    12. static TCHAR szWindowClass[] = _T("win32app");   
    13. // 应用程序标题栏处出现的字符串  
    14. static TCHAR szTitle[] = _T("Win32 Guided Tour Application");   
    15.   
    16. //HINSTANCE 是Windows里的一中数据类型,是用于标示(记录)一个程序的实例。  
    17. //它与HMODULE是一样的(通用的,这两种类型最终就是32位无符号长整形)。  
    18. //HINSTANCE,分开看就是 HANDLE(句柄) + INSTANCE(实例)  
    19. //实例就是一个程序。用qq来举例:你可以开同时开2个qq号,但是你电脑里的qq软件只有一份。  
    20. //这2个qq号就是qq的2个实例  
    21. HINSTANCE hInst;   
    22.   
    23. // -------------------------需要预定义的函数放置在此代码块种:----------------------------   
    24.   
    25.   
    26. //每个 Windows 桌面应用程序必须具有一个窗口过程函数  
    27. //此函数处理应用程序从操作系统中接收的大量消息。   
    28. //例如,如果应用程序的对话框中有“确定”按钮,那么用户单击该按钮时,  
    29. //操作系统会向应用程序发送一条消息,通知按钮已被单击。WndProc 负责对该事件作出响应。  
    30. //在本例中,相应的响应可能是关闭对话框。  
    31. LRESULT CALLBACK WndProc(HWNDUINTWPARAMLPARAM);   
    32.   
    33. //-------------------------------------正式内容-----------------------------------------  
    34.   
    35. //主窗体函数(入口过程)  
    36. //每个基于 Win32 的应用程序的函数必须具有 WinMain 函数  
    37. //正如每个 C 应用程序和 C++ 控制台应用程序在起始点必须具有 main 函数  
    38. int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {   
    39.     //创建 WNDCLASSEX 类型的窗口类结构。 此结构包含关于窗口的信息  
    40.     //例如应用程序图标、窗口背景色、标题栏中显示的名称、窗口过程函数的名称等。  
    41.     WNDCLASSEX wcex;   
    42.     wcex.cbSize = sizeof(WNDCLASSEX);   
    43.     wcex.style          = CS_HREDRAW | CS_VREDRAW;   
    44.     wcex.lpfnWndProc    = WndProc;   
    45.     wcex.cbClsExtra     = 0;   
    46.     wcex.cbWndExtra     = 0;   
    47.     wcex.hInstance      = hInstance;   
    48.     wcex.hIcon          = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_APPLICATION));   
    49.     wcex.hCursor        = LoadCursor(NULL, IDC_ARROW);   
    50.     wcex.hbrBackground  = (HBRUSH)(COLOR_WINDOW+1);   
    51.     wcex.lpszMenuName   = NULL;   
    52.     wcex.lpszClassName  = szWindowClass;   
    53.     wcex.hIconSm        = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_APPLICATION));   
    54.       
    55.     //对已创建的窗口类进行注册。 使用 RegisterClassEx 函数,并将窗口类结构作为参数传递。  
    56.     if (!RegisterClassEx(&wcex)) {   
    57.         MessageBox(NULL, _T("Call to RegisterClassEx failed!"), _T("Win32 Guided Tour"), NULL);   
    58.         return 1;   
    59.     }   
    60.   
    61.     // Store instance handle in our global variable   
    62.     // 将句柄实例存储于全局变量中  
    63.     hInst = hInstance;   
    64.       
    65.     // CreateWindow 函数的参数解释:   
    66.     // szWindowClass: the name of the application   
    67.     // szTitle: the text that appears in the title bar   
    68.     // WS_OVERLAPPEDWINDOW: the type of window to create   
    69.     // CW_USEDEFAULT, CW_USEDEFAULT: initial position (x, y)   
    70.     // 500, 100: initial size (width, length)   
    71.     // NULL: the parent of this window   
    72.     // NULL: this application does not have a menu bar   
    73.     // hInstance: the first parameter from WinMain   
    74.     // NULL: not used in this application   
    75.     // 返回的HWND是一个窗口的句柄  
    76.     HWND hWnd = CreateWindow( szWindowClass, szTitle, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 500, 100, NULL, NULL, hInstance, NULL );   
    77.     if (!hWnd) {   
    78.         MessageBox(NULL, _T("Call to CreateWindow failed!"), _T("Win32 Guided Tour"), NULL);   
    79.         return 1;   
    80.     }   
    81.   
    82.   
    83.     // ShowWindow 函数的参数解释:   
    84.     // hWnd: CreateWindow函数返回的窗口句柄   
    85.     // nCmdShow: the fourth parameter from WinMain   
    86.     ShowWindow(hWnd, nCmdShow);  
    87.     // UpdateWindow函数用于更新窗口指定的区域  
    88.     // 如果窗口更新的区域不为空,UpdateWindow函数就发送一个WM_PAINT消息来更新指定窗口的客户区。  
    89.     // 函数绕过应用程序的消息队列,直接发送WM_PAINT消息给指定窗口的窗口过程  
    90.     // 如果更新区域为空,则不发送消息。  
    91.     UpdateWindow(hWnd);   
    92.   
    93.     // Main message loop:   
    94.     // 添加用于侦听操作系统所发送消息的消息循环。   
    95.     // 当应用程序收到一条消息时,此循环将该消息调度到 WndProc 函数以进行处理。   
    96.     MSG msg;   
    97.     while (GetMessage(&msg, NULL, 0, 0)) {   
    98.         TranslateMessage(&msg); //翻译消息  
    99.         DispatchMessage(&msg);  //派遣消息  
    100.     }   
    101.     return (int) msg.wParam;   
    102. }   
    103.   
    104. // //  函数: WndProc(HWND, UINT, WPARAM, LPARAM)   
    105. // //  目标:  处理主窗体产生的信息  
    106. // //  WM_PAINT消息代表绘制主窗体   
    107. // //  WM_DESTROY消息代表投递一个退出消息并返回   
    108. LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) {   
    109.     PAINTSTRUCT ps;  
    110.     HDC hdc;   
    111.     TCHAR greeting[] = _T("Hello, World!");   
    112.     switch (message) {   
    113.         case WM_PAINT:   
    114.             //要处理 WM_PAINT 消息,首先应调用 BeginPaint  
    115.             //然后处理所有的逻辑以及在窗口中布局文本、按钮和其他控件等  
    116.             //然后调用 EndPaint。   
    117.             hdc = BeginPaint(hWnd, &ps);   
    118.   
    119.             // -----------------在这段代码对应用程序进行布局------------------------   
    120.             // 对于此应用程序,开始调用和结束调用之间的逻辑是在窗口中显示字符串 “Hello,World!”。  
    121.             // 请注意 TextOut 函数用于显示字符串。  
    122.             TextOut(hdc, 50, 5, greeting, _tcslen(greeting));   
    123.             // -----------------------布局模块结束----------------------------------  
    124.   
    125.             EndPaint(hWnd, &ps);  
    126.             break;   
    127.         case WM_DESTROY:   
    128.             PostQuitMessage(0);   
    129.             break;  
    130.         default:   
    131.             //DefWindowProc缺省窗口处理函数  
    132.             //这个函数是默认的窗口处理函数,我们可以把不关心的消息都丢给它来处理  
    133.             return DefWindowProc(hWnd, message, wParam, lParam);   
    134.             break;   
    135.     }   
    136.     return 0;   
    137. }   
    展开全文
  • Java桌面应用程序

    万次阅读 多人点赞 2017-04-13 15:27:47
    java桌面应用印象因为桌面程序运行在宿主机器上, 所以比如你运行java桌面程序,必然要安装java虚拟机, 也就是相当于在操作系统上再加一层抽象, 这与直接调用api的桌面程序效率相比,或多或少低一点。 因为...
  • ● 如何编写简单的桌面应用程序   VS 是一个庞大的复杂产品,可能会使初学者望而生畏,但使 用它创建简单的应用程序是非常容易的。在本章开始使用VS 时,不需要了解许多知识,就可以编写C#代码。本书的后面将...
  • 学习了Java,一直做的是web方面的,想用Java写一个桌面应用程序,就是那种双击桌面图标即可运行的,但不知道如何下手,看到网上说Java不适合做桌面应用,怎么讲呢?
  • 桌面应用程序与web应用程序

    千次阅读 2017-10-25 10:50:49
    简单而言,在本地有应用程序文件的应用,都是桌面应用,在浏览器中使用的应用都是web应用。 原理上而言: 桌面应用有自己独立的进程与操作系统进行消息通讯,操作系统对事件进行检测,传递给桌面应用进程,桌面...
  • 工具:Visual Studio 2017 Community  在大学期间,不过学习 C/C++ 还是 Java,...本文就这个问题分享一下创建 Windows 桌面应用程序的两种途径。  创建 Windows 桌面程序有多种技术,但是哪种比较适合自己呢...
  • C# 桌面应用程序

    千次阅读 2017-02-25 22:03:43
    桌面应用程序下面介绍建立 用户界面 的基础知识,说明如何 启动和运行 桌面应用程序。 但并不详细讨论应用程序实际完成的工作。 微软推荐我们使用 WPF 技术来创建桌面应用程序。 我们以后会详细研究桌面应用程序...
  • 为什么用Python开发桌面应用程序

    千次阅读 2018-01-22 15:15:40
    为什么用Python开发桌面应用程序 为什么用Python开发桌面应用程序 1)wxWidgets是一个比MFC优雅的库,TortoiseCVS用wxWidges而不用MFC,就是因为wxWidgets好用,而不是为了可以移植。 2)Python的面向...
  • php 桌面应用程序

    千次阅读 2015-08-28 16:52:20
    phper总是开发web相关程序,其实php也可以开发桌面应用程序,下面介绍一下WinBinder,一个php扩展,开发php桌面应用程序,有兴趣的可以了解一下。 官网 :http://winbinder.org/index.php 不一定要用它做开发,开拓...
  • 之前一直在写前端,后来因为项目需要得写原生Windows桌面应用程序 开发主要面向企业内部使用的工具,一套针对某种设备的控制系统 基本不对外开放,而且是从头开发,没有历史包袱,相对比较自由 但是...
  • JAVA程序包装成桌面应用程序

    千次阅读 2019-11-08 20:13:40
    现在主流都是web开发,有谁像我一样的,开发N年后被要求做几个桌面程序,哈哈,本来也不会,入了几个坑后,现在博文献主,希望解你忧愁。 一,首先你得有写好的JAVA代码,并能够跑起来,注意,不是WEB结构,是纯JAVA...
  • 无法卸载creative cloud桌面应用程序

    万次阅读 2016-08-27 13:17:14
    结果必须安装 creative cloud ,后来通过其它方法安装了PhotoShop CC 2015,就想把 creative cloud 卸载了,谁知道在卸载的时候提示:无法卸载creative cloud桌面应用程序,如下图:什么年代了,还有这样的流氓...
  • Web应用程序与桌面应用程序的区别

    千次阅读 2014-01-06 17:41:25
    webdelphi服务器网络internet...但两者桌面应用可能软件界面更好控制一些,web形式客户端的屏幕就不太好空,一般满足1024*768分辨率能显示正常    作为软件的使用者和使用环境,当然应该要求有局域网或互联网连通。
  • (二) 桌面应用程序的用户界面

    千次阅读 2016-05-15 09:49:12
    本节提供的信息,将使您能够为您的应用程序开发图形用户界面 主题 内容 开始开发Windows应用程序的用户界面 向开发人员提供全部指引,使其能对Windows应用程序的用户界面进行设计、执行和测试。 用户体验交互指南...
  • 1.Visual C++可以开发的应用程序有两大类:桌面应用程序和Windows Store 应用程序。 2.本书关注如何使用MFC(Microsoft Foundation Classes)和C++建立桌面应用程序。 3.windows桌面应用程序的应用程序编程接口称为Win...
1 2 3 4 5 ... 20
收藏数 285,076
精华内容 114,030
关键字:

桌面应用程序