原创  WINX 中的窗口类层次 收藏

WINX 中的窗口类层次

 

要想使用winx进行Windows编程,了解一下winx的窗口类层次是非常必要的。Winx中的窗口类层次很简单,如下图所示:

 

 

从上图我们可以看出,winx中窗口类的类层次非常直观,WindowMessage是所有窗口类的基类,负责消息处理以及提供缺省的消息处理机制。从此类派生了两个类:DialogBaseWindow。顾名思义,DialogBase类用于对话框处理,Window类用于窗口处理。ModalDialogModalessDialog派生自DialogBase,分别对应于模式对话框和无模式对话框。MainFrameMDIMainFrameMDIChildFrame派生自Window,其中MainFrame用于普通的窗口应用程序;MDIMainFrameMDIChildFrame这两个类用于MDI应用程序(目前,在winx中还没有实现这个功能,winx的后续版本中会实现它)。

 

实际使用中,你只要从ModalDialogModalessDialogMainFrame派生自己的类即可(MDI可用后,也可以从MDIMainFrameMDIChildFrame派生),如下面的例子:

class CHelloMainFrame : public winx::MainFrame<CHelloMainFrame>

{

      // 你的代码

      ……

}

具体的实现细节可以参照Winx教程

 

在自定义控件时,可以从Window类直接派生。关于这方面的例子也可以参照Winx教程

 

上面的类层次图中,在虚线方框中的参数表示的是模板参数,例如WindowMessage的原型如下:

template <class WindowClass>

class WindowMessage

{

}

另外,DialogBaseWindow类名的右上角有一个名字HandleClass,这表示HandleClass也是DialogBaseWindow类的基类。这里HandleClass也作为模板参数传进来,它的功能主要是封装一个窗口的基本操作(如设置窗口标题、维护窗口句柄等)。HandleClass有一个缺省值,大多数情况下你不需要指定它,请看Window类的原型:

template <class WindowClass, int nDlgId = 0, class HandleClass = DefaultWindowHandle>

class ModalDialog : public DialogBase<WindowClass, nDlgId, HandleClass>

{

}

DefaultWindowHandle的定义如下:

typedef HandleT<::ATL::CWindow> DefaultWindowHandle;

这段定义说明HandleClass的实际类型是ATL中的CWindow类。关于CWindow类可以查看MSDN的帮助。

 

发表于 @ 2006年12月06日 14:53:00 | 评论( loading... ) | 编辑| 举报| 收藏

旧一篇:Winx基本类参考手册之AutoFreeAllocT

  • 发表评论
  • 评论内容:
  •  
Copyright © ebasil
Powered by CSDN Blog