CFlatTabCtrl 移植到 ATL/WTL





1.00/5 (1投票)
2001年2月7日

74929

1786
使用 WTL 的全功能 FlatTabCtrl
鸣谢
首先,我要感谢使用 MFC 开发这个极好的控件的原始作者。 在查看源代码时,提到了以下名字:
- Ian Brumby
- Phil Baxter
- Kirk Stowell
概述
- 我需要在 ATL/WTL 项目中使用一个 FlatTabCtrl,我注意到 CodeProject 上的 KPad 文章 https://codeproject.org.cn/wtl/kpad.asp 中有类似的东西,但它不是我想要的。 随后我的注意力转向了基于 MFC 的 Flat Tab 控件,这篇文章基本上移植了
CFlatTabCtrl
。 两个 ATL 文件包含移植。
- atlflattab.h(包含 WTL 的主
CFlatTabCtrl
类) - atlmetafilebutton.h(由
CFlatTabCtrl
类使用)
要求
您需要 WTL 库,可以从 Microsoft 网站下载。网上有很多文章介绍如何操作,所以我就不赘述了。
注意 - 此控件使用 WTL 的 CString
类和 STL 的 std::list
模板类。
如何在你的 WTL 应用中使用该控件
1. 确保在 stdafx.h 中包含以下 ATL 文件:
- atlwin.h
- atlctrls.h
- atlmisc.h
atlmisc.h 是必需的,因为它包含 WTL CString
类的定义
2. 将头文件 atlflattab.h 添加到将使用该控件的对话框或视图源代码。
3. 在 OnInitDialog
函数中创建控件,例如:
// create the flat tab control. if (!m_FlatTabCtrl.Create(m_hWnd, rect, NULL, WS_VISIBLE | WS_CHILD | FTS_HASARROWS | FTS_BOTTOM | TCS_TOOLTIPS, 0, IDC_FLATTAB)) { DWORD dErrorCode = GetLastError(); //Find out why. Check the Win32 Error codes in MSDN }
如果您不希望显示工具提示,请删除 TCS_TOOLTIPS 样式
4. 使用 InsertItem
方法将选项卡添加到控件。
m_FlatTabCtrl.InsertItem(0, " A ");
5. 如果您需要工具提示,则必须将窗口消息路由到此控件。 可以通过将控件的 PreTranslateMessage
方法通过对话框的 PreTranslateMessage
功能来实现。
virtual BOOL PreTranslateMessage(MSG* pMsg) { m_FlatTabCtrl.PreTranslateMessage(pMsg); return IsDialogMessage(pMsg); }
6. 要在选项卡被选中时接收事件,请将 OnNotify
宏添加到消息映射。
MESSAGE_HANDLER(WM_NOTIFY, OnNotify)
在 OnNotify
处理程序中,捕获事件。
LRESULT OnNotify(UINT /*uMsg*/, WPARAM wParam, LPARAM lParam, BOOL& bHandled) { ATLASSERT(::IsWindow(m_hWnd)); NMHDR* pNMHDR = (NMHDR*)lParam; LRESULT lResult = 0; // handle messages from the flat tab control itself if(IDC_FLATTAB == (UINT)wParam) { sBuff.Format("Selected Tab Index %d", nChoice); MessageBox(sBuff, "Test App"); break; default: bHandled = FALSE; // not handled } } return lResult; } CString sBuff; int nChoice; switch(pNMHDR->code) { case TCN_SELCHANGING: break; case TCN_SELCHANGE: nChoice = m_FlatTabCtrl.GetCurSel(); break; } } }
演示应用程序演示了如何在 WTL 对话框类中使用该控件。