1 基本设置
右键属性,View设置为Report
添加标题,删除原始数据,设置字体,设置行高
cpp
//删除数据
myList.DeleteAllItems();
while (myList.DeleteColumn(0)) {}
// 设置报表风格
LONG lStyle = GetWindowLong(myList.m_hWnd, GWL_STYLE);
lStyle &= ~LVS_TYPEMASK;
lStyle |= LVS_REPORT;
SetWindowLong(myList.m_hWnd, GWL_STYLE, lStyle);
// 配置扩展样式
DWORD dwExStyle = LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES;
myList.SetExtendedStyle(dwExStyle);
/*CFont f;
f.CreatePointFont(160,"仿宋");
myList.SetFont(&f);*/
//设置行高
CImageList m_l;
m_l.Create(1,38,TRUE|ILC_COLOR32,1,0); //38是行高
myList.SetImageList(&m_l,LVSIL_SMALL);
// 添加列标题
//行号
myList.InsertColumn(0, _T("行号"), LVCFMT_CENTER, 60);
//类型:1、2字节,itype,空或者为-1,-2,...,-n
myList.InsertColumn(1, _T("类型"), LVCFMT_CENTER, 60);
//结点名称: 4个A6,
myList.InsertColumn(2, _T("结点1"), LVCFMT_CENTER, 80);
myList.InsertColumn(3, _T("结点2"), LVCFMT_CENTER, 80);
myList.InsertColumn(5, _T("结点3"), LVCFMT_CENTER, 70);
myList.InsertColumn(6, _T("结点4"), LVCFMT_CENTER, 70);
2 添加数据
cpp
value.Format(" %d",it->first);
//插入最后一行,并设置0列数
int nRow = myList.InsertItem(myList.GetItemCount(), _T(value));
//设置插入行的后几列数据
for(UINT j=0;j<myVector.size();++j)
{
value=myVector[j].Trim();
myList.SetItemText(nRow, 1+j, _T(value));
}
3 设置斑马效果(不同行不同颜色)
添加Customdraw事件
cpp
void DialogParseAtp::OnNMCustomdrawList1(NMHDR *pNMHDR, LRESULT *pResult)
{
NMLVCUSTOMDRAW* pLVCD = reinterpret_cast<NMLVCUSTOMDRAW*>( pNMHDR );
*pResult = CDRF_DODEFAULT;
if ( CDDS_PREPAINT == pLVCD->nmcd.dwDrawStage )
{
*pResult = CDRF_NOTIFYITEMDRAW;
}
else if ( CDDS_ITEMPREPAINT == pLVCD->nmcd.dwDrawStage )
{
*pResult = CDRF_NOTIFYSUBITEMDRAW;
}
else if ( (CDDS_ITEMPREPAINT | CDDS_SUBITEM) == pLVCD->nmcd.dwDrawStage )
{
COLORREF clrNewTextColor, clrNewBkColor;
int nItem = static_cast<int>( pLVCD->nmcd.dwItemSpec );
POSITION pos = myList.GetFirstSelectedItemPosition();
int index = myList.GetNextSelectedItem(pos);
if (index == nItem)//如果要刷新的项为当前选择的项,则将文字设为白色,背景色设为蓝色
{
clrNewTextColor = RGB(255,255,255); //Set the text to white
clrNewBkColor = RGB(49,106,197); //Set the background color to blue
}
else if (nItem % 2) //奇偶行隔行变色
{
clrNewTextColor = RGB(0,0,255); //set the text black
clrNewBkColor = RGB(250,250,245); //leave the background color white
}
else
{
clrNewTextColor = RGB(0,0,0); //set the text black
clrNewBkColor = RGB(255,255,255); //leave the background color white
}
pLVCD->clrText = clrNewTextColor;
pLVCD->clrTextBk = clrNewBkColor;
*pResult = CDRF_DODEFAULT;
}
}
4 设置双击修改单元格(本质是移动创建的编辑框,双击时定位显示,回车写入,其他时候隐藏)
先添加控件,定义变量,设置回车响应函数(默认是窗口的OK按钮,CTRL+D编号为1的按钮)
Default Button-->True ;Visible-->False
CEdit myEdit;
int m_Col;
int m_Row;
cpp
void DialogParseAtp::OnBnClickedOk()
{
if(m_Row >=0 && m_Col >=0) // 选择子项
{
CString mystr;
myEdit.GetWindowText(mystr);
mystr=mystr.Trim();
myList.SetItemText(m_Row, m_Col,mystr.GetBuffer());
myEdit.ShowWindow(SW_HIDE);
m_Row=-1;
m_Col=-1;
AfxMessageBox("修改成功!");
}
}
然后 添加双击事件
cpp
void DialogParseAtp::OnNMDblclkList1(NMHDR *pNMHDR, LRESULT *pResult)
{
LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR);
// 获取选中位置
m_Row = pNMItemActivate->iItem; // 行号
m_Col = pNMItemActivate->iSubItem; // 列号
myEdit.ShowWindow(SW_HIDE);
myTxtEdit.SetWindowText("");
if(m_Row >=0 && m_Col >=1) // 选择子项
{
CRect rc;
// 获取单元格矩形区域
myList.GetSubItemRect(m_Row, m_Col, LVIR_LABEL, rc);
// 创建并显示编辑控件
myEdit.SetParent(&myList);
myEdit.MoveWindow(rc);
myEdit.SetWindowText(myList.GetItemText(m_Row, m_Col));
myEdit.ShowWindow(SW_SHOW);
myEdit.SetFocus();
}
*pResult = 0;
}