zoukankan      html  css  js  c++  java
  • 应用SetProp等API设置HWND的属性表

    做GUI时经常需要让控件或者控件的每个Item附带一些数据.ListCtrl和TreeCtrl等复杂的控件都有类似于SetItem之类的API函数可以附加自己的数据.对于窗口句柄HWND,也有类似的函数,就是SetProp、GetProp等API。具体使用MSDN有详细的介绍和例子。下面我为方便使用而对其进行简要地封装.
    #ifndef   _WINDOW_PROP_H_
    #define  _WINDOW_PROP_H_

    /*
    *  封装API函数SetProp、GetProp、EnumPropsEx、RemoveProp
    *  用于管理窗口的属性
    */
    class  CWindowProp
    {
    private:
        
    //保存需要设置的窗口句柄
        HWND  m_hWnd;

    public:
        CWindowProp( HWND hWnd 
    = NULL )
        {
            
    this->m_hWnd  =  hWnd;
        }

        CWindowProp
    & operator=( HWND hWnd )
        {
            
    this->m_hWnd = hWnd;
            
    return *this;
        }

        
    /*
        * 设置属性值
        * lpszName: 属性key
        * hData: 值句柄
        * Return: 返回成功与否
        
    */
        BOOL  SetProperty(  LPCTSTR lpszName, HANDLE hData )
        {
            ATLASSERT( ::IsWindow( 
    this->m_hWnd ) );
            
    return ::SetProp( this->m_hWnd, lpszName, hData );
        }

        
    /*
        * 获取属性值
        * lpszName: 属性key
        * Return: lpszName对应的值,若不存在返回NULL
        
    */
        HANDLE  GetProperty( LPCTSTR lpszName )
        {
            ATLASSERT( ::IsWindow( 
    this->m_hWnd ) );
            
    return ::GetProp( this->m_hWnd, lpszName );
        }

        
    /*
        * 删除属性值
        * lpszName: 属性key
        * Return: lpszName对应的值,若不存在返回NULL
        
    */
        HANDLE  RemoveProperty( LPCTSTR lpszName )
        {
            ATLASSERT( ::IsWindow( 
    this->m_hWnd ) );
            
    return  ::RemoveProp(  this->m_hWnd, lpszName );
        }

        
    /*
        * 枚举属性列表
        
    */
        BOOL EnumerateProperties( PROPENUMPROCEX pfnProc, LPARAM lParam)
        {
            ATLASSERT( ::IsWindow( 
    this->m_hWnd ) );
            ATLASSERT( 
    !::IsBadCodePtr( (FARPROC)pfnProc ) );
            
    return ::EnumPropsEx( this->m_hWnd, pfnProc, lParam) != -1;
        }  

        
    /*
        *  删除所有的属性列表
        
    */
        
    void RemoveAll()
        {
            ATLASSERT( ::IsWindow( 
    this->m_hWnd ) );
            ::EnumPropsEx( 
    this->m_hWnd, sRemoveAllProc, 0 ); 
        }

    private:
        
    static BOOL CALLBACK sRemoveAllProc( HWND hWnd, LPTSTR lpszName, HANDLE hData, ULONG_PTR dwData )
        {
            ::RemoveProp( hWnd, lpszName );
            
    return TRUE;
        }

    };

    #endif
  • 相关阅读:
    dedecms5.7安装百度(ueditor)编辑器的方法
    shell多线程之进程间通信(2)
    shell多线程之进程间通信
    awk笔记
    用shell做简单的分布式计算
    C语言实现常用查找算法——二分查找
    C语言实现常用排序算法——基数排序
    C语言实现常用数据结构——堆
    C语言实现常用数据结构——图
    C语言实现常用数据结构——二叉查找树
  • 原文地址:https://www.cnblogs.com/fangkm/p/1434562.html
Copyright © 2011-2022 走看看