注意 在层次结构中,像应用程序主窗口这样的顶层控件的绝对坐标和相对坐标是一样的。这是因为除了桌面以外,顶层控件没有父控件,而桌面覆盖了整个屏幕。(译者:我一直都把桌面作为顶层控件的父控件,而桌面的ParentControl为NULL) 7.7.1 计算坐标 图7.7 通过一个控件的相对坐标可以轻松地计算出它的绝对坐标。这使得拖动窗口在屏幕上移动时控件正确的重绘变得简单,因为控件与控件之间的相对坐标是不变的。 CXControl的GetAbsolutePosition方法可以返回一个控件的绝对坐标,也就是控件在整个屏幕上的坐标。为了正确的绘制控件,我们会经常用到绝对坐标。计算控件的绝对坐标是一个简单的过程:你可以简单地用控件的相对坐标加上其父控件的绝对坐标。实际上,这是从一个控件到它的顶层父控件的相对坐标的累积。函数定义如下。 void CXControl::GetAbsolutePosition(D3DXVECTOR2 * osition) ...{  osition->x+=this->GetXPos();  osition->y+=this->GetYPos();
if(this->m_Parent) this->m_Parent->GetAbsolutePosition(Position); }
7.8 类CXControl目前的声明 代码同7.7,略 7.9 总结 本章以CXControl的形式初步介绍了UI LIB。这个类包含了所有控件都必须拥有的一般属性。下一章我们将继续深入这个主题。但在继续之前,我们复习一下所学内容。 ■库是能完成某一任务的函数、结构和类的集合。库主要是通过提供完成任务的工具来减轻程序开发者的负担。像DirectX就是一个例子。 ■UI LIB是User Interface Library的缩写。它由像按钮、列表框、复选框之类的一组控件组成。开发者可以用它为自己的软件创建用户界面。 ■即使控件千差万别,但它们都继承了一个共有的属性集。这就是为什么开发CXControl。虽然它本身不能独立实例化,但它作为一个基类出现,为其他控件提供基础特征集。 ■在几何学上,控件是一个典型的被称为画布的矩形区域。它可以用宽和高,可见和不可见表示。控件在画布区域内绘制自己。因此,按钮有一个外观,而列表是另一个。 ■界面中的每一个控件都存在在一个层次结构中。顶层的控件被认为是最终的祖先或根控件,通常用作程序的主窗口。其他的控件则是它的子孙,它们同样也可以有兄弟和孩子。 ■控件有两个坐标,一个绝对坐标,一个相对坐标。前者表示的是控件从屏幕左上角开始计算的真实坐标,后者表示的是从其父控件左上角开始计算的坐标。无论何时在屏幕上移动一个窗口,这个程序对重新调整控件都很有用处。 声明:本书的英文版权归原作者所有,我翻译的这些版权自然归我。你可以下载到本地保存留念,但在未取得本人书面许可时,谢绝任何形式的转载。你如果将其用于商业目的,请先与原英文版版权所有者和我联系,以免引起不必要的麻烦。 |