窗口类类型的区别在于作用范围和何时如何被注册和销毁。
1.系统窗口类
被系统注册。许多类是可以被所有进程使用的,其他的则只能被系统内部使用。因为系统注册的这些类,进程不能销毁他们。
当一个进程其中任何一个线程第一次调用GDI函数时系统注册系统窗口类。
每个应用程序接受一份系统类的拷贝。所有的16位windows程序在相同的VDM共享系统类,只是在16位的系统是这样的共享方式。
进程可用的系统窗口类有:Button、ComboBox、Edit、ListBox、MDIClient、ScrollBar和Static七种。分别是:按钮、组合框、编辑框、列表框、多文档界面框架、滚动条和静态标签。
系统内部使用的系统窗口类有:ComboLBox、DDEMLEvent、Message、#32768、#32769、#32770、#32771、#32772八种。分别是:内部含有组合框的列表框、动态数据交换管理库事件、消息对话框、菜单、桌面窗口、对话框、任务切换窗口、图标标题。
2.应用全局类
由可执行体或者DLL注册并且可以被所在进程其他所有模块使用的窗口类。
要创建一个每个进程都可以使用的类时,可以在dll文件中创建一个窗口类,然后在每个进程中加载这个dll即可。要在每个进程加载这个dll,把这个dll的名字添加到注册表 HKEY_LOCAL_MACHINE\ Software\ Microsoft\ Windows NT\ CurrentVersion\ Windows 的AppInit_DLLs值中。
不管什么时候一个进程启动,在调用进入点函数之前,系统加载指定的dll到刚刚启动的进程的进程描述上下文中。此dll必须在初始化过程中注册窗口类,同时必须指定窗口类风格为CS_GLOBALCLASS。
要移除应用全局类和释放相关的存储空间,使用 UnregisterClass函数。
3.应用局部类
由任何可执行体或者dll注册,只提供给自己的执行程序使用。
尽管可以注册任何数量的局部类,但是通常只注册一个。这个窗口类支持程序主窗口的窗口过程。
当注册了局部窗口类的模块关闭时,系统销毁这个局部类。程序当然也可以使用 UnregisterClass函数移除局部类和释放相关的存储空间。