实现类似Excel和Visual C++里文件夹式样的标签控制(二)

2016-01-29 12:04 40 1 收藏

实现类似Excel和Visual C++里文件夹式样的标签控制(二),实现类似Excel和Visual C++里文件夹式样的标签控制(二)

【 tulaoshi.com - C语言心得技巧 】

实现类似Excel和Visual C++里文件夹式样的标签控制(二)
——实例应用

编译/NorthTibet

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com)

下载本文例子源代码

    在第一部分我们创建了一个类CFolderTabCtrl,用这个类实现了类似Excel和Visual C++应用中文件夹式样的标签控制。在阅读本文之前,最好先看上一篇文章及其例子代码FldrTab。FldrTab纯粹是一个测试CFolderTabCtrl类的例子,没有什么实质性的用途。为了真正模仿出Excel和Visual C++的文件夹式样标签控制的效果,本文拟将CFolderTabCtrl应用到一个实际的MFC程序中。并且标签的旁边也象Excel一样有水平滚动条,如图一所示:


图一 标签和滚动条

    本文的例子原来是一个显示位图(bitmap)文件及其BITMAPINFOHEADER结构信息的程序。图像及其BITMAPINFOHEADER结构信息都是显示在同一个视图画面里。如图二所示:


图二 图像和信息在同一画面

    为了将CFolderTabCtrl标签控制类引入到这个程序,我们创建了两个新类,CFolderFrame和CFolderView。此外,我们还要对原来的程序进行改进,使它能够在不同的标签页里分别显示图像和BITMAPINFOHEADER结构信息。如图三和图四:


图三 显示位图图像


图四 显示位图文件格式头结构信息

    另外标签控制页中还有一个用于显示原始图像十六进制数据的Hex标签,不过这是一个虚设的标签,我并没有实现它,如果哪位朋友有兴趣,可以自己去完成,做好后别忘了把源代码也给我一份哦!
    从个人的角度来讲,我很怀疑用这样的方法来改进程序的可行性,因为我觉得将信息显示在一个画面中会更直观。但是,本文的目的是示范,并不指望拿它去获得UI设计的奖项,仅仅是用它来作为例子,示范如何同时实现CFolderCtrlTab标签控制和滚动条控制,仅此而已。
此外,要记住一点,每当你要修改或增强MFC应用程序框架特性时,尽量少的触及MFC框架本身。模仿它而不要去破坏它。以此为原则,我采取的策略是在框架和视图之间插入新窗口。如图五所示:


图五 插入的新框架与主框架的关系

    上图说明了基本的框架关系。主框架(或MDI子框架)包含作为子窗口的CFolderFrame,然后CFolderFrame包含水平滚动条和标签控制并管理它们之间的交互。
CFolderFrame的使用很简单,自己要做的事情并不多。首先必须改写主框架的OnCreateClient函数以便创建CFolderFrame表示的窗口。

   BOOL CMainFrame::OnCreateClient(...,      CCreateContext* pcc)   {     return m_wndFolderFrame.Create(this,       RUNTIME_CLASS(CDIBView), pcc,       IDR_FOLDERTABS);   }      
   因为原来的位图显示程序同时支持SDI和MDI版本。对于MDI的情况,你要在MDI子框架中改写OnCreateClient,而OnCreateClient函数通常是MFC创建视图的地方,如今应该在此创建CFolderFrame子框架。不要调用基类的OnCreateClient!然后,CFolderFrame子框架用运行时类创建一个视图和你要传递的上下文信息。IDR_FOLDERTABS是串资源的ID,用它存储标签名。如果你想指定动态的标签名,可以省略这个参数并调用CFolderFrame::GetFolderTabCtrl来获得标签控制,然后用CFolderTabCtrl::AddItem添加标签页。有关细节请参考上一篇文章和附带的源代码。
    接下来,你必须自己添加一些视图代码。其中最重要的事情是从CFolderView派生自己的视类,而不是从CScrollView类派生。因为要让标签控制和滚动条协调操作,所以这是问题的重点所在。如果你不使用滚动视图,那就不存

来源:http://www.tulaoshi.com/n/20160129/1484468.html

延伸阅读
一、前言 用计算机进行数字图像处理的目的有两个,一是产生更适合人类视觉观察和识别的图像,二是希望计算机能够自动进行识别和理解图像。无论是为了何种目的,图像处理的要害一步是对包含有大量各式各样景物信息的图像进行分解。分解的最终结果就是图像被分成一些具有各种特征的最小成分,这些成分就称为图像的基元。产生这些基元的过...
自从微软公司推出Windows 95操作系统以来,系统托盘应用作为一种极具吸引力的用户界面设计深受广大用户的喜爱。使用系统托盘作为用户界面的Windows应用程序数不胜数,比如"金山词霸"、"Winamp"、"RealPlayer"等等。 这些程序运行时不显示运行窗口,只在任务栏上显示一个图标,表示程序正在运行,用户可以通过鼠标与应用程序交互,程序开发人...
标签: 电脑入门
有时用某些工具扫描硬盘时,会在NTFS分区根目录下发现$extend文件夹(当然如果你的硬盘分区格式是FAT32就不会看到它了),可能某些工具会报告说$extend文件夹体积很大,但是千万不要不随便清理(直接是看不到也清不了它的,除非你用PowerTool、XueTr等工具,或进入PE系统才可能看到它和对其操作),如果误删了$extend或其中的文件或文件夹,可能导...
  适用于: Microsoft Visual C++ .NET 2003 Microsoft Visual C++ Toolkit 2003 Microsoft Visual Studio .NET 摘要: 演示了 Visual C++ 2003 编译器提供的众多代码优化功能中的几项功能。(8 ...
标签: excel
excel批量创建新建文件夹?   许多人在工作中会遇到需要批量创建文件夹的问题,比如做人事工作的人可能要把每个人的信息存放在文件夹中,一个个创建,一个个命名太麻烦了,累而且工作效率也不高。本篇为您讲解一个简单而有快速的好办法。我们可以通过Excel来批量创建文件夹。 第一步、首先打开Excel创建一个新的工作表,在表格中...

经验教程

306

收藏

31
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部