CHeaderCtrl用法

CListCtrl的表头可以单独使用,类CHeaderCtrl封装了这一功能.

1.  构造表头

     和所有控件一样,都通过Create函数创建对象,Create函数的原型如下:

     virtual BOOL Create(DWORD dwStyle,const RECT& rect,CWnd* pParentWnd,UINT nID)

     参数说明:

     rect是表头控件所在位置;

     pParentWnd是表头的父窗体的指针,

     nID是表头的资源ID号;

     dwStyle是表头的风格样式,有下列值组合:

        HDS_BUTTONS 表示表头控制外观类似按钮;
  HDS_HORZ 表示表头控制为水平排列;
  HDS_VERT 表示表头控制为垂直排列;
  HDS_HIDDEN 表示表头控制为隐藏模式。
  CCS_BOTTOM 设置控制位置在父窗口的底部并与父窗口同样宽度;
  CCS_NODIVIDER 在控制顶部形成两个像素的高亮区;
  CCS_NOHILITE 在控制顶部形成一个像素的高亮区;
  CCS_NOMOVEY 在响应WM_SIZE消息时重置大小并水平排列;
  CCS_NOPARENTALIGN 使控制自动靠近父窗口的顶部或底部;
  CCS_NORESIZE 设置初始大小或新值时使控制使用默认宽度和高度;
  CCS_TOP 设置在父窗口客户区域的顶部并与父窗口同样宽度;

        也可以使用WND的风格.

     创建了表头以后使用InsertItem添加列项,InsertItem函数原型如下:

     int InsertItem(int nPos, HDITEM* phdi )

     参数说明:

     nPos是列序号,也就是列项在表头中的位置

     phdi是一个结构体,列的属性取决于该结构体的设置,结构体原型是:

     typedef struct _HD_ITEM

    {

          UINT mask; //结构成员有效控制位

          int cxy; //表头项目的宽度
          LPSTR pszText; //表头项目内容
          HBITMAP hbm; //表头项目的位置句柄
          int cchTextMax; //表头内容字符串长度
          int fmt; //表头项目的格式
          LPARAM lParam; //应用程序定义的32位数据
      } HD_ITEM;

      通常设置mask,cxy,pszText和fmt四个域.

      mask设置以下值或值的组合表示如下含义:

            HDI_BITMAP              hbm成员有效
   HDI_FORMAT            fmt 成员有效

   HDI_LPARAM             lParam成员有效
   HDI_TEXT                   pszText 和cchTextMax 成员有效
   HDI_WIDTH cxy 成员有效并确定项目宽度值

      fmt设置以下值或值的组合表示如下含义:

            HDF_CENTER 表头项目居中
   HDF_LEFT 表头项目左对齐
   HDF_RIGHT 表头项目右对齐
   HDF_BITMAP 表头显示一个位图
   HDF_OWNERDRAW 由主窗口自绘表头项目
   HDF_STRING 表头项目为一个字符串

      其它成员函数不在此说明,请参考MSDN.

2.  控制表头

     可以通过三个常用的消息控制表头,分别是:

     HDN_ITEMCLICK         鼠标左键单击表头中的列

     NM_RCLICK                   鼠标右键单击表头中的列,右键弹出菜单可以在此消息的控制函数中实现

     HDN_ITEMCHANGED 拖动列的边界,改变列大大小

     这三个消息都以ON_NOTIFY()发送,消息处理函数原型为void FunName(NMHDR* pNMHDR, LRESULT* pResult)

     在消息处理函数中,通过成员函数GetHeaderCtrl()获得表头的指针pHead,调用成员函数GetItem()获得属性值,给一示例:

      NMHEADER *pHdr = (NMHEADER*)pNMHDR;
      CHeaderCtrl *pHeader = m_cListCtrl.GetHeaderCtrl();
      HDITEM hdi;
      hdi.mask = HDI_WIDTH;
      pHeader->GetItem(pHdr->iItem, &hdi);

      hdi.cxy就是触发消息的列的宽度.

      还有许多消息可以控制表头,使用方法同上:

     HDN_ITEMDBLCLICK       左键双击表头的列项

     HDM_SETITEM                   设置表头列的属性

     HDN_DIVIDERDBLCLICK 左键双击列与列的分割区域

     更多的请参考MSDN的"Header Control Reference "


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/bwmwm/archive/2008/07/24/2706663.aspx

你可能感兴趣的:(数据结构,.net,Blog)