想单击列表控件的某几个列的表头时,可以出现下拉以供选择(CComboBox)。比如单击“单位”那一列的表头,下拉有“cm、dm”可以选择,点cm该列就都是cm。要重载CListCtrl,CHeaderCtrl还是两个都要?具体应该怎么实现?谢谢指教

解决方案 »

  1.   

    你可以将CComboBox和CListCtrl(不带表头)组合一下使用
      

  2.   


    也就这个方法。
    或者在用CComboBox盖住CListCtrl,位置要计算好。
      

  3.   

    子类化HeadCtrl
    可以参考这个
    http://www.codeproject.com/Articles/1796/XListCtrl-A-custom-draw-list-control-with-subitem
      

  4.   

    谢谢大家!
        将CComboBox和CListCtrl(不带表头)组合一下使用
    这样看起来怪怪的,而且我并不是每一列表头都是组合框。
    向版主给的工程例子太复杂了,源码很多看不懂。所以现在是在对话框中响应LVN_COLUMNCLICK消息,
    void CXXXDlg::OnColumnClick(NMHDR* pNMHDR, LRESULT* pResult)
    {
    }
    打算将隐藏的组合框在点击表头时显示出来,问题是不知道如何获取点击的是表头的第几列,以及表头第几列的CRect范围。请大家帮忙指点
      

  5.   

    int sb=pNMListView->iSubItem;再通过 BOOL GetColumn( int nCol, LV_COLUMN* pColumn ) const;
    或 CListCtrl::GetColumnWidth可以计算出该Column的RECT。
    也可以用:
    CListCtrl::GetHeaderCtrl
    CHeaderCtrl* GetHeaderCtrl( );