Windows程序设计中为什么要注册窗口类?

来源:互联网 发布:走出帝制在淘宝怎么搜 编辑:程序博客网 时间:2024/05/16 17:46

转自:http://blog.sina.com.cn/s/blog_711dc8b40100ok9i.html

你想创建什么样的窗口呢?那么,创建什么样的窗口呢?创建前,Window系统可不知道你要的是什么类型的窗口啊(比如标题栏上显示什么图标,鼠标形状是什么,窗口背景颜色等等)。这些类型信息应在你创建前事先告诉Window系统。可以采用这种方法:就是我们事先写一份要创建窗口的类型申请表,提交(注册)给Window系统。然后在创建时,可以让Windows按这个申请表来创建你所要的窗口了。也就是说我们还应该先提交一个申请表,申请成功后再根据这个表创建一个窗口。

  我们在使用microsoft平台SDK或者MFC编程时,在创建窗口类后都要先用RegisterClass函数来注册窗口类,这个函数需要一个指向窗口类结构的指针。那么RegisterClass这个windows API函数到底做了什么呢,关于这个函数的源码微软是不会给出来的,因为它只是提供一个系统编程接口,网上也找不到相关说明,只是粗略介绍需要将类注册给系统,但从msdn的atom table说明中我们发现这样一段说明。The system uses atom tables that are not directly accessible to applications. However, the application uses these atoms when calling a variety of functions. For example, registered clipboard formats are stored in an internal atom table used by the system. An application adds atoms to this atom table using。答案有了,在我们构造一个窗口类结构后,我们需要将这个类结构指针加入到system atom table 即SAT中,这样系统就可以通过查找这张表来找到用户自定义的窗口类,window预定义的窗口类指针也在SAT中。SAT实际上实现了一种用于查询的映射,atom实际类型是short,即16位数据。只有系统才可直接访问这张表,但在调用某些api函数时,如Registerclass,可以告知系统来存取这张表。当然,还有本地原子表和全局原子表,这些表应用程序是可以直接访问的。 

原创粉丝点击