娘的,今天晚上在阳台做饭把水管一脚踢爆了,水流到下面的住户的阳台,让个老娘们把我骂了一顿,本着做错事的原则,我装的很绅士还说了个对不起,擦,真是条纯汉子,能屈能伸。

大爷,别看我年轮小,我都给总结了,第三章主要可以用两句话来展开“创建和显示窗口,接受和处理消息”,真他娘的是个人才,多么简洁扼要,把这两句的内容搞懂了,就算入门了。

第一句“创建和显示窗口”。

首先,“创建”,想创建什么样的窗口?你连丫的创建什么窗口都不知道,还创建个毛,所以你首先明确自己要创建窗口的样式,但你也不能乱创建,并不是想干嘛就能干嘛。windws中用WNDCLASS结构体来存储你要创建窗口的样式,这样,用WNDCLASS结构体就既能让你创建符合windows外观类型的窗口,又限制了你天马行空的啥都想创建。

所以第一步,你要定义一个WNDCLASS结构体变量,创建之后干啥? 丫的初始化呀,填充这个结构体变量中的值。

WNDCLASS有10个字段,你可能说真他娘的多,我觉得你说的真有道理,我也觉得多,但是那群娃儿就是那么设计的,木办法啊兄弟们,忍忍吧,我这里有一个记忆方法,“打开一个窗口,把鼠标放进去”,ok,现在从这个窗口的左上角到右下角来分析。

开始左上角第一个之前,拿一个姑娘对比,你要确定你喜欢的类型(style),上她之前你要给人家名分(lpszClassName),玩了之后你要告诉人家你是谁(hInstance)

左上角第一个是图标,没错!WNDCLASS其中一个变量就是设定图标值,LoadIcon(),这个函数用的最多的就是两种情况。

第一种:使用windows系统自身图标资源,LoadIcon(NULL,IDI_APPLICATION);就是这样,第一个参数是NULL,第二个是预定义好的ID,这个不用记住,直接百度就行。

第二种:使用.RC文件中的ICON图标,也就是在VS资源文件中自定义的图标,这个图标都有个ID,LoadIcon(hInstance, MAKEINTRESOURCE(图标ID)); 其中hInstance就是WinMain函数参数中的那个hInstance,MAKEINTRESOURCE()可以自己百度一下。

紧接着图标下面是菜单,有人说他娘的那不是标题吗,操,我说的是从左上角到右下角,不是从左到右,这个菜单就是指定菜单的名字,lpszMenuName,现在的程序不使用菜单,所以设置为NULL。

紧接着菜单下面是客户区,客户区就需要设置背景色,(HBRUSH)GetStockObject(WHITE_BRUSH);我估计微软那帮人装修房子都喜欢自己刷墙,所以按他们的理解设置背景色就跟用刷子刷墙一样一样地,所以设置背景色就用画刷BRUSH,使用的什么颜色的画刷就能刷什么颜色的背景。GetStockObject该函数检索预定义的画刷、字体等的句柄。之所以前面加上(HBRUSH)强制转换,你想GetStockObject既获取画刷,又获取字体等的句柄,返回值肯定是一个通用值,为HGDIOBJ,这是一个图形图像的句柄。

再往右下角看,是你刚才拉大或拉小窗口的鼠标,对,WNDCLASS有设置鼠标的字段,需要用LoadCursor,LoadCursor得用法跟LoadIcon一样一样滴,这里我们用LoadIcon(NULL,IDC_ARROW);

好了差不多了,窗口句柄,名字,类型,图标,鼠标,背景,菜单设置了,还有三个字段,cbClsExtra,cbWndExtra和lpfnWndProc,其中“cbClsExtra,cbWndExtra“是为这个类结构和窗口结构预留的额外空间,一般都设置为0,lpfnWndProc是要设置回调函数,这个现在只需要记住设置回调函数就行了,要问为啥现在不解释,因为午夜12点了,锅锅我要睡觉了。

到此,WNDCLASS各个字段都解释完了,可能有的新手觉得很麻烦,尤其是各个字段的名字,希奇古怪,比如lpfnWndProc,lpfn是啥个前缀啊,下面我copy了一个常用前缀,看看就容易记住了。

前缀 含义
c char,字符型
by                byte,无符号字符
i int,整形
x, y 坐标
cx, cy 长度
h 句柄
l long,常整形
n short,短整形
fn 函数
w word,无符号短整形
dw double word,无符号长整形
p pointer,指针
s string,字符串
sz string with zero,以\0结束的字符串
b或f b代表bool, f表示flag

按上面的理解,lpfnWndProc,就是标识指向函数(fn)的长指针(lp),又有人可能问,妈的,什么是长指针?我们知道windows编程比较底层,涉及到很多很原始的代码,可能你还在娘胎一堆水的时候这些代码就有了,遥记当年电脑还是16位的时候,寻址范围为2^16地址范围之内的指针叫做短指针,寻址范围超过前述范围的叫做长指针,至于再往下搞什么是寻址范围,你可以看看王爽的《汇编语言》,想买这本二手实体书的找我!三成新,随便给点钱就行。后来你出生之后,电脑就变成32位了,并且使用“flat“内存模型,2^32地址范围(也就是4GB范围内的内存地址)内做寻址都不用修改段寄存器,就没有人再说长、短指针了,所以现在的C语言,c++很少提这个,统统都是叫指针。

