不通过获取header,然后Post HDM_GETITEMCOUNT的方法。 这个方法在Win2k上有时候失效。使用PostMessage()的方法实现。

解决方案 »

  1.   

    int nCount = (int)PostMessage(HDM_GETITEMCOUNT, 0, 0);难道这样不行吗?
      

  2.   

    int columns = listCtrl.GetHeaderCtrl()->GetItemCount();
      

  3.   

    同意
    int columns = listCtrl.GetHeaderCtrl()->GetItemCount();
      

  4.   

    int columns = listCtrl.GetHeaderCtrl()->GetItemCount();
      

  5.   

    pretranslatemessage里用sendmessage看看
      

  6.   

    是这样的,我是在Java里使用了SWT,这个库有一个Table控件,我看了它的源代码,在Windows上,获取Column count的方法是先通过Post一个LVM_GETHEADER来获取header的handle,但是这个调用在进行多次窗口最大化/恢复操作以后,返回的handle会变成0,所以后续的Post HDM_GETITEMCOUNT也就无法正常返回列数了。这种现象仅仅发生在Windows2K上,在XP上不会失效。现在我想知道,不通过得到Header的handle, 是否有方法能够获得List Control的列数。
      

  7.   

    得到列数的代码如下:   
      LVCOLUMN   pColumn;   
      ZeroMemory(&pColumn,sizeof(LVCOLUMN));   
      CListCtrl   m_listCtrl;   
      int   nCol   =   0,nColNum   =   0;   
      while( m_listCtrl.GetColumn(nCol,&pColumn) ==  TRUE  )   
      {   
                nCol   +=1;   
      }   
      nColNum   =   nCol;   //这是列的总数
      

  8.   

    如果重要的话, 某一次 handle 不为 NULL 时获取成功了就保存起来, 为 NULL 时就直接读保存的值
      

  9.   

    //获取被选中的列
    CList c_list;
    c_list.GetSelectedColumn();