自定义文件夹标签控件的实现

在MFC应用程序开发中,经常需要实现一些自定义的控件来满足特定的功能需求。本文将介绍如何实现一个类似于Microsoft Excel中文件夹标签的控件,但不允许重新排序标签页。这个控件包括第一个标签按钮、下一个标签按钮、最后一个标签按钮和上一个标签按钮。此外,用户还可以重命名标签页或添加/删除新的标签页。

最初,Paul DiLascia在MSDN杂志上分三期介绍了这个控件的代码实现,最后一篇文章发表于2002年10月。在此基础上,增加了第一和最后一个按钮以及标签重命名的功能。

要将这个控件集成到应用程序中,首先需要在视图类中包含头文件: #include "ftab.h" CFolderTabCtrl FolderTabs;

然后在视图类的OnCreate方法中创建控件: CFolderTabCtrl& ftc = FolderTabs; VERIFY(ftc.Create(WS_CHILD | WS_VISIBLE, rc, this, 1, FTS_BUTTONS));

OnDraw方法中绘制控件和水平滚动条: RECT rect; GetClientRect(▭); int newHeight = rect.bottom; int newWidth = rect.right; int folderTabWidth = FolderTabs.GetDesiredWidth(); int folderTabLimit = (newWidth * 4) / 5; if (folderTabWidth > folderTabLimit) folderTabWidth = folderTabLimit; FolderTabs.MoveWindow(0, newHeight - GetSystemMetrics(SM_CYHSCROLL), folderTabWidth, GetSystemMetrics(SM_CYHSCROLL), TRUE); HorzScrollBar.MoveWindow(folderTabWidth, newHeight - GetSystemMetrics(SM_CYHSCROLL), newWidth - folderTabWidth - GetSystemMetrics(SM_CXVSCROLL), GetSystemMetrics(SM_CYHSCROLL), TRUE); SCROLLINFO si; ZeroMemory(&si, sizeof(SCROLLINFO)); si.cbSize = sizeof(SCROLLINFO); si.fMask = SIF_RANGE | SIF_POS | SIF_PAGE; si.nMin = 0; si.nMax = giPaperWdDP; si.nPos = gisFlsHorzOffset; si.nPage = gisFlsHorzInc; HorzScrollBar.SetScrollInfo(&si, TRUE);

在视图类中添加消息映射项以处理文件夹消息: ON_NOTIFY(FTN_TABCHANGED, 1, OnChangedTab) ON_NOTIFY(FTN_EDITSHEETS, 1, OnEditSheets) ON_NOTIFY(FTN_TABNAMECHANGED, 1, OnChangedTabName) ON_NOTIFY(FTN_ADDSHEET, 1, OnAddSheet) ON_NOTIFY(FTN_DELETESHEET, 1, OnDeleteSheet)

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485