为了更好地理解窗口类、窗口类对象和窗口之间的关系,我们接下来实现在窗口中显示一个按钮这一功能,仍在已有的Test程序中实现。首先需要创建一个按钮类对象,按钮对应的MFC类是CButton类,其继承层次结构如图3.24所示,从而可以得知CButton类派生于CWnd类。
图3.24 CButton类的继承层次结构
在MFC提供的资源类中,有些类的对象的构造(包括对象构造与初始化)直接通过其构造函数就可以完成。也就是说,这些对象的构造函数包含这个对象的初始化操作。但有些对象的产生除了调用构造函数外,还需要调用其他一些函数来进行初始化的工作,然后才能使用该对象。
对于一个CButton对象,在定义之后就可以使用了。但是作为一个窗口类对象,即CWnd对象,如果在构造之后还需要产生这个窗口的话,还需要调用CreateEx函数来完成初始化工作。也就是说,如果要显示一个按钮的话,在定义这个CButton类对象之后,即调用CButton类的构造函数之后,还需要调用CButton的Create函数创建这个按钮窗口,从而把按钮窗口与CButton对象关联起来。
CButton的Create函数声明如下。
BOOL Create( LPCTSTR lpszCaption, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID );
各个参数的意义如下所述。
n lpszCaption
指定按钮控件的文本。
n dwStyle
指定按钮控件的风格。按钮控件不仅具有按钮风格类型,还具有窗口风格类型。多种风格类型可以通过位或操作加以组合。
n rect
指定按钮控件的大小和位置。该参数是RECT结构体类型,通过指定左上角和右下角两个点的坐标定义一个矩形。结构体也是一种特殊的类,所以可以用类CRect来构造一个RECT结构体。