第一节:安装帮助文档

使用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 处理菜单入口

Windows编程初步(一)相关推荐

  1. Windows编程初步

    Windows编程初步 目前来说Windows已经家喻户晓,它的历史是Microsoft历史上最辉煌的一页.人们现在已经基本上使用Windows操作系统,因此在编程方面我们有必要从DOS环境编程向Wi ...

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

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

  3. Windows编程初步(二)

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

  4. Windows网络编程初步

    1. OSI/RM和TCP/IP 国际标准化组织(ISO)和国际电报电话咨询委员会(CCITT)制定OSI/RM OSI/RM:Open SystemInterconnect/Recommended ...

  5. [转]Windows 语音编程初步

    [转]Windows 语音编程初步 一.SAPI简介 软件中的语音技术包括两方面的内容,一个是语音识别(speech recognition) 和语音合成(speech synthesis).这两个技 ...

  6. 用C语言进行Windows编程入门

    用C语言进行Windows编程入门 本文对一般教程或网上有的(如C语言语法等基础)不深入介绍,对初学者易造成疑惑误解或难以找到的内容进行较详尽的介绍. 学习C语言很久了,一直面对控制台应用程序(Win ...

  7. Windows 编程,画笔画刷以及几何图形的绘制

    Windows编程,画笔画刷的介绍 画笔,可以用以下代码新建一个画笔对象: HPEN hpen = CreatePen(PS_SOLID, 1, RGB(255,0,0)); 可以看到,画笔的Crea ...

  8. 《从问题到程序:用Python学编程和计算》——第2章 计算和编程初步 2.1 数值表达式和算术...

    本节书摘来自华章计算机<从问题到程序:用Python学编程和计算>一书中的第2章,第2.1节,作者 裘宗燕,更多章节内容可以访问云栖社区"华章计算机"公众号查看. 第2 ...

  9. 如何使对话框中接收到WM_CHAR消息(Windows编程)

    我们大家都知道,对话框是有的时候捕获不到WM_CHAR消息的.比如,你想使对话框里的Edit控件所键入的全部变为大写.我们毫不犹豫的写到:    #include //Declare the Dial ...

最新文章

  1. form表单提交踩坑记
  2. Java并发专题 带返回结果的批量任务执行 CompletionService ExecutorService.invokeAll
  3. vgh电压高了有什么_晶闸管如何调整交流电压!
  4. 关于linux分区与挂载的解释
  5. oracle中字符串的脚本表示什么意思,sql脚本中rem与prompt,define等的含义
  6. SpringBoot高级-任务-异步任务
  7. SAP Spartacus UnitDetailsComponent对应的UI插入,是在路由框架里完成的
  8. Mybatis insert返回主键ID
  9. 阿里云96页报告详解《云上转型》(10个案例、10大趋势/完整版PPT)
  10. Zookeeper从入门到精通(开发详解,案例实战,Web界面监控)
  11. c语言输入一串数字存入数组_在Excel中快速输入,竟是输入一串数字?
  12. php70w-mbstring,php安装
  13. 昼夜双色导航主题模板 WordPress导航模板
  14. POJ - 3537 Crosses and Crosses (MLI - SG)
  15. sdk 今日头条_今日头条大数据分析平台艰辛成长路
  16. 遥感影像的比例尺和分辨率的关系
  17. 移远NB模组(BC26)OPENCPU开发——MQTT上传接收
  18. Alpha版本冲刺(四)
  19. 8.14. JSON Types
  20. c++ 构造函数 which is of non-class type奇葩问题

热门文章

  1. XAML或JavaFx?
  2. Linux 命令之 curl 的选项(英文版)
  3. MySQL 获取系统时间/系统日期/日期时间的函数
  4. 南安职业中专学校计算机专业,南安职专:国家级重点职业中专学校
  5. 四川大学金融转计算机,[请教]川大和西财哪个金融系好?!
  6. linux 权限 mask,【自学Linux】Linux用户、组、权限(一)
  7. blt功能_BitBlt实现TransparentBlt
  8. html按钮冻结,Vue js按钮冻结dom
  9. excel单元格斜线_掌握这20个Excel技巧,小白轻松变大神
  10. php 静态方法 call,php的 __callStatic 函数