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

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

在本文的前面第一部分和第二部分中,我们描述了CFolderTabCtrl标签控制的设计思想、创建过程以及工作原理,通过一个实用程序分析了将CFolderTabCtrl与MFC框架结构融于一体的思路以及关键技巧。CFolderTabCtrl的主要目的是仿真Excel和Visual C++应用程序中标签控制页的UI功能。在这一部分我们将进一步增强和完善CFolderTabCtrl标签控制的仿真效果以及可重用性。内容包括创建多个标签页、并增加让标签页左右滚动的箭头按钮,这两个按钮上分别是示意左右的小三角形。

我们将以《VC知识库在线杂志》第十五期里一篇关于图像显示的文章中所附带的源代码作为例子,将CFolderTabCtrl实现的标签控制功能应用到图像显示程序中。原来的程序是一个MFC程序,它通过一个C++类(CPicture)封装Windows系统提供的IPicture 低级COM接口,使我们能轻松地显示各种格式图像文件,包括*.gif、*.jpg、*.bmp和DIBs文件。有关图像显示的具体细节不是本文要讨论的内容,具体细节请参考文章——“在MFC程序中显示JPG/GIF图像”。

首先,我们来看看如何实现箭头按钮?我的基本思路是将按钮作为CFolderTabCtrl的自绘窗口来创建,将标签放置在按钮的右边。如图一所示:

图一 程序中有13个标签页

为实现这个按钮,我创建了一个新类,CFolderButton。它个类是一个自绘按钮类,它有一个DrawItem函数负责绘制按钮,而不是用位图按钮。我选择用GDI类绘制表示左右的三角形,这样的话就不用担心由于缩放而导致的边缘显示问题。CFolderButton::DrawItem自己能绘制三角形来适应按钮的大小。按钮在置灰状态时用3D阴影颜色表示,但按钮被按下时,用象素替换的方法表示按钮状态。CFolderButton还处理鼠标消息以实现两个专用的特性,通常,按钮时不响应双击操作的,但这个按钮可以处理双击鼠标事件,它使得标签滚动两页。也就是说双击相当于两次单击一样。下面是实现代码:

void CFolderButton::OnLButtonDblClk (UINT nFlags, CPoint pt) {
  SendMessage(WM_LBUTTONDOWN,   nFlags,   MAKELONG(pt.x,pt.y));
}

另一个特性是用户按着按钮不放,则标签会一直滚动,直到标签的端口。实现这个特性的方法是用一个定时器,当定时器被激活时,CFolderButton向它的父窗口发送一个WM_COMMAND消息,就好像按钮已经被压下一样。 void CFolderButton::OnTimer(UINT nIDEvent) {
  GetParent()->SendMessage(WM_COMMAND, GetDlgCtrlID());
}

时间: 2024-10-04 01:23:37

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

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

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

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

众所周知,Excel中一个工作簿可以有多个工作表单(worksheet),每个表单可以通过左下角的标签控制灵活切换(如图一),Visual C++也有类似的控制,如在Output窗口中设置有:Build,Debug,Find in Files和Results等标签控制(如图二). 图一Excel中的标签控制 图二 Visual C++中的标签控制 我们将这种界面称为文件夹式样的标签控制,以下简称标签控制,而将MFC中的Tab Control称为标签控件.那么标签控制是如何实现的呢?MFC中有没有

Excel中添加自己常用文件夹动画教程

<Excel2003入门动画教程35.Excel中添加自己常用文件夹>. 演示动画 操作步骤 在Excel的"打开"和"另存为"对话框中的右侧区域中有一些文件夹的快捷方式,能不能将一些常用文件夹添加到这个地方呢? 在"打开"或"另存为"对话框中,定位到需要添加的文件夹中,然后按工具栏上的"工具"按钮,在随后弹出的下拉列表中,选择"添加到我的位置"选项. 以后我们打开Excel

求帮助!怎么样让EXCEL自动读取表格或者文件夹里的数据

问题描述 我做了个简单的EXCEL的Map/Data的宏,但是每次数据变动了,都要重新录入数据,有近千个数据要录入,时间很长,能否让EXCEL自动读取文件夹里的数据?求大神帮忙

Excel如何批量创建人名文件夹

  第一步 首先打开Excel创建一个新的工作表,在表格中的A列输入"md "(后面有个空格),B列输入要创建的文件夹的路径,C列输入文件夹的名称,这里可以通过手动或者复制粘贴来输入人名. 第二步 在D列输入"=A1&B1&C1",再拉单元格右下角的锚点,使其下面的表格自动填充. 第三步 创建一个文本文件,把D列的内容复制到文本文件里,并把文件的后缀名由"txt"改成"bat",改好后双击这个文件就可以完成文件

系统C盘下的文件夹的功能解释

供大家参考使用! C: ├─WINDOWS │  ├─system32(存放Windows的系统文件和硬件驱动程序) │  │  ├─config(用户配置信息和密码信息) │  │  │  └─systemprofile(系统配置信息,用于恢复系统) │  │  ├─drivers(用来存放硬件驱动文件,不建议删除) │  │  ├─spool(用来存放系统打印文件.包括打印的色彩.打印预存等) │  │  ├─wbem(存放WMI测试程序,用于查看和更改公共信息模型类.实例和方法等.请勿删除

Windows下各个文件夹的作用分别是什么

├-WINDOWS │ ├-system32(存放Windows的系统文件和硬件驱动程序) │ │ ├-config(用户配置信息和密码信息) │ │ │ └-systemprofile(系统配置信息,用于恢复系统) │ │ ├-drivers(用来存放硬件驱动文件,不建议删除) │ │ ├-spool(用来存放系统打印文件.包括打印的色彩.打印预存等) │ │ ├-wbem(存放WMI测试程序,用于查看和更改公共信息模型类.实例和方法等.请勿删除) │ │ ├-IME(用来存放系统输入法文件,

excel2013如何每次打开定位到指定文件夹

  excel2013每次打开定位到指定文件夹的方法: 设置默认打开定位文件夹步骤1:启动Excel并创建一个空白工作簿,在"文件"选项卡中选择"选项"选项,如图1所示. 设置默认打开定位文件夹步骤2:此时将打开"Excel选项"对话框,在对话框左侧的列表中选择"保存"选项, 在右侧的"默认本地文件位置"文本框中修改默认文件夹的位置,如图2所示.完成设置后单击"确定"按钮关闭对话框,此时

三步快速打开Win7文件夹选项

Win7系统已经成为时下市场占用率最高的主流操作系统,不过依旧有不少电脑爱好者还停留在XP系统的操作习惯,对于一些Win7系统细节问题,依然不够了解.比如最近有小编一朋友想设置一下文件夹选项,将Win7的隐藏文件显示出来,但郁闷的是找不到Win7文件夹选项在哪.由于Win7与XP系统,在文件夹选项位置上有所不同,相信也有很多小白童鞋会遇到类似问题,此文谨献给有类似疑问额电脑菜鸟们. 其实要找到Win7文件夹选项设置入口相当简单,只需三步即可,详细步骤如下: 一.首先从Win7桌面点击"计算机&q