我在一个基于对话框的程序中加了一个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);
}
我于是在对话框的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);
}
pmyListCtrl->ModifyStyle(0,LVS_REPORT,0)
第二:第一项(i=0)的时候是不能有LVCF_SUBITEM的标志的。
更改后如下:
CListCtrl* pmyListCtrl=(CListCtrl*)GetDlgItem(IDC_LIST1);
TCHAR rgtsz[3][10]={_T("ÒѲⰸÀý"),_T("²âÊÔ״̬"),_T("²âÊÔʱ¼ä")};
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;
{
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;
}
这样,在for前加一句:
pmyListCtrl->ModifyStyle(0,LVS_REPORT);
{
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;
}