65.9K
CodeProject 正在变化。 阅读更多。
Home

控件数据支持

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.25/5 (6投票s)

2003年2月19日

CPOL

1分钟阅读

viewsIcon

46647

一个允许将数据设置到控件的类。

引言

我经常发现能够将数据附加到控件上很有用,就像我将自己的数据附加到 CListCtrlCComboBox 中的列表项一样。例如,我可能想要指示一个控件包含用户名,或者它包含文件名,以便自动从控件构建命令等代码可以相应地处理控件的内容。

这里提供的 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日

  • 第一版
© . All rights reserved.