Windows编程初步(一)

第一节:安装帮助文档

使用C语言进行Windows开发,必然使用到WindowsSDK。Windows SDK指Windows开发人员工具包,是为使用C语言开发Windows程序所提供的工具集。里面提供的工具异常全面丰富,很少有人能全部了解,在开发Windows应用程序时,应同时使用MSDN,即俗称Windows开发帮助。安装好MSDN后,在程序设计过程中,不记得函数调用方式时,可以在VC中将光标移动到函数名上按下F1帮助键,即可以获得这个函数的所有信息,非常方便;在遇到难解的编译出错信息时,也可在输出栏出错的行上按下F1获得详细的错误说明。由于MSDN有1.2G,无需全部安装,在课程设计阶段,只需要安装全文索引、VC++文档和Platform SDK即可,在开始安装时可选择自定义安装。
在这里插入图片描述
图1 MSDN的自定义安装
在这里插入图片描述
图2 选择索引,VC,下面还有SDK

第二节:简单的Windows程序(一)

纯粹的Windows编程代码量较大,但是不少代码系统已经帮我们生成,所以初学者快速掌握windows编程的方法就是利用现成的框架,找到需要修改的地方,然后实现设计意图。
类似C语言的学习,Windows编程也应为课程设计建立一个工作空间:
在这里插入图片描述
图 3 创建空白工作区

然后向空白工作区中添加我们第一个Windows程序:
在这里插入图片描述
图 4 第一步,创建合适的应用程序
在这里插入图片描述
图 5 选择典型的HelloWorld程序

直接按下Finish可创建第一个程序。不用去看具体代码,直接编译执行,选择调试执行在这里插入图片描述,可以看到这个程序执行的结果。(注:程序开发阶段应使用调试执行观察程序行为)
在这里插入图片描述
图 6 框架程序

程序运行的结果是一个窗口,可以放大缩小或者调整大小,还具有菜单。这些内容在将来都可以由程序员来自己定义。
打开代码WinStep1.cpp,首先观察到得就是一个特殊的main函数——WinMain
在这里插入图片描述
程序片段 1 主函数和消息循环

类似C语言下的main, WinMain是程序的入口,具有固定的格式。函数前段有两个LoadString函数调用。其意义是从资源中加载一些字符串。所谓资源,初步的理解可以是这样的:程序员打算发布(编写程序后销售)的应用程序中有一些字符串常量,对话框表现等素材,随着发布地点不同(例如在美国销售和中国销售),所使用的语言提示,对话框布局等均有所不同,但是程序核心的逻辑是不变的。将这些素材统一提取出来专门放在叫做资源文件的文件中,这样若是变更发布地点,只需要将这些资源文件交给专门的翻译和美工去完成,不必涉及到复杂的程序逻辑。这样将程序逻辑与资源分开,使应用程序适应性和灵活性更强了。

第一个LoadString是加载窗口的标题。在图4中就是WinStep1。第二个是窗口的类别名称。关于窗口类,因为我们实际上一行代码都没有改变,所以WinStep实现的功能很有限,但是在将来完善后会逐渐变得功能强大些,从代码而言,是同一个工程的源代码不停地修改,从系统角度来看,也许多个可执行的程序都在磁盘上,为了区分这些程序,可以分类叫做"张三的窗口V1.0",“张三的窗口V1.1”,为了区分不同目的的程序,还可以叫做“斗地主V2.1 by 张三”和“电脑播音员V1.1 by李四”这样的名字。这些由程序员定义的,用来区别计算机中不同窗口目的的字符串,就是窗口类。尝试用下面代码替换掉这两行程序:
在这里插入图片描述
程序片段 2 小小地修改

初学者对WinMain中其他代码先不要动。下面观察第二个重要函数WndProc。

WndProc是消息处理函数,当用户动动鼠标或者按下键盘,或者切换窗口等任何由Windows系统预定义的动作,或者是定时器,系统电力不足,有聊天网络消息到来等由程序定义的事件,都会调用这个函数。可以想象这个函数有多么地“忙”。所以任何写在这个函数里的代码都要求非常地“快”。一旦这里某段代码“慢”了,甚至“死循环”了,那么后来的消息就会堆积起来无法处理,从用户角度看,就是这个程序停止响应了。为明确起见,将程序中的WndProc改名为MainWndProc,意即处理主窗口的消息的程序。在修改时,请注意原始代码中有三处WndProc都需要修改——文件最前的位置函数声明,在MyRegisterClass函数调用,以及WndProc函数定义。

