1、Windows程序运行原理及程序编写流程
操作系统提供了各种方便开发Windows应用程序的编程接口,所的函数都在Windows.h头文件中声明。Win32 SDK(Software Development Kit): 即Windows 32位平台下的软件开发包,包括API函数,帮助文档,微软提供的一些辅助开发工具。
1、窗口:桌面也是窗口,消息框和对话框;
2、句柄:资源(窗口、图标、光标),系统创建资源会为他们分配内存并返回这些资源标识符---句柄
3、Windows是一种事件驱动方式的程序设计模式,主要基于消息
消息:在Windows中由结构体MSG来表示,typedef struct tagMSG{
HWND hwnd;//消息所属的窗口句柄
UINT message;//消息本身标识符,由一数值表示,系统对消息定//义为WM_XXX宏(WM为Windows Message缩写)
WPARAM wParam; //随消息的不同附加信息也不同
LPARAM lParam; //消息的附加参数
DWORD time; //消息投递的时间
POINT pt; //鼠标当前位置
}
4、消息队列:操作系统把感知到的事件封装成消息,投到应用程序的消息队列,应用程序从中取出消息并进行响应,每个应用程序都有消息队列
5、窗口过程:是一个回调函数,专门负责处理消息的函数,由操作系统调用
6、消息队列问题:OS根据标识把消息投递到各个应用程序的消息队列中
7、WinMain函数,是windows程序的入口点函数,相当于dos的main函数
8、
创建一个完整的Win32程序,该程序实现创建一个窗口,其中主要步骤为A. WinMain函数的定义
B. 创建一个窗口 创建一个完整的窗口的四个步骤SDK,1设计窗口类,2注册窗口类,3创建窗口,4显示窗口
C. 进行消息循环
D. 编写窗口过程函数
回调函数的实现机制:
(1) 定义一个回调函数
(2) 提供函数实现的一方在初始化的时候,将回调函数的函数指针注册给调用者
(3) 当特定的事件或条件发和的时候,调用使用函数指针调用回调函数对事件进行处理
针对Windows的消息处理机制,窗口过程函数被调用的过程如下:
A. 在设计窗口类的时候,将窗口赛程函数的地址赋值给lpfnWndProc成员变量
B. 调用RegisterClass(&wndclass)注册窗口类,那么系统就有了我们所编写的窗口过程函数的地址
C. 当应用程序接收到某一窗口的消息,调用DispatchMessage(&msg)将消息加值给系统。系统则利用先前注册窗口类时得到函数指针,调用窗口过程函数对消息进行处理。HICON LoadIcon(HINSTANCE hInstance, LPCTSTR lpIconName);//加载窗图标,返回系统分配给该图标的句柄, LPCTSTR被定义为CONST CHAR *(指向常量的字符指针),图标的ID是一个常数,要使用MAKEINTRESOUCE宏把资源ID标识转换为需要的LPCTSTR类型
9、windows应用程序的消息处理机制
10、C语言指针函数和函数指针的几个例子
char * const*(*next)();
void (*signal(int sig,void(*func)(int)))(int);
char *(* c[10])(int **p);
11. 什么时候用NULL,什么时候用0。答,对指针赋值时用NULL,对变量赋值时用0。
12. 什么是野指针?答:将指针指向的变量的内存释放后,此指针即变成野指针!如何避免野指针?答:将此指针指向NULL即可。p=NULL;