Windows程序设计基础知识
1. Windows编程的主要特点:
l 用户界面一致
l 多窗口、多任务
l 内存管理高效、完善
l 设备无关性
2. 这里所讲的windows程序都是基于32位操作系统(也就是是32位寻址的操作系统)。所以它的整型和无符号数也都是32位的。
3. Windows程序主要靠处理操作系统发来的消息响应事件,函数调用也是消息的方式进行的。
4. Windows程序的基本结构:
l winMain()函数
以winMain()为应用程序入口函数开始程序,定义窗口类、建立用户窗口等进行一些初始化工作,并产生消息循环
l 消息处理函数
不同的窗口接收到消息后调用相应的消息处理函数进行处理
整个windows程序主要由消息循环和窗口处理函数构成,形成了消息驱动式结构。
5. Windows程序的生命周期
(1) 所有应用程序由winMain()函数入口开始程序的初始化,在初始化过程中调用createWindows()创建窗口,创建成功会发送WM_CREATE消息直接给窗口函数,然后在这个函数里进行初始操作(如打开文件、读初始数据等);
(2) 在程序生存期间函数GetMessage()不停的检索消息。检索到消息后就通过DispatchMessage()将消息发送给相应的窗口调用窗口处理函数进行处理,处理完成又将控制板交给操作系统;
(3) 如果检索到WM_QUIT消息,函数GetMessage()会传回0结束消息循环,进行结束整个程序;
(4) 当使用者点击close命令时,系统发出WM_CLOSE消息。通常窗口不截拦此消息,而是由函数DefaultWindowProc()处理;
(5) 函数DefaultWindowProc()收到WM_CLOSE后,调用DestroyWindow()把窗口消息除,函数DestroyWindows()自己又会发送WM_DESTROY,程序调用函数PostQuitMessage()来响应WM_DESTROY消息;
(6) 函数PostQuitMessage()只送出WM_QUIT消息,让消息循环中的GetMessage()获取并传回0,从而结束消息循环。
6. windows程序要素:
(7) WinMain()入口函数
前面已说到在这个入口函数里主要是初始化窗口类,并显示窗口。继而产生对消息循环的调用,只应用程序不被关闭,消息循环就一直调用。
所做具体工作如下:
l 定义一个窗口类(包括定义窗口对象及对其相关成员赋值)
l 注册窗口类
l 创建窗口
l 显示并更新窗口
l 初始化工作完成,进入消息循环
(8) WndProc()窗口处理函数
(9) 消息
消息分为进队消息和不进队消息
进队消息由操作系统windows发送到应用程序的消息队列,再由消息循环检索并发送到相应窗口调用窗口处理函数。这种消息一般由用户操作产生。调用API函数PostMessage()可以将消息发送到指定窗口消息队列。
不进队消息直接发送到窗口处理函数处理,不进入消息队列。程序调用某些API函数可产生不进队消息。如:调用CreateWindow()函数创建窗口时发送的WM_CREATE消息,调用UpdateWindow()时的WM_PAINT消息及用DestroyWindow()时的WM_DESTROY消息都不进列。程序也可以用调用SendMessage()来直接将消息发送给指定窗口。
对于有些用户操作这两种消息都会产生有些不进队消息来自于进队消息。如:退出应用程序时会产生一条进队消息WM_CLOSE,它会进入队列,而消息的处理函数DestroyWindow()来撤消并关闭窗口,并发送不进队的消息WM_DESTROY到窗口函数。
(10) 设备描述表(Device Context)
DC也称为设备上下文,它是图形设备接口(GDI)内部定义的有图形对象、图形方式及其属性的数据结构。它与特定设备相关,描述了硬件设备的具体特征信息。应用程序不能直接访问DC。为了图形输出,应用程序必须先获取设备描述表句柄,然后以设备描述表句柄为参数调用GDI函数,从而实现图形功能。如:进行窗口重画时就需要获取设备描述表句柄来处理重画消息WM_PAINT。
(11) 应用程序的退出
当要退出程序时,就会发入队消息WM_CLOSE-----> DispatchMessage()函数派送这个消息给相应的窗口函数----->如果窗口函数中没有WM_CLOSE的处理代码,这个函数本身就又发一个不进队消息WM_DESTROY给窗口函数----->窗口函数调用函数PostQuitMessage(int nExitCode)处理WM_DESTROY消息,并产生入队消息WM_QUIT放入消息队列中(nExitCode是应用程序退出代码)----->GetMessage()取得WM_QUIT消息后,返回FALSE,结束消息循环。
7. windows程序设计注意事项
l windows中的WinMain()函数与C程序中的main()函数的区别:
WinMain()只包括初始化(注册窗口类和创建窗口)和消息取出和发送代码
l windows应用程序中的调用关系
窗口中所发生的一切都是以消息的方式发送给窗口函数,窗口函数又以一定的方式响应这条消息。
l windows应用程序多任务处理
抢先式
跳跃式
无优先级式
8. windows程序常用事项
命名规则(匈牙利命名法)
9. 代码书写风格及注释
应用实例说明