int InsertColumn(int nCol,
                 LPCTSTR lpszColumnHeading,
                 int nFormat = LVCFMT_LEFT,
                 int nWidth = -1,
                 int nSubItem = -1
                )
程序后续需要读取Column信息,然后根据该Column的标志位信息相应处理//以下是我取Column列宽、对齐方式等信息HDITEM hdi; 
enum { sizeOfBuffer = 256 }; 
TCHAR lpBuffer[sizeOfBuffer]; hdi.mask = HDI_TEXT|HDI_WIDTH|HDI_FORMAT; 
hdi.pszText = lpBuffer; 
hdi.cchTextMax = sizeOfBuffer; pmyHeaderCtrl->GetItem(i, &hdi); // 你需要的信息保存在HDITEM结构之中 

解决方案 »

  1.   

    没怎么用过clistview,如果是clistctrl的话可以用SetItemData,GetItemData来附加数据
      

  2.   

    用法应该是一样的,我其实是用clistview中的clistctrl
    但我记得SetItemData,GetItemData应该是对行附加数据的吧?我是想给列头附加数据
      

  3.   

    额,不好意思  listctrl里是本来就有列标志位的  listview里我就不清楚了
      

  4.   


    具体点呢?我的也是listctrl,Report风格
      

  5.   

    typedef struct _HDITEM {
      UINT    mask;
      int     cxy;
      LPTSTR  pszText;
      HBITMAP hbm;
      int     cchTextMax;
      int     fmt;
      LPARAM  lParam;
    #if (_WIN32_IE >= 0x0300)
      int     iImage;
      int     iOrder;
    #endif 
    #if (_WIN32_IE >= 0x0500)
      UINT    type;
      void    *pvFilter;
    #endif 
    #if (_WIN32_WINNT >= 0x0600)
      UINT    state;
    #endif 
    } HDITEM, *LPHDITEM;
      

  6.   


    如何给lParam斌值,以及如何取值,麻烦给个例子,非常感谢!
      

  7.   

    HDITEM hdi;
    hdi.lParam=(LPARAM)Somthing;
      

  8.   

    我用InsertColumn来插入列头的,是否需要申请个HDITEM结构体,然后插入吗
      

  9.   

    在Insert所有Column后:
    CHeaderCtrl *pHead=m_ListCtrl.GetHeaderCtrl();
    HDITEM hdi;
    for(kk=0;kk<Total;kk++)
    {
    pHead->GetItem(kk,&hdi);
    afxDump << (int)hdi.lParam;// =0
    // new value
    hdi.lParam=(LPARAM)(kk+1000);//
    pHead->SetItem(kk,&hdi);
    // test
    pHead->GetItem(kk,&hdi);
    afxDump << (int)hdi.hdi.lParam;// from 1000...
    }
      

  10.   

    谢谢schlafenhamster,方法可行!另外请教下InsertColumn的第4个参数nSubItem的意义,有没可能通过设置这个参数来实现?int InsertColumn(int nCol,
       LPCTSTR lpszColumnHeading,
       int nFormat = LVCFMT_LEFT,
       int nWidth = -1,
       int nSubItem = -1
       )
      

  11.   

    是否可以考虑自己建立一个列头和数据的映射关系 例如:
    CMap<列头,数据>
      

  12.   

    我在想能不能用InsertColumn的第4个参数nSubItem来存储该值,然后再读取出来
    不知没有朋友这么干过关于InsertColumn的第4个参数nSubItem,网上资料说明太少
      

  13.   

    nSubItem就是所谓的列号,有了列号能够怎么做,不用我说了吧。
      

  14.   

    简单看了一下nSubItem的定义
    感觉你最好还是不要这么用
    因为这个参数虽然现在说不好是做什么用的
    但是一定有他的作用
    而且这个作用你是你想使用的目的
      

  15.   

    看样子只能使用HDITEM或建映射链表了
    当然也可以在列名上前缀或后缀某一特殊字符,也算是不是办法的办法了谢谢各位,也期待更多建议或指导
      

  16.   

    使用SetItemData,保存结构体指针。然后自己定义结构体就行了
      

  17.   


    我记得CHeaderCtrl应该没有这个成员函数吧
      

  18.   

    对了,或者自己去扩展listview类
      

  19.   


    好的,看来还是用SetItem,GetItem地道些,谢了。各位接分。