层叠式窗体控件指南
作者:Franc Morales
译者:小刀人
原文链接 逆风者
下载源代码
介绍
从零开发自定义控件常常是不需要的,因为标准控件组是相当全面的,如果不够用,子类化或自绘等方法就可以搞掂这个工作。这是一个不应被忽略的要点。在从零开发一个自定义控件时,千辛万苦获得的控件往往会不如标准(控件)。
那就是说,这里只有少数真地缺少的控件,如果我们想要在我们的应用程序中部署它们,除了无中生有地构建它们别无他法。有一个这样的情况就是名称为“层叠式窗体控件”,或无论什么它的其他称呼,例如:Spybot或Outlook。因为它不在标准控件之中并且因为它是一个有趣的练习,本指南讲解了如何开发这类控件,并一步一步地给予讲解。
本指南的目标读者为程序员新手,在开始之前,我想挑战你一下:即在不阅读本文的情况下先尝试自己开发这个控件。尽管这看起来可能会让人退缩或你可能不知道从哪里开始,它不是像你想像得那样难。尝试一下,看看你能走多远,这时再回来看看本指南并检验一下我所说的话。提示:它完全与窗体的重新恢复尺寸和重新复位有关,没有其他。
我们要完成什么
目标是一个“层叠式窗体控件”。就是它。它将会被尽可能地泛型化并会阐明如何聚集该类控件的一个。
热心的读者可能希望知道我在写这个演示工程时写了这个指南。下面的指导、解释和代码实际上就是在上面的截屏中的层叠窗体控件(准确地说来就是图中左边那个控件)的开发。
让我们从代码开始。
过程详解
工程开始
创建工作是简单的。创建一个新的基于对话框的工程,并设置警告级别为4(工程设置,C/C 标签)。级别4将确保任何可疑事物给我们带来注意以使得由我们来决定要做什么“这里提示的警告在绝大多数情况下可以被安全地忽略”(此语出自文档)
让我们在该控件上开始工作。创建一个用CStatic作为基类的新的MFC类命名为CStackedWndCtrl。
在资源编辑器中,添加一个图片控件ID号为IDC_SWC。保留Type的值为缺省的Frame并将Color置为Black。
使用MFC ClassWizard添加一个数据变量到IDC_SWC命名为m_StackedWndCtrl,确保选择了Control作为Category以及CStackedWndCtrl作为变量类型。
在OK上点击,弹出一个消息框提示我们确保我们已经为类CStackedWndCtrl包含头文件在我们的对话框代码中。如果你没有包含它现在就要做了。
数据结构
任何控件的主要部分就是一个数据结构,数据结构可以保持将要显示的信息。
好的,什么将会被显示?该控件用面板制作出来,每个面板包含两个窗体,一个标题窗体和一个内容窗体。下面的图片说明了这个概念。
控件的机制要求只有一个面板的内容窗体在一个时间内显示。在一个面板上点击标题窗体将触发其相应的内容窗体显示,并且也隐藏了当前显示面板的内容窗体。
因此,数据结构将包含一对指向CWnd 对象的指针和一个布尔标识值以指出是否显示或隐藏这个面板的内容窗体。不需要任何其他的东西了。
#include <afxtempl.h>
class CStackedWndCtrl : public CStatic
{
....
....// Attributes protected: typedef struct
{
CWnd* m_pwndRubric;
CWnd* m_pwndContent;
BOOL m_bOpen;
} TDS_PANE, *PTDS_PANE; CArray<PTDS_PANE, PTDS_PANE> m_arrPanes; .... .... }
对于这些结构的保存、检索和操作,用一个数组是一个方便的且足够的方法。记住为了使用这个数组模版,我们需要包含相应的头文件。 本文章更多内容:1 - 2 - 3 - 4 - 下一页>> |