1. Windows GUI程序的基础
最基础最精干的Windows GUI程序包括以下几个部分:
1) 调用RegisterClass注册窗口类。
2) 调用CreateWindow创建窗口。
3) 调用ShowWindow和UpdateWindow显示窗口。
4) 一个消息循环。
5) 一个窗口函数,或者叫窗口消息处理函数。
具体的例子代码参见《Windows 程序设计》第3章。顺便提一下,要学习Windows GUI程序设计,这本书推荐看一下,一本好书的作用无论怎么强调都不为过。
2.基于对话框的Windows GUI程序
3.代码的背后
与1的窗体相比,2有自己的特点,比如程序的界面来自于资源管理器的定义,能响应Tab键切换焦点等等。但是对话框也是Windows窗体的一种,它的实现还是基于1的代码。我们进入2的代码的函数内部,就可以看到这一点。
1)CreateDialog是一个宏,封装了函数CreateDialogParam。CreateDialogParam首先LoadResource,然后调用CreateDialogIndirectParam。资源管理器里面定义的模板,也由CreateDialogParam加载,再传递给CreateDialogIndirectParam。
2)CreateDialogIndirectParam做了很多事情:
A)建立对话框的框架,包括分析资源文件里面定义的对话框风格,加载菜单,加载字体等。
B)创建控件。这些控件都是在资源文件里面定义的。
C)调用CreateWindowEx,这个说明对话框本质上也是窗体。这个函数需要提供一个窗体类,这个传给它的窗体类就是微软提供的默认的对话框窗体类,类名是#32770,这个窗体类的窗体过程是DefDlgProc。
D)需要注意的是,在CreateDialog也有一个过程,这个过程我们称为对话框过程。有消息过来,DefDlgProc会调用这个对话框过程,对话框过程响应消息。如果返回true,意味着告诉DefDlgProc,我已经处理消息了。如果返回false,意味着告诉DefDlgProc,这个消息还需要你处理一下。
3)对话框的消息循环与1相比,多了一个IsDialogMessage。界面上控件的焦点切换正是在这个函数里面实现的。