控件数据支持






4.25/5 (6投票s)
一个允许将数据设置到控件的类。
引言
我经常发现能够将数据附加到控件上很有用,就像我将自己的数据附加到 CListCtrl
或 CComboBox
中的列表项一样。例如,我可能想要指示一个控件包含用户名,或者它包含文件名,以便自动从控件构建命令等代码可以相应地处理控件的内容。
这里提供的 CCtrlDataSupport
类允许将此支持添加到任何控件。(事实上,它可以添加到任何类,无论它是否是控件。)
好的,所以这个类并不完全是火箭科学——它只是在你的类中添加一个数据成员,以及几个用于设置和获取数据的函数——但我发现我经常使用这个。
如何使用
要使用该类,你需要将其添加到你的控件所继承的类列表中。因此,要将支持添加到 CComboBox,你将拥有类似如下内容:
class CComboBoxData : public CComboBox, public CCtrlDataSupport { };
(显然,这样做的缺点是你必须使用 CComboBoxData
而不是直接使用 CComboBox
,但我很少按原样使用 MFC 类。)
类
用于添加控件数据的类如下
//////////////////////////////////////////////////////////////////////////// // Class: CCtrlDataSupport // Version: 1 // Created: 19-Feb-2003 // Author: Paul S. Vickery // E-mail: paul@vickeryhome.freeserve.co.uk //////////////////////////////////////////////////////////////////////////// // Description: // Class to allow data to be set on controls etc. // // Base class: // None. // // Functions: // CCtrlDataSupport(); // constructor // LPVOID GetCtrlDataPtr() const; // get control data as a void pointer // void SetCtrlDataPtr(LPVOID lpData) // set control data as a void pointer // DWORD GetCtrlData() const; // get control data as a DWORD // void SetCtrlData(DWORD dwData) // set control data as a DWORD // //////////////////////////////////////////////////////////////////////////// // You are free to use or modify this code, with no restrictions, other than // you continue to acknowledge me as the original author in this source code, // or any code derived from it. // // If you use this code, or use it as a base for your own code, it would be // nice to hear from you simply so I know it's not been a waste of time! // // Copyright (c) 2003 Paul S. Vickery // //////////////////////////////////////////////////////////////////////////// // Version History: // // Version 1 - 19-Feb-2003 // ======================= // Initial version // //////////////////////////////////////////////////////////////////////////// class CCtrlDataSupport { public: CCtrlDataSupport() : m_dwData(0) { }; // get control data as a void pointer LPVOID GetCtrlDataPtr() const { return m_lpData; } // set control data as a void pointer void SetCtrlDataPtr(LPVOID lpData) { m_lpData = lpData; } // get control data as a DWORD DWORD GetCtrlData() const { return m_dwData; } // set control data as a DWORD void SetCtrlData(DWORD dwData) { m_dwData = dwData; } private: union { LPVOID m_lpData; DWORD m_dwData; }; };
历史
版本 1 - 2003年2月19日
- 第一版