窗口函数是本书要介绍的重要窗口属性之一,即窗口对象定义中的WndProc变量。这是一个函数指针,定义如下:
这个函数由应用程序编写人员实现,并在窗口创建的时候,传递给窗口对象。下面是窗口的创建函数:
黑体标注的就是窗口函数指针。
窗口函数是实现图形界面用户功能代码的主要位置,所有图形界面相关的操作,比如显示计算结果、接收用户输入等,都是在窗口函数内完成的。这与Windows的窗口机制是一样的。下面列举一个窗口函数代码示例,帮助读者加深印象。当然,如果读者是经验丰富的Windows程序员,相信这个示例非常简单:
这个函数处理了WM_DRAW消息,其他消息虽然列出来了,但是没有实质性的功能代码。WM_DRAW消息是系统预定义消息,在窗口需要绘制的时候,系统会给窗口发送该消息,从而导致窗口函数被调用,实现窗口重画的目的。
窗口函数的最后,一定要调用DefWindowProc函数,即缺省的窗口函数。许多窗口相关的处理都是在这个窗口函数内完成的。DefWindowProc本身是一个窗口函数,其实现代码位于[gui/window/defwproc.cpp]文件中,读者可自行阅读该函数代码。(www.xing528.com)
所谓“给窗口发送消息”,无非就是采用某个特殊的消息(即message参数)值来调用窗口函数而已。比如给窗口发送WM_CREATE消息,实际上就是以下列形式调用窗口函数:
这样窗口函数与WM_CREATE匹配的case语句就会被执行。
Hello China V1.75的GUI模块实现中,表11-6所示消息会被发送给窗口。如果读者对某个消息感兴趣,只需在窗口函数的switch分支中,添加对应分支,并编写代码即可。当然,所有不在用户定义的窗口函数中处理的消息,都将被DefWindowProc函数处理。
表11-6 窗口消息
上述窗口消息是一些最基本的窗口消息,不同窗口之间通过相互发送这些消息(实质上是相互调用窗口函数),可实现协调统一的窗口机制。当然,还可以对窗口消息进行进一步扩展,以实现更加丰富的窗口功能。后续版本的Hello China GUI实现中,主要通过扩展窗口消息,来添加更多的功能。窗口基础架构更改的必要性不是很大。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。