前文提到,WndProc主要功能就是处理各种各样的消息,显然考虑这么多大量的消息对程序员是个沉重的负担,幸好Windows本身已经提供了默认的消息处理代码,程序员只需要处理好自己关心的消息就可以了。下面是消息处理函数的模板。
在这里插入图片描述
程序片段3 消息处理函数

观察这个MainWndProc函数,hWnd参数表示处理这个消息的窗口,Message表示处理什么类型的消息,wParam和lParam是消息的两个参数,不同的消息,其参数含义不同。如果程序员想要处理某个消息,则一定要去翻阅对应的消息参数的含义。

在程序片段中,程序员处理3个消息,一个是WM_COMMAND,这个消息来自于用户选择某项菜单或者触发了某个按钮。一个是WM_PAINT,这个消息表示用户在窗口里显示些什么。过去学习程序设计都是用printf函数输出的,但是在窗口环境下,有更强大的输出功能——你可以指定输出位置,颜色,甚至可以输出各种图形,真正做到图文并茂。绘图消息处理一定是由BeginPaint开始并由EndPaint结束的。最后是WM_DESTORY。表示将要关闭这个窗口,程序可以在这里增加一些收尾工作。当然也可以什么都不做,只留那个ostQuitMessage函数在那里。

注意到这个大switch~case中,最后的default分句,DefWindowProc调用表示其余剩下的所有消息均由系统默认处理。

我们从菜单处理项开始进入windows编程。
在这里插入图片描述
程序片段4 处理菜单入口

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/347396.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2022大学生免费(24元)申请个人软著专利(微信小程序)

文章目录一、发放的软著证书二、申请流程概览三、官网提交申请四、纸质材料打印五、纸质材料邮寄六、模板及代码统计工具点击查看《再易江南》微信小程序 一、发放的软著证书 挂号信封 软著证书 点击查看《再易江南》微信小程序 二、申请流程概览 一般情况下,按照文…

Windows编程初步(二)

第二节:简单的Windows程序(二) 下面为这个程序增加一个菜单项: 首先设计用户菜单。在工作区里找到资源视图。点击Menu左边的号,双击出现的IDC_WIN_STEP1菜单。 图7 资源视图中的菜单 将help右边的虚框拖入左侧File菜…

Java数字分类给定一系列正整数,请按要求对数字进行分类,并输出以下5个数字:A1 = 能被5整除的数字中所有偶数的和;A2 = 将被5除后余1的数字按给出顺序进行交错求和,即计算n1-n2+n3

题目描述: 给定一系列正整数,请按要求对数字进行分类,并输出以下5个数字: A1 能被5整除的数字中所有偶数的和; A2 将被5除后余1的数字按给出顺序进行交错求和,即计算n1-n2n3-n4…; A3 被5除后…

Windows编程之互动与动画

第五节: 考虑屏幕左侧一台坦克,向水平方向发射一枚炮弹,穿越屏幕。 很自然地,这场景中有坦克和炮弹两个对象,各自有各自坐标,坦克坐标是固定的,而炮弹坐标是变化的。因此有两个结构体类型:Tank…

Java福尔摩斯的约会大侦探福尔摩斯接到一张奇怪的字条:“我们约会吧 3485djDkxh4hhGE 2984akDfkkkkggEdsb shgsfdk dHyscvnm”。大侦探很快就明白了

题目描述: 大侦探福尔摩斯接到一张奇怪的字条:“我们约会吧! 3485djDkxh4hhGE 2984akDfkkkkggEdsb s&hgsfdk d&Hyscvnm”。大侦探很快就明白了,字条上奇怪的乱码实际上就是约会的时间“星期四 14:04”,因为前面…

Windows编程之网络之邮件槽通讯

第6节 使用邮件槽传输数据 网络通讯的理论很复杂,可是初学者不考虑性能的话,可以使用很简单的模式。一般而言网络通讯有两种模式,点对点模式或者广播模式。点对点模式就像一对一辅导,双方都能听清楚对方说什么,并作出…

java 批量处理 示例_Java异常处理教程(包含示例和最佳实践)

java 批量处理 示例异常是可能在程序执行期间发生的错误事件,它会破坏其正常流程。 Java提供了一种健壮且面向对象的方式来处理异常情况,称为Java异常处理 。 我们将在本教程中研究以下主题。 Java异常处理概述 异常处理关键字 异常层次 有用的异常方…

Windows编程之多媒体

一、语音接口的使用: 第一步,安装MSSpeech SDK。 MSSpeech SDK可从网络课堂安装,也可在微软公司直接下载,安装完毕后具有了语音处理能力。 安装过程全选默认即可。 安装完毕后,在开始菜单中会增加MS Speech SDK 5.1&#xff0…

