第一章 windows 应用程序运行的内部机制

c库函数:是由编译器厂商提供的。
Windows api 是由操作系统提供的,提供给应用程序的接口。
所有主要的api函数都在widnows.h文件中申明。
SDK 软件开发包。里边包含你要开发所需要的api,技术文档,辅助开发工具等资源,
也就是一个资源集合包 。
窗口:windows 程序的一种元素,是由句柄来标识的。包括按钮,对话框,等都是窗口。
句柄:每创建资源的时候,都会为这些资源分配内存,并返回标识这些资源的标识符,
就是句柄。
Windows程序设计是一种事件驱动方式的模式,主要是基于消息。
列子:当用户用鼠标在应用窗口画图的时候,操作系统会捕捉到这个事件,
然后把这个事件打包成一个消息,发给应用程序的消息队列中,
应用程序从消息队列中取出这个消息并做出响应。在这个过程中,
操作系统给应用程序发送消息,这个发送消息就是操作系统调用应用程序中
专门处理消息的函数,这个函数就是窗口过程。
Windows 消息分为进队消息和不进对消息。
进队消息:操作系统将消息放到应用程序消息队列中,然后又由应用程序发送。
不进对消息:操作系统调用调用窗口时直接发送给窗口。
进队消息和不进对消息最后都是由系统调用窗口过程函数处理的。
SendMessage,PostMessage都是用来发送消息。
SendMessage,不进对消息。
PostMessage,进队消息。

进队消息基本上是用户的输入:
击键的消息(WM_KEYDOWN、WM_KEYUP)
键盘输入产生字符(WM_CHAR)、鼠标移动(WM_MOUSEMOVE)、
鼠标键(WM_LBUTTONDOWN)、计时消息(WM_TIMER)、刷新消息(WM_PAINT)和退出消息(WM_QUIT)


不进队消息是指由Windows直接调用消息处理函数,把消息直接交给其处理。
而进队消息是指Windows将消息放入到程序中的
消息队列中取,并通过程序中的消息循环,循环把消息取出,
经过一定处理(如例子中经过translate),然后由函数
DispathMessage函数将消息分发给消息处理函数处理


一般情况下,不进队消息的产生是由于调用了其他Windows函数。
如,当调用CreateWindow时,Windows将创建WM_CREATE消息、
当调用ShowWindow时,将产生WM_SIZE和WM_SHOWWINDOW消息、
当调用UpdateWindow时创建的WM_PAINT消息


(注意,并不是某个类型是进队消息就永远是进队消息,如WM_PAINT有进队的,也有不进队的)、
还有其他进队消息也有可能
在不进队消息中出现,整个处理过程是复杂的,但由于Windows已经解决大部分的问题,
因此我们可以认为我们获得的消息是
有序的、同步的。
发送消息:SendMessage 和 PostMessage,SendMessage为发送“不进队消息”,
直接调用处理函数处理,返回处理函数处理结果。
ostMessage为发送“进队消息”。

只有运行中的程序,才有实例句柄。

创建一个窗口,创建一个窗口类,注册窗口类,创建窗口,显示更新窗口。

在windows.h中,以CS_开头的(Class style),是被定义为16位的常量,位标识。
这些常量如何转化成二进制可以发现只有一位是1.在这种情况下,可以进行 位运算。
例如,有些类型可以同时拥有,就用 |。
如何有些类型不能拥有,就先用~取反,然后与结果用 &。

窗口过程函数是一个回调函数,这个函数是由特定的事件或条件发生时,由另一方来调用的。
用于对事件或条件的响应。
回调函数的实现机制:
1.定义回调函数。
2.提供函数实现的一方在初始化的时候,把回调函数的指针注册给调用者。
3.事件或方法触发的时候,调用者使用函数指针调用回调函数做出响应处理。

__stdcall 和__cdecl 是不同的函数调用约定。定义了函数参数进入栈的顺序。
由调用函数还是被调用函数将参数弹出栈,以及产生函数修饰名的方法。
windows程序中,回调函数必须遵循__stdcall调用约定,即CALLBACK
在VC++中,默认使用__cdecl.对于那些需要调用__stdcall调用约定的函数,
在申明必须显式地加上__stdcall.

函数 LoadIcon可以加载Windows系统提供的标准图标到内存中。
也可以加载由用户自己制作的图标资源到内存中,返回句柄。
在加载系统的图标时,第一个参数必须为 NULL.

error:
>MSVCRTD.lib(crtexew.obj) : error LNK2019: 
无法解析的外部符号 _WinMain@16,该符号在函数 ___tmainCRTStartup 中被引用

添加头文件 #include <tchar.h>解决问题。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值