创建窗口函数CreateWindow()和WNDCLASS()有什么关系吗?为什么要先用RegisterClass()后才能用CreatWindow()创建窗口?

解决方案 »

  1.   

    RegisterClass()注册一个窗口类
    包括确定窗口的风格,以及窗口过程来确定窗口的消息处理函数等
      

  2.   

    CreateWindow的lpClassName 参数需要一个窗口类的名称或者窗口类的“原子”,这两个东西都是RegisterClass或者AfxRegisterWndClass, AfxRegisterClass等函数返回的,因此如果需要生成非系统提供的窗口类型的窗口,就需要自己注册一个窗口类,WNDCLASS是窗口类的结构,其中指定窗口类的名称、背景色、菜单、窗口类的模式,默认的处理函数,光标,图标等方面的属性设置,在生成窗口时以及窗口生成后处理各种消息时,由这些属性来确定窗口应该是什么风格,需要处理哪些消息,由什么默认函数来处理这些消息等等。如果不进行注册,则系统不知道需要怎么样创建一个窗口,也不知道应该创建什么样的窗口,所以需要预先用RegisterClass等函数进行注册。
    系统提供了一些窗口类型如EDIT,BUTTON,STATIC,MDICLIENT等窗口类型供使用,基本上覆盖了比较常用的一些窗口类型,如果需要使用这些类型以外的窗口,则需要自己注册了。