根据以上内容我们到现在为止划拉的代码如下:

  1. #include <windows.h>
  2. int WINAPI WinMain(HINSTANCE hInstance,
  3. HINSTANCE hPrevInstance,
  4. PSTR szCmdLine,
  5. int iCmdLine)
  6. {
  7. TCHAR* className = "firstWindow";
  8. WNDCLASS wndClass;
  9. wndClass.hInstance = hInstance;
  10. wndClass.style = CS_HREDRAW|CS_VREDRAW;
  11. wndClass.lpszClassName = className;
  12. wndClass.hCursor = LoadCursor(NULL, IDC_ARROW);
  13. wndClass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
  14. wndClass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
  15. wndClass.cbClsExtra = 0;
  16. wndClass.cbWndExtra = 0;
  17. wndClass.lpszMenuName = NULL;
  18. wndClass.lpfnWndProc = callBackWndProc //暂时假设回调函数名字为callBackWndProc
  19. }

windows 程序设计 第三章读书笔记(上)相关推荐

  1. Android深度探索--HAL与驱动开发----第三章读书笔记

    Git--源代码管理软件,Git功能十分复杂,我们需要完成的功能有:创建版本库,提交源代码,创建分支,向远程服务器提交源代码,从远程服务器获取源代码等.而本章的学习内容就是掌握如何使用Git从源代码托 ...

  2. R数据科学第三章读书笔记和习题

    这篇文章只是记录个人理解,有时间会写第五章EDA(探索性分析部分) 概述 dplyr包在r语言中是用来整理数据集,以便数据更容易处理. dplyr中有5个核心函数,分别是 按值筛选观测 filter( ...

  3. JS高级程序设计第五章读书笔记

    1.引用类型的值(对象)是引用类型的一个实例.在ES中,引用类型是一种数据结构,用于将数据和功能组织在一起.它们也长被称为类,但这并不妥当.因为ES在技术层面上是一门面对对象的语言,但它并不具备传统的 ...

  4. lua元表和元方法 《lua程序设计》 13章 读书笔记

    lua中每个值都有一个元表,talble和userdata可以有各自独立的元表,而其它类型的值则共享其类型所属的单一元表.lua在创建table时不会创建元表. t = {} print(getmet ...

  5. Maltab在数学建模中的应用(第二版)——读书笔记上

    Maltab在数学建模中的应用(第二版)--读书笔记上 1.MATLAB与数据文件的交互 1.1数据拟合 1.2数据拟合实例 1.3数据可视化 1.4层次分析法 2.规划问题的MATLAB求解(多约束 ...

  6. 《深入理解计算机系统》第七章读书笔记

    <深入理解计算机系统>第七章读书笔记 第七章:连接 连接 1.连接:将各种代码和数据部分收集起来并组合成为一个单一文件的过程.这个文件可被加载或拷贝到存储器并执行. 2.连接可以执行于编译 ...

  7. 《构建之法》第4.17章读书笔记

    <构建之法>第4.17章读书笔记 第四章 原文语句: 异常不能跨过DLL或进程的边界来传递信息,所以异常不是万能的. 提出问题: 1.什么是DLL?DLL是来解决什么问题的? 网上说法: ...

  8. 《Go语言圣经》第一章 - 读书笔记

    <Go语言圣经>第一章 - 读书笔记 第一章 Go语言入门 01 Hello World 02 命令行参数 练习 练习1.1 练习1.2: 练习1.3: 03 查找重复的行 例子运行 du ...

  9. 《Java8实战》-第五章读书笔记(使用流Stream-02)

    付诸实战 在本节中,我们会将迄今学到的关于流的知识付诸实践.我们来看一个不同的领域:执行交易的交易员.你的经理让你为八个查询找到答案. 找出2011年发生的所有交易,并按交易额排序(从低到高). 交易 ...

最新文章

  1. mongoose简单使用
  2. 用python解“用天平找小球”题
  3. 专题2 文件系统结构
  4. 热点推荐:秒杀系统架构分析与实战--转载
  5. Python学习-基础篇4 模块与包与常用模块
  6. 《剑指offer》数组中重复的数字
  7. SAP Spartacus使用了ngrx library
  8. 利用SMW01分析BDOC错误
  9. Android UI设计--ListView Item的OnItemLongClickListener同时监听两种事件
  10. 因云而生,阿里云全面进入云原生时代
  11. linux内核空间open,linux kernel之详解从用户态open到内核驱动实现流程
  12. Codeforces 145E Lucky Queries 线段树
  13. Web编程学习一: 使用JSF来创建Web应用
  14. 计算机考研复试题(近十万字)
  15. delphi 剪切板变量_Delphi监视剪贴板内容
  16. 更改360极速浏览器默认安装路径
  17. Codeforces 1250 G Discarding Game —— 贪心
  18. 利用单片机最小系统外接DS12C887 在LCD1602上显示实时时钟
  19. 令人头疼的背包九讲(1)0/1背包问题
  20. gephi导入含时间线的动态数据

热门文章

  1. 【zephyr】apds9660 接近(Proximity)传感器 驱动模型实现方式(一)
  2. 宇宙学colossus库介绍
  3. 数据结构之 二叉树的存储和遍历总结
  4. Python的创作起源,成功是必然的
  5. English语法_名词性从句 - what
  6. Oracle数据库的启停
  7. java 分析类_java--分析简单java类与反射的联系
  8. DSPE-PEG-NGR,NGR-PEG-DSPE,磷脂-聚乙二醇-靶向肽NRG
  9. 四川玖益科技:竞价活动对店铺的要求
  10. CoppeliaSim学习笔记之差速小车的控制与传感器的驱动