一 安装 离线MSDN
MSDN:microsoft developer network ,微软向开发人员提供的一套帮助系统。
运行vs 2017 -》运行 vs studio installer ->点击修改-》单个组件-》代码工具-》help viewer->
安装完后,启动vs 在“帮助”菜单,“设置帮助首选项”-》“在帮助查看器中启动”-》
按F1可以调出帮助。
二 windows 程序内部运行机制
2.1 win api 就是windows 就是windows 系统提供的,以便用户开发windows 的应用程序。 主要的windows 函数都包含在 Windows.h里面。
2.2 什么是win32 SDK?
答:windows 32位平台下的软件开发包,包括api函数 、帮助文档、辅助工具等。
2.3 windows 系统和用程序相互调用是通过传递消息来实现的,不同于传统的dos,windows 是基于事件驱动的程序设计模式。比如鼠标按键消息。
2.4 常用前缀:
WM : windows message 如 WM_LBUTTONDOWN
2.5 消息队列
每个windows 应用程序在开始执行后,系统都会为该程序创建一个消息队列,这个消息队列用来存放该程序创建的窗口的消息。例如,当我们按下鼠标左键的时候,将会产生WM_LBUTTONDOWN 消息,系统会将这个消息放到窗口所属的应用程序的消息队列中,等待应用程序的处理。windows 将产生的消息依次放到消息队列中,而应用程序则通过一个消息循环不断的从消息队列中取出消息,并进行响应,这种消息机制就是windows 程序运行的机制。
2.6 进队消息和不进队消息。
不管进队还是不进队都由系统调用窗口过程函数对消息进行处理。
2.7 windows 的窗口过程函数调用
针对windows 的消息处理机制,窗口过程函数被调用的过程如下:
(1). 在设计窗口类的时候,将窗口过程函数的地址赋值给lpfnWndProc成员变量。
(2)调用RegisterClass(&wndclass)注册窗口类,那么系统就有了我们所编写的窗口过程函数的地址。
(3) 当应用程序接收到某一窗口的消息时,调用DispatchMessage(&msg)将消息回传给系统。系统则利用先前注册窗口类时得到的函数指针,调用窗口过程函数对消息进行处理。一个windows 程序可以包含多个窗口过程函数,一个窗口过程总是与某一个特定的窗口类相关联,(通过WNDCLASS结构体中的lpfnWndProc成员变量指定),基于该窗口类创建的窗口使用同一个窗口过程。
lpfnWndProc 成员变量的类型是WNDPROC ,我们在vs 里面的“转到定义”功能,可以看到WNDPROC的定义:
typedef LRESULT (CALLBACK *WNDPROC)(HWND,WPARAM,LPARAM);
LRESULT :long CALLBACK:_stdcall
2.8 _stdcall 与 _cdecl 调用
在函数调用过程中,会使用栈。_stdcall 与 _cdecl 是两种不同的函数调用约定,定义了函数参数入栈的顺序,由调用函数还是被调用函数将参数弹出栈,以及产生函数修饰名的方法。对于参数个数可变的函数,如printf ,使用的是_cdecl 调用约定,win32 的API函数都遵循_stdcall调用约定。在vs中默认编译选项是_cdecl,对于那些需要_stdcall 调用约定的函数,在声明时必须显示的加上 _stdcall 。在windows 程序中,回调函数必须遵循_stdcall 调用约定,所以我们在声明回调时要使用CALLBACK .使用CALLBACK而不是_stdcall的原因是为了告诉我们这是一个回调函数。
2.9 windows 窗口的创建
设计->注册->创建->显示及更新 消息循环。