Windows编程之调用Matlab

一、选择matlab: 注意。Matlab的安装需要较长时间,建议本拓展在同学们自己的电脑上运行。 Matlab是大多数工科学生必修的科目,是一个口碑极佳的数学计算工具,可以支持立即运算和程序设计两种形式。Matlab较新的版本均提供32位版本…

Windows编程之使用外部动态链接库——纸牌

C语言功能强大的一个重要原因是因为具有丰富的库函数,例如字符串处理有string库,数学处理有math库。微软公司对程序库的支持又更进一步,提供了丰富的动态链接库。下面以微软操作系统内嵌的纸牌链接库为例写一个简单的小程序。 由于我们已经较…

netbeans7.4_使用NetBeans 7.4 beta提示进行更好的基于JUnit的单元测试

netbeans7.4在上一篇文章中 ,我写了NetBeans 7.4 beta中提供的提示 ,这些提示提高了开发人员避免Java异常处理带来的讨厌的运行时问题的能力。 在本文中,我将探讨如何使用NetBeans 7.4 beta提供的另外两个提示使单元测试在执行单元测试期间更…

【MATLAB函数系列】fskmod函数参数及源代码详解

关注回复【fskmod】可看 在用matlab仿真生成fsk信号时,发现matlab库提供fskmod函数可以直接生成fsk信号,但生成的信号为复信号,于是查看其源码,结果对其原理看了好久都没明白,在网上查询资料也少得可怜,唯一…

Java Spring Security示例教程中的2种设置LDAP Active Directory身份验证的方法

LDAP身份验证是全球范围内最流行的企业应用程序身份验证机制之一,而Active Directory (Microsoft针对Windows的LDAP实现)是另一种广泛使用的LDAP服务器。 在许多项目中,我们需要通过登录屏幕中提供的凭据使用LDAP对活动目录进行身…

【各种信噪比联系与区别详解】实信号、复信号Es、N0、符号信噪比EsN0、带内信噪比、比特信噪比EbN0、SNR的含义及关系详解

引言 关于EsN0、EbN0与SNR三者关系的描述,在MATLAB帮助文档中搜索词条“AWGN Channel”有比较详细的描述,但有些细节没有讲清楚。 简单翻译解释一下,就是 SNR表示每个采样点的信号噪声比。EbN0表示每个比特能量与噪声功率谱密度的比值。EsN0表示每个符号能量与噪声功率谱密…

非科班Java尝试全国高校计算机能力挑战赛第三届计挑赛

写在前面:①大佬勿在意,小打小闹!②若不决参加与否,希望下文可以给你帮助(仅限程序设计赛项)。 文章目录一、个人真实情况二、比赛最细简介三、最全参赛准备四、比赛时候遇到不会做怎么办?一、个…

加密数据的检索_透明地持久保存并从数据库中检索加密的数据

加密数据的检索自从我在这里发表上一个帖子以来已经有两个多月了,但是今年六月和七月非常忙碌而密集。 首先, Confitura的组织(欧洲最大的Java开发人员免费会议)参加了我所有的免费晚会,然后在相当紧张的住院期间&…

微信小程序云开发日记类日记记录分享动态

微信公众号:创享日记(微信号csds992022) 发送关键词:日记类小程序 免费获取源码 1 概述 1.1 关于本手册 为了使您对研岸日记记录社交软件的使用有清晰详尽的了解,特此编写《用户手册》,为了保障您的利益&a…

Windows编程初步(三)【说明:有敏感字眼已全删,不知道为啥还审核不通过】

第三节 设计输出及利用在线帮助 在Windows中,消息ON_PAINT是专门用来处理输出的。基本所有的输出代码应放在这里。 。其输出方式不再限于从上往下,而是全屏可控,因此每个输出都需要告知系统输出位置。典型的文字输出代码是TextOut函数。 将…

408考研数据结构复习-时间复杂度与空间复杂度-附统考真题

文章目录一、时间复杂度二、空间复杂度三、相关题目一、时间复杂度 一个语句的频度是指该语句在算法中被重复执行的次数。算法中所有语句的频度之和记为T(n),它是该算法问题规模n的函数,时间复杂度主要分析T(n)的数量级。算法中基本运算(最深…

解调去载波后均衡信道与实际信道的关系

关注公号【逆向通信猿】更精彩!!! 通常,信号经过调制后发送,会经过信道作用,示意图可以表示为 其中 x ( t ) x(t) x(t)为基带信号, e