Windows桌面
lrcno6_
编程不只是编程,更是一种人生
展开
-
Windows桌面应用程序(2-1-1st) 如何为桌面应用程序设计出色的用户体验
一个出色的桌面应用程序功能强大,同时也很简单。通过精心平衡的功能选择和演示,您可以实现功能和简单性。强大:功能强大而简单:理想的基于Windows的应用程序既强大又简单。当然,您希望您的应用程序功能强大,当然您希望它变得简单,但是您能同时实现它们吗?这些目标之间存在着自然的紧张关系,但这种紧张关系远非不可调和。通过精心平衡的功能选择和演示,您可以实现功能和简单性。什么使应用程序功能强大...翻译 2018-10-27 21:53:43 · 2443 阅读 · 0 评论 -
Windows桌面应用程序(0th) 目录
入门\桌面编程 使用DirectX创建您的第一个Windows应用程序 使用DirectX进行开发的先决条件 使用DirectX设备资源了解Direct3D 11渲染管道使用着色器和着色器资源开始使用DirectX for WindowsDirectX桌面应用程序的路线图开始使用Win32和C ++ 用C++进行Windows编程简介 准备你的开发环境Windows编码约定...翻译 2018-07-07 20:46:05 · 801 阅读 · 1 评论 -
Windows桌面应用程序(1st) 桌面编程
开始学习本节中构建优秀桌面应用程序的基础知识。如果要创建新的桌面应用程序,首先要做的是使用Win32和COM API还是.NET。 C ++和Win32让您“更底层”,让您实现应用程序的最佳性能。 .NET通过不太复杂的语言使您获得更高级别的编码和生产力。 了解哪种技术最适合您的需求:选择您的技术。在这个部分 话题 描述 使用DirectX创建您的第一个应用程...翻译 2018-07-14 19:25:05 · 2212 阅读 · 0 评论 -
Windows桌面应用程序(1-1-2-2nd) 了解Direct3D 11渲染管道
之前,您在使用DirectX设备资源中了解了如何创建可用于绘制的窗口。现在,您将学习如何构建图形管道,以及可以在哪里挂钩。您会记得有两个定义图形管道的Direct3D接口:ID3D11Device,它提供GPU及其资源的虚拟表示;和ID3D11DeviceContext,表示管道的图形处理。通常,您使用ID3D11Device的实例来配置和获取开始处理场景中图形所需的GPU资源,并使用ID3D...翻译 2018-07-14 20:59:37 · 488 阅读 · 0 评论 -
Windows桌面应用程序(1-2-5-7th) 设置光标图像
光标是显示鼠标或其他指示设备位置的小图像。许多应用程序更改光标图像以向用户提供反馈。虽然它不是必需的,但它为您的应用程序增添了一点点润色。Windows提供了一组标准光标图像,称为系统光标。这些包括箭头,手,工字光标,沙漏(现在是旋转的圆圈)等。本节介绍如何使用系统光标。有关更高级的任务,例如创建自定义光标,请参阅光标。您可以通过设置WNDCLASS或WNDCLASSEX结构的hCurso...翻译 2018-07-20 18:27:12 · 594 阅读 · 0 评论 -
Windows桌面应用程序(1-2-5-8th) 用户输入:扩展示例
让我们结合我们学习的有关用户输入的所有内容来创建一个简单的绘图程序。 这是该程序的屏幕截图: 用户可以绘制几种不同颜色的椭圆,并选择,移动或删除椭圆。 为了保持UI简单,程序不允许用户选择椭圆颜色。 相反,程序会自动循环显示预定义的颜色列表。 该程序不支持椭圆以外的任何形状。 显然,这个程序不会赢得任何图形软件奖。 但是,它仍然是一个有用的例子。 您可以从Simple Drawing Sam...翻译 2018-07-20 19:18:14 · 347 阅读 · 0 评论 -
Windows桌面应用程序(1-3rd) 64位Windows编程指南
微软已经发布了64位版本的Windows操作系统。 64位Windows在设计时考虑了兼容性。开发人员可以确保其现有的32位应用程序在64位Windows下运行良好,或通过迁移其应用程序来利用64位Windows的优势。64位Windows的好处64位操作系统支持的物理内存远远多于32位操作系统。例如,大多数32位Windows系统最多支持4 GB的物理内存,每个进程最多可提供3 GB...翻译 2018-07-20 19:22:51 · 656 阅读 · 0 评论 -
Windows桌面应用程序(1-3-1st) 为64位Windows做好准备
64位版本Windows的一个关键目标是使开发人员可以轻松地为其32位和64位应用程序使用单一源代码库。 本概述介绍了如何使源代码支持32位和64位计算。 熟悉现有的Windows数据类型将有所帮助。在这个部分抽象数据模型新数据类型环境工具使用指针的规则虚拟地址空间对齐故障进程互操作性驱动程序原文链接:Getting Ready for 64-bit Windo...翻译 2018-07-20 19:30:26 · 447 阅读 · 0 评论 -
Windows桌面应用程序(1-3-1-1st) 抽象数据模型
每个应用程序和每个操作系统都有一个抽象数据模型。许多应用程序没有明确公开此数据模型,但该模型指导了应用程序代码的编写方式。在32位编程模型(称为ILP32模型)中,整数,长整数和指针数据类型的长度为32位。大多数开发人员都没有意识到这个模型。对于Win32 API的历史记录,这是一个有效的(虽然不一定是安全的)假设。在64位Windows中,这种数据类型大小的奇偶校验假设无效。使所有数据类型长...翻译 2018-07-20 19:37:53 · 254 阅读 · 0 评论 -
Windows桌面应用程序(1-2-3-10th) COM中的错误处理
COM使用HRESULT值来指示方法或函数调用的成功或失败。 各种SDK头文件定义了各种HRESULT常量。 在WinError.h中定义了一套通用的系统代码。 下表显示了其中一些系统范围的返回代码。 常量 值 描述 E_ACCESSDENIED 0x80070005 拒绝访问。 E_FAIL 0x80004005 未指定的错误。 E_...翻译 2018-07-07 20:09:27 · 477 阅读 · 0 评论 -
Windows桌面应用程序(1-3-1-3rd) 环境
从事64位Windows应用程序的开发人员会发现开发环境几乎与32位Windows的开发环境完全相同。现有API已在必要时进行了修改,以允许它们反映运行它们的平台的精度。结果是简单性和64位Windows的开发人员编写代码的简短学习曲线就像编写32位Windows的代码一样。Windows头文件支持新的数据类型,允许指针和指针相关的变量反映平台的精度。这意味着开发人员可以编译单个源代码库,以便...翻译 2018-07-23 22:19:30 · 223 阅读 · 0 评论 -
Windows桌面应用程序(1-2-3-3rd) COM中的错误代码
为了指示成功或失败,COM方法和函数返回一个HRESULT类型的值。一个HRESULT是一个32位的整数。HRESULT的高位信号成功或失败。零(0)表示成功,1表示失败。这会产生以下数字范围:成功代码:0x0-0x7FFFFFFF。错误代码:0x80000000-0xFFFFFFFF。少量的COM方法不会返回HRESULT值。例如,AddRef和Release方法返回无符号的长...翻译 2018-03-30 21:46:06 · 444 阅读 · 0 评论 -
Windows桌面应用程序(1-2-3-4th) 用COM创建一个对象
线程初始化COM库后,线程使用COM接口是安全的。要使用COM接口,程序首先创建一个实现该接口的对象实例。通常,创建COM对象有两种方法:实现该对象的模块可能会提供专门用于创建该对象实例的功能。或者,COM提供一个名为CoCreateInstance的通用创建函数。例如,从主题“ 什么是COM接口?”中获取假设的Shape对象。在那个例子中,Shape对象实现了一个名为IDraw...翻译 2018-03-30 22:01:25 · 459 阅读 · 0 评论 -
Windows桌面应用程序(1-2-3-5th) 示例:打开对话框
我们一直使用的Shapes示例有点人为设计。现在我们来看一个可以在真正的Windows程序中使用的COM对象:打开对话框。 显示“打开”对话框的屏幕截图要显示“ 打开”对话框,程序可以使用一个名为Common Item Dialog对象的COM对象。Common Item对话框实现了一个名为IFileOpenDialog的接口,该接口在头文件Shobjidl.h中声明。这是一个向用户...翻译 2018-03-30 22:13:17 · 1427 阅读 · 0 评论 -
Windows桌面应用程序(1-2-3-6th) 管理对象的生命周期
对于我们尚未提及的COM接口有一个规则。每个COM接口必须直接或间接地从名为IUnknown的接口继承。该接口提供了所有COM对象必须支持的一些基线功能。该IUnknown接口定义了三个方法:QueryInterfaceAddRefRelease该QueryInterface方法可以使程序在运行时查询对象的能力。我们将在下一个主题“ 为接口询问对象”中详细说明。所述AddRef...翻译 2018-03-30 22:29:35 · 359 阅读 · 0 评论 -
Windows桌面应用程序(1-2-3-7th) 询问接口指向的对象
我们之前看到一个对象可以实现多个接口。Common Item对话框是一个真实的例子。为了支持最典型的用途,该对象实现了IFileOpenDialog接口。该界面定义了显示对话框和获取选定文件信息的基本方法。然而,为了更高级的使用,该对象还实现了一个名为IFileDialogCustomize的接口。程序可以使用此界面通过添加新的UI控件来自定义对话框的外观和行为。回想一下,每个COM接口都必须...翻译 2018-03-31 16:21:21 · 322 阅读 · 0 评论 -
Windows桌面应用程序(1-2-3-8th) COM中的内存分配
有时候,一个方法会在堆上分配一个内存缓冲区,并将缓冲区的地址返回给调用者。 COM定义了一对函数用于分配和释放堆中的内存。CoTaskMemAlloc函数分配一块内存。CoTaskMemFree函数释放分配给CoTaskMemAlloc的一块内存。我们在打开对话框示例中看到了这种模式的一个例子:PWSTR pszFilePath;hr=pItem->GetDispla...翻译 2018-03-31 17:01:48 · 288 阅读 · 0 评论 -
Windows桌面应用程序(1-2-3-9th) COM编码实践
本主题描述了使您的COM代码更加有效和健壮的方法。__uuidof运算符IID_PPV_ARGS宏SafeRelease模式COM智能指针__uuidof运算符 当您构建您的程序时,您可能会遇到与以下类似的链接器错误:unresolved external symbol “struct _GUID const IID_IDrawable”无法解析的外部符号“struct...翻译 2018-03-31 18:30:10 · 566 阅读 · 0 评论 -
Windows桌面应用程序(1-3-1-2nd) 新数据类型
为64位Windows引入了三类数据类型:固定精度数据类型,指针精度类型和特定指针精度类型。这些类型已添加到开发环境中,以允许开发人员为64位Windows做好准备。这些类型派生自基本的C语言整数和长类型。因此,您可以在32位Windows上编译和测试的代码中使用这些数据类型,然后在以64位Windows为目标时使用64位编译器重新编译。即使对于仅针对32位Windows的应用程序,采用这些新...翻译 2018-07-23 22:15:54 · 290 阅读 · 0 评论 -
Windows桌面应用程序(1-3-1-4th) 工具
本主题描述了可用于使应用程序64位准备就绪的工具。 Windows 10适用于基于x64和ARM64的处理器。包含文件在32位和64位Windows之间,API元素实际上是相同的。 Windows头文件已被修改,因此它们可用于32位和64位代码。新的64位类型和宏在新的头文件Basetsd.h中定义,该文件位于Windows.h包含的头文件集中。 Basetsd.h包含新的数据类型定义...翻译 2018-07-26 13:41:41 · 623 阅读 · 0 评论 -
Windows桌面应用程序(1-3-1-5th) 使用指针的规则
将代码移植到32位和64位Microsoft Windows的编译是很简单的。 您只需遵循一些关于转换指针的简单规则,并在代码中使用新的数据类型。 指针操作的规则如下。不要将指针强制转换为int,long,ULONG或DWORD。 如果必须转换指针以测试某些位,设置或清除位或以其他方式操作其内容,请使用UINT_PTR或INT_PTR类型。 这些类型是整数类型,可扩展为32位和64位Win...翻译 2018-07-26 21:09:56 · 263 阅读 · 0 评论 -
Windows桌面应用程序(1-3-3rd) 运行32位应用程序
a翻译 2018-09-23 22:03:48 · 360 阅读 · 0 评论 -
Windows桌面应用程序(1-3-3-1st) WOW64下的性能和内存消耗
WOW64下的性能和内存消耗由以下因素决定:处理器硬件。指令仿真在芯片上执行。在x64处理器上,x86指令由处理器本机执行。因此,x64下WOW64下的执行速度与32位Windows下的速度相似。在Intel Itanium处理器和任何ARM64处理器上,仿真中涉及更多软件,因此性能受损。API thunk开销。与对NT内核的系统调用相比,这种开销很小。 NT内核函数不经常被调用。虚拟内存...翻译 2018-09-24 12:07:31 · 412 阅读 · 0 评论 -
Windows桌面应用程序(1-3-3-2nd) WOW64实现细节
WOW64仿真器以用户模式运行。它提供32位版本的Ntdll.dll与处理器内核之间的接口,并拦截内核调用。 WOW64模拟器包含以下DLL:Wow64.dll提供核心仿真基础结构和Ntoskrnl.exe入口点函数的thunk。Wow64Win.dll为Win32k.sys入口点函数提供了thunk。(仅限x64)Wow64Cpu.dll支持在x64上运行x86程序。(仅限Intel ...翻译 2018-09-24 13:35:28 · 1084 阅读 · 0 评论 -
Windows桌面应用程序(1-3-3-3rd) 注册表重定向器
注册表重定向器通过在WOW64上提供注册表某些部分的单独逻辑视图来隔离32位和64位应用程序。注册表重定向器拦截对其各自逻辑注册表视图的32位和64位注册表调用,并将它们映射到相应的物理注册表位置。重定向过程对应用程序是透明的。因此,32位应用程序可以访问注册表数据,就像它在32位Windows上运行一样,即使数据存储在64位Windows上的其他位置也是如此。ARM上的Windows 10:除...翻译 2018-09-24 14:00:04 · 342 阅读 · 0 评论 -
Windows桌面应用程序(2-2nd) 指南
这些部分包含基于Windows的桌面应用程序的详细用户体验指南。在这个部分话题描述控件控件是用户在应用程序主窗口区域上与之交互的UI元素。查看基于Windows的桌面应用程序中控件的可视示例,并获取每个控件指南的链接。命令命令是用户在使用您的应用程序时可以执行的操作。了解向应用程序的菜单,功能区和工具栏添加命令的准则。文本文字包含用户可在您的应用中看到的任...翻译 2018-10-28 15:01:51 · 229 阅读 · 0 评论 -
Windows桌面应用程序(1-3-3-3-1st) 注册表映射
[本主题中的信息适用于Windows Server 2008,Windows Vista,Windows Server 2003和Windows XP。从Windows 7和Windows Server 2008 R2开始,WOW64不再使用注册表映射,而是以前共享的映射键。有关更多信息,请参阅受WOW64影响的注册表项。注册表重定向器通过在WOW64上提供注册表某些部分的单独逻辑视图来隔离32...翻译 2018-10-26 22:24:10 · 442 阅读 · 0 评论 -
Windows桌面应用程序(1-4th) 使用Windows头文件
Windows API的头文件使您可以创建32位和64位应用程序。它们包括API的Unicode和ANSI版本的声明。有关更多信息,请参阅Windows API中的Unicode。它们使用的数据类型使您能够从单个源代码库构建应用程序的32位和64位版本。有关更多信息,请参阅为64位Windows做好准备。其他功能包括头文件注释和严格类型检查。Visual C ++和Windows头文件Micr...翻译 2018-10-27 21:00:46 · 442 阅读 · 0 评论 -
Windows桌面应用程序(2-1st) 设计桌面应用程序的基础知识
使用这些文章可帮助您设计Windows桌面应用程序的用户体验:如何设计出色的用户体验通过精心平衡的功能选择和演示实现功能和简单性的建议。用户体验清单在用户界面设计中需要注意的一些常见错误和不一致之处。(有关设计通用Windows平台(UWP)应用程序的信息,请参阅UWP应用程序的设计基础知识。)原文链接:Design basics for Desktop applicat...翻译 2018-10-27 21:08:17 · 308 阅读 · 0 评论 -
Windows桌面应用程序(1-3-2-5th) 准备64位Windows的应用程序
有几个功能可以让您更轻松地开发可在32位和64位Windows上运行的应用程序。其中大多数(如新数据类型)在为64位Windows做好准备中进行了描述。Windows SDK附带的64位工具包包括一个64位MIDL编译器Midl.exe,用于生成本机64位存根以及32位存根。 使用/ env win64开关仅生成64位存根。 默认设置是生成在两个平台上运行的双存根。请注意,64位MIDL仅...翻译 2018-07-31 21:56:42 · 232 阅读 · 0 评论 -
Windows桌面应用程序(1-3-2-4th) 在IDL文件中使用新数据类型
Basetsd.h头文件定义了编写在32位和64位Windows上运行的应用程序所需的新数据类型。 要在接口中使用这些数据类型,请将Basetsd.h导入IDL文件。 不要#include文件,否则在编译时最终会有多个定义。或者,您可以将Basetsd.idl文件包含或导入到IDL文件中。有关将系统头文件添加到IDL文件的更多信息,请参阅导入文件和类型库和导入系统头文件。原文链接:...翻译 2018-07-31 21:47:34 · 275 阅读 · 0 评论 -
Windows桌面应用程序(1-3-1-6th) 虚拟地址空间
默认情况下,64位基于Microsoft Windows的应用程序具有几TB的用户模式地址空间。有关精确值,请参阅Windows和Windows Server版本的内存限制。但是,应用程序可以指定系统应为应用程序分配低于2千兆字节的所有内存。如果满足以下条件,则此功能对64位应用程序有益:2 GB的地址空间就足够了。代码有许多指针截断警告。指针和整数是自由混合的。该代码具有使用32位数...翻译 2018-07-27 12:55:29 · 705 阅读 · 0 评论 -
Windows桌面应用程序(1-3-1-7th) 对齐故障
默认情况下,在基于Itanium的系统上关闭系统alignment-fault处理程序。因此,任何未对齐的数据访问都会生成一个异常,除非应用程序在基于帧的异常处理程序中捕获异常,否则系统不会自动修复该异常。要启用系统alignment-fault hander,请使用SEM_NOALIGNMENTFAULTEXCEPT调用SetErrorMode函数。但请注意,如果启用了系统alignment-f...翻译 2018-07-27 13:03:14 · 204 阅读 · 0 评论 -
Windows桌面应用程序(1-3-1-8th) 进程互操作性
您可以使用仿真层在64位Windows上运行基于Win32的应用程序。 ARM上的Windows 10包含一个x86-on-ARM64仿真层。有关更多信息,请参阅运行32位应用程序。在64位Windows上,64位进程无法加载32位动态链接库(DLL)。此外,32位进程无法加载64位DLL。但是,64位Windows支持64位和32位进程之间的远程过程调用(RPC)(在同一台计算机上和计算机之...翻译 2018-07-31 17:01:38 · 260 阅读 · 0 评论 -
Windows桌面应用程序(1-3-1-9th) 驱动程序
64位版本的Windows旨在使开发人员可以为其32位和64位应用程序使用单一源代码库。 在很大程度上,对于32位和64位Windows驱动程序也是如此。但是,32位驱动程序无法在64位Windows上运行,必须移植。 对于用户模式应用程序,64位Windows包含WOW64,它可以在运行64位Windows的系统上执行32位Windows应用程序(性能损失)。 驱动程序不存在等效的转换层。...翻译 2018-07-31 20:51:23 · 293 阅读 · 0 评论 -
Windows桌面应用程序(1-3-2nd) 设计64位兼容接口
从32位Windows移植到64位Windows本身不应该为分布式应用程序带来任何问题,无论是直接使用远程过程调用(RPC)还是通过DCOM。 RPC编程模型指定在连接的每一端具有相同大小的明确定义的数据大小和整数类型。此外,在为64位Windows开发的LLP64抽象数据模型中,只有指针扩展到64位 - 所有其他整数数据类型保持32位。因为指针是客户端/服务器连接的每一侧的本地指针,并且通常作为...翻译 2018-07-31 20:59:24 · 301 阅读 · 0 评论 -
Windows桌面应用程序(1-3-2-1st) 更改现有接口
尽可能为您的应用程序实现一个新界面,而不是对现有界面进行更改。如果无法避免更改现有接口,请仅在新方法中使用新数据类型。引入新数据类型或修改现有类型是不兼容问题的最常见来源。 RPC运行时模型假定接收应用程序知道它接收的数据类型,因此数据被放到线上而没有通用数据描述。当接收方期望的数据类型与发送方在线路上的数据类型不同时,存根会引发异常(或传输以其他一些不太优雅的方式失败)。RPC接口由其UUI...翻译 2018-07-31 21:11:10 · 349 阅读 · 0 评论 -
Windows桌面应用程序(1-3-2-2nd) 避免信息隐藏
有时,程序会故意或无意中隐藏RPC编组引擎中的信息。一些例子如下:将数据结构作为无差别的字节块发送通过使用方法的副作用在线路上引导其他数据来利用性能尝试通过将其作为DWORD或ULONG传递来伪装句柄即使在将应用程序移植到64位Windows之前,这些技术几乎可以保证引入兼容性问题。不是在标准远程过程调用中将服务器上下文作为DWORD发送,而是使用上下文句柄为代表客户端的服务器...翻译 2018-07-31 21:36:53 · 206 阅读 · 0 评论 -
Windows桌面应用程序(1-3-2-3rd) 避免多态性
新数据类型包括两种多态类型,INT_PTR和LONG_PTR。在32位Windows上,INT_PTR映射到int,LONG_PTR映射到long。在64位Windows上,两种类型都映射到__int64内在类型。 MIDL编译器支持这些类型用于远程过程调用,但是在分布式环境中使用它们时必须牢记一个固有的限制。请务必相应地评论您的代码。无论平台大小如何,这些多态类型的线缆大小始终为32位。在6...翻译 2018-07-31 21:42:49 · 263 阅读 · 0 评论 -
Windows桌面应用程序(1-2-1st) 用C++进行Windows编程简介
本节介绍Windows编程中使用的一些基本术语和编码约定。在这个部分准备你的开发环境Windows编码约定使用字符串什么是窗口?WinMain:应用程序入口点相关话题 学习用C++编写Windows程序 模块1.您的第一个Windows程序原文链接:Introduction to Windows Programming in C++...翻译 2018-02-08 11:11:49 · 4032 阅读 · 1 评论