我在一个基于对话框的程序中加了一个CListCtrl控件,想给这个控件增加列标题栏
我于是在对话框的OnInitDialog()加入了下列代码,编译调试通过,但是标题栏没有出来,不知什么原因,请各位高手给予解决
//给listctrl控件增加标题栏
CListCtrl* pmyListCtrl=(CListCtrl*)GetDlgItem(IDC_LIST1);
TCHAR rgtsz[3][10]={_T("已测案例"),_T("测试状态"),_T("测试时间")};
LVCOLUMN lvcolumn;
CRect rect;
for(int i=0;i<3;i++)
{
lvcolumn.mask=LVCF_FMT|LVCF_SUBITEM|LVCF_TEXT|LVCF_WIDTH|LVCF_ORDER;
lvcolumn.fmt=LVCFMT_LEFT;
lvcolumn.pszText=rgtsz[i];
lvcolumn.iSubItem=i;
lvcolumn.iOrder=i;
lvcolumn.cx=rect.Width()/3;
pmyListCtrl->InsertColumn(i,&lvcolumn);
}

解决方案 »

  1.   

    第一:IDC_LIST1是否是LVS_REPORT方式的ListCtrl?不是的话加一句:
    pmyListCtrl->ModifyStyle(0,LVS_REPORT,0)
    第二:第一项(i=0)的时候是不能有LVCF_SUBITEM的标志的。
      

  2.   

    还有就是:rect是多少?
    更改后如下:
    CListCtrl* pmyListCtrl=(CListCtrl*)GetDlgItem(IDC_LIST1);
    TCHAR rgtsz[3][10]={_T("&Ograve;&Ntilde;&sup2;&acirc;°&cedil;&Agrave;&yacute;"),_T("&sup2;&acirc;&Ecirc;&Ocirc;×&acute;&Igrave;&not;"),_T("&sup2;&acirc;&Ecirc;&Ocirc;&Ecirc;±&frac14;&auml;")};
    LVCOLUMN lvcolumn;
    CRect rect;
    pmyListCtrl->GetWindowRect(&rect);
    for(int i=0;i<3;i++)
    {
    lvcolumn.mask=LVCF_FMT|LVCF_TEXT|LVCF_WIDTH|LVCF_ORDER;
    if (i==0)
    lvcolumn.mask |= LVCF_SUBITEM; lvcolumn.fmt=LVCFMT_LEFT;
    lvcolumn.pszText=rgtsz[i]; lvcolumn.iSubItem=i-1;
    lvcolumn.iOrder=i;
    lvcolumn.cx=rect.Width()/3;
    pmyListCtrl->InsertColumn(i,&lvcolumn);
    }
    return true;
      

  3.   

    void CMyDlg::SetListCtlStyle(CListCtrl &listctl, DWORD style[], int StyleCount, DWORD ExtendStyle[], int ExtendStyleCount)
    {
    DWORD dwStyle = GetWindowLong(listctl, GWL_STYLE);
    for(int j = 0; j < StyleCount; j++)
    SetWindowLong(listctl, GWL_STYLE, dwStyle | style[j]);

    DWORD styles = listctl.GetExtendedStyle();

    for(int i = 0; i < ExtendStyleCount; i++)
    {
    styles |= ExtendStyle[i];
    }
    listctl.SetExtendedStyle(styles);
    }void CMyDlg::InsertColumns(CListCtrl &ListCtl, int ColumnCount, int ColumnNameSymbol[], int ColumnWidth[])
    {
    LV_COLUMN  lvc;
    char       szTemp[200];
    for(int i = 0;  i < ColumnCount; i++)
    {
    lvc.mask     = LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM;
    lvc.iSubItem = i;
    lvc.cx       = ColumnWidth[i];
    LoadString(AfxGetApp()->m_hInstance, ColumnNameSymbol[i], szTemp, 200);
    lvc.pszText  = szTemp; 
    ListView_InsertColumn(ListCtl, i, &lvc);
    }
    }void CMyDlg::InitListCtrl()
    {
    static int ColumnWidth[5] =  
    {
    50, 70, 70, 70,  100,
    };
    static int ColumnNameSymbol[CARDLIST_COL_COUNT] = 
    {
        IDS_CARDNO,IDS_CARDINDEX,IDS_CARDTYPE, IDS_ENABLE,IDS_SERIAL,
    };

    DWORD style[1]       = {LVS_REPORT};
    DWORD ExtendStyle[2] = {LVS_EX_FULLROWSELECT, LVS_EX_GRIDLINES}; SetListCtlStyle(m_CardList, style, 1, ExtendStyle, 2);
    InsertColumns(m_CardList, CARDLIST_COL_COUNT, ColumnNameSymbol, ColumnWidth); return;
    }
      

  4.   

    LVS_REPORT  自己改LIST控件有三种方式属性
      

  5.   

    lvcolumn.cx=rect.Width()/3;你的rect 没有初始化,你先改成:lvcolumn.cx= 100; 试试。
      

  6.   

    呵呵,晕,没仔细看我说的话
    这样,在for前加一句:
    pmyListCtrl->ModifyStyle(0,LVS_REPORT);
      

  7.   

    BOOL CListCtrlDlg::OnInitDialog()
    {
     CDialog::OnInitDialog();// 设置listctrl为报表形式
    CListCtrl* pmyListCtrl=(CListCtrl*)GetDlgItem(IDC_LIST1);
    DWORD dwStyle = GetWindowLong(pmyListCtrl->m_hWnd, GWL_STYLE);
    SetWindowLong(pmyListCtrl->m_hWnd, GWL_STYLE, dwStyle | LVS_REPORT);// 设置listctrl 为可以整行选择和网格
    DWORD styles = pmyListCtrl->GetExtendedStyle();
    pmyListCtrl->SetExtendedStyle(styles | LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES);//... other initializations...
    return TRUE;
    }