Windows程序设计_学习总结(1)
很早之前就对windows程序设计的复杂性有所耳闻,总是听到同学这样描述windows编程——写一个很简单的窗口都要很长很长的代码。所以一直没有勇气去研究windows程序设计…
大二上,期末将至的时候,在图书馆里发现了《windows程序设计》这本书,而且还是全新的,挺厚的一本,我在书架前犹豫了一会后,终于下定决心把他借回去…
按照惯例,一本入门的编程书籍总是会介绍“hello world”。
这次让我兴奋的代码是这样的:
#include <windows.h> int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow) { MessageBox (NULL, TEXT ("Hello, Windows 98!"), TEXT ("HelloMsg"), 0) ; return 0 ; }
和c语言相比,不过是头文件和入口函数不同罢了。
很简单的代码,不过当初我用VS2005写的时候,link的时候总是出错,后来才发现是入口函数没有调成WinMain,如果在VC6.0下,直接建立Win32 Application工程就行了。
看windows程序,常常会看到XX句柄,句柄无非就是一个数值,而且是可以标识某些东西的数值,就好比学号在学校里可以标识我们的身份。句柄参数名第一个字母都是”h”。
句柄的实际取值对我们来说并不重要,重要的是将句柄传递给我们所写的程序,让他们知道对哪个对象操作。而windows中有函数可以让我们很方便的获取句柄。
在windows.h中用define定义了大量的大写标识符,这些常量无需全部记住,不过记住他们的前缀我我们看懂windows程序设计十分重要。
CS 类风格选项
CW 创建窗口选项
DT 文本绘制选项
IDI 图标ID号
IDC 光标ID号
MB 消息框选项
SND 声音选项
WM 窗口消息
WS 窗口风格
变量的命名也很讲究,比如前缀i表示 int , 前缀sz表示 “以零结尾的字符串”…
在看windows程序时,会发现很多平常见不到的类型,有些类型不过是进行了同义转化,比如 UINT 实际上就是 unsigned int 类型,而有些类型不是,所以遇到陌生的类型,要查查帮助文档。
用C语言写一个窗口,代码真的很长很长,其实懂得了这些结构,看起来也不是那么的烦人。
创建一个窗口,首先要有窗口类,查查文档可以发现WNDCLASS有很多个字段,所以得一个一个的设置他们的属性。
接着是用RegisterClass注册窗口。注册失败返还0.
if (!RegisterClass (&wndclass)){
注册完后用CreateWindow 创建窗口,该函数返回的是一个窗口句柄。这时窗口会在Windows内部被创建,即已经分配了一块内存来保存该窗口信息以及一些其他信息。
UpdateWindow函数可以使传入句柄对应的窗口客户区重绘,而重绘是通过系统向窗口过程发送一条WM_PAINT信息完成的。
Windows为当前在其中运行的每一个Windows程序都维护了一个“消息队列”。当输入事件发生后,windows会自动将这些事件转换成“消息”,并将其放置在应用程序的消息队列中。
while (GetMessage (&msg, NULL, 0, 0))
目前我看完本书的第五章,这段时间所接触到的windows程序中,以上的这些代码我都是copy的,真正让我写的就是窗口过程。
窗口过程的签名为:
LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
这里需要注意的是,窗口过程的函数名不一定是WndProc,但一定要和wndclass.lpfnWndProc 字段的值相同。
在窗口过程中,我们可以处理很多消息,函数可以根据传入消息message的值来判断类型。常常用switch实现。消息有很多种,比如WM_CREATE WM_PAINT WM_DESTROY…
如果传入的类型不在我处理范围内呢?想想我们在编码时,switch还跟一个default字段经常在一起使用,而这里使用的是DefWinProc函数来处理我们不想处理的消息,这对程序的正常运行很重要。
用记事本举个例子,当我们调整记事本的大小时,记事本中的文字会根据我们所作的调整进行重新排版。窗口过程收到了WM_PAINT ,然后进行了重绘。
在设置窗口属性时,wndclass.style = CS_HREDRAW | CS_VREDRAW ; 意思为当窗口横向或纵向发生变化时就进行重绘。
hdc = BeginPaint (hwnd, &ps) ; //hdc的类型是HDC
上文提到的UpdateWindow就是指示窗口过程在窗口客户区进行绘制。
如果在case中有用到新的变量,应在switch外声明,我就有几次在case语句中声明变量然后出错都找不出来。
Windows程序设计_学习总结(1)相关推荐
- Windows程序设计_Chap02_Unicode_学习笔记
Windows程序设计_Chap02_Unicode_学习笔记 ――By: Neicole(2013.05.24) 01. 开篇 <Windows程序设计>的第2章,主要内容为Unicod ...
- delphi windows编程_学习C/C++:伴随我成长的编程书!
学习C++是一个艰难的过程.如果从我第一次看C++的书算起,现在已经过了11年了.一开始的动机也是很不靠谱的.刚开始我很喜欢用VB6来开发游戏,但是我能找到的资料都是用C++来做例子的,文字部分又不丰 ...
- 《windows程序设计》学习_2.2:初识消息,双键的使用
1 /* 双键的使用 */ 2 3 #include <windows.h> 4 5 6 LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM) ...
- 《Windows程序设计》第三章学习心得(1)|图解消息机制
注释:文章转载自如鹏网论坛,版权归原作者所有. 为了绘制下面那张所谓"Windows消息循环流程图",忙活了一下午!先给表扬一下自己(吼吼~画得还蛮好看的嘛!),再泼桶冷水(呃~乱 ...
- c#程序设计语言杜松江版_清华大学出版社-图书详情-《C#语言Windows程序设计(第2版)》...
再 版 序 <C#语言Windows程序设计>(ISBN:978-7-302-23375-6)自2010年9月出版以来,受到了广大读者和众多高校的欢迎和好评,近年来已经重印了4次.尽管如此 ...
- Windows程序设计学习笔记(1):一个简单的windows程序
<Windows程序设计>(第五版)(美Charles Petzold著) 1 #include<windows.h> 2 3 LRESULT CALLBACK WndProc ...
- c语言windows api编程,windows API编程学习
我并不是计算机专业的学生,从事的工作也和编程没啥关系,并且是工作了五六年后开始在业余时间学习windows编程的,这种背景下开始学编程确实比较痛苦. 买了Charles Petzold 的<wi ...
- c语言lnk1168无法打开exe,跪求大佬帮帮看看LINK : fatal error LNK1168: 无法打开 F:\windows程序设计\窗口\......
马上注册,结交更多好友,享用更多功能^_^ 您需要 登录 才可以下载或查看,没有帐号?立即注册 x 运行的结果显示是这样: 1>------ 已启动生成: 项目: 窗口, 配置: Debug W ...
- c语言中,x-y,'105',ab,7f8那个是正确的,C语言程序设计_第三章 数据.ppt
C语言程序设计_第三章 数据 * 运算符功能 与运算量关系 要求运算量个数 要求运算量类型 运算符优先级别 结合方向 结果的类型 学习运算符应注意 * 基本算术运算符: + - * / % 结合方向: ...
- MATLAB飞机大战第二版,windows程序设计——飞机大战札记(单文档文件登陆界面)...
windows程序设计--飞机大战笔记(单文档文件登陆界面) //2015/07/21 /by xbw/// /环境 VS 2013 飞机大战做的差不多了,闲来无事加点高大上的东西,关于单文档的登陆界 ...
最新文章
- idea 批量修改同一列_学会这个,1秒就可以批量处理文件
- 数据科学家成长指南(下)
- 研究学者、医师与产业投资者齐聚一堂,将碰撞出何种火花?
- springboot整合mybatis分页插件
- 计算机课程教改论文,高职计算机教改的课程设计研究论文
- DotNetBar 6.2
- mysql 中float存入int数据显示失真问题
- Ubuntu中eclipse端口被占
- xmanager 远程连接REDHAT 4 桌面
- ubuntu wine 使用
- linux学习命令总结⑩⑦
- C#如何运行外部程序(打开可执行程序):ShellExcute和Process
- 动易html编辑器,动易后台编辑器在IE8下无效的解决方法
- linux grep检索字段
- 精通 Spring Boot 42 讲
- nandflash驱动分析 针对K9GAG08U0D uboot1.1.6(上)
- 开源库TinyXML2简介及使用
- 基于Python的随机森林(RF)回归与变量重要性影响程度分析
- 实验内容:编写程序,模拟抓狐狸小游戏。假设一共有一排5个洞口,小狐狸最开始的时候在其中一个洞口,然后玩家随机打开一个洞口,如果里面有狐狸就抓到了。如果洞口里没有狐狸就第二天再来抓,但是第二天狐狸会在
- 状态控件ios 中滑块、开关、分段控件、操作表和警告的常用函数
热门文章
- hutool 读取扩展名文件_如何快速的搜索文件,Everything使用技巧
- 学习c语言的小程序,C语言小程序学习
- Apache POI 安全漏洞
- 通过linux内核如何读取pmbus总线上的数据,Linux内核中读写文件数据的方法
- 取最大值_举一反三17——线段平方和的最小值与最大值
- 人工智能原理与方法作业1
- 需求规格说明书5.0版本
- 【Eureka】服务发现调用
- vue踩坑--TypeError: __WEBPACK_IMPORTED_MODULE_1_vuex__.a.store is not a constructor
- Git 常用操作(一)