MFC ListControl用法

时间:2023-03-09 14:50:07
MFC ListControl用法

http://blog.csdn.net/lovton/article/details/6527208

1.建立一个对象m_LogList

步骤:在对话listcontrol控件右键点击添加变量-》类别Control->变量类型CListCtrl-》变量名m_LogList-》完成。

2.listcontrol// 设置扩展风格l风格

在OnInitDialog()函数内添加下面代码:

DWORD dwStyle = m_LogList.GetExtendedStyle(); 
dwStyle |= LVS_EX_FULLROWSELECT;//鼠标选中某行使整行高亮(只适用与属性为report 风格的listctrl )
dwStyle |= LVS_EX_GRIDLINES;// 列表有网格线(只适用与report 风格的listctrl )
m_LogList.SetExtendedStyle(dwStyle); // 设置扩展风格

3.插入数据

插入列头:

int nIndex = 0;
m_LogList.InsertColumn(nIndex++, _T("序号"), LVCFMT_CENTER,60);

m_LogList.InsertColumn(nIndex++, _T("日志类型"), LVCFMT_CENTER,80);

插入行头:m_LogList.InsertItem(i, Int32ToCString(m_pHQReadLogInfo[i].nNo));//把整型转换为字符串函数(Int32ToCString),i为第几行,从0开始。

插入列表中的内容:    m_list.SetItemText(i, j, "jacky");// 设置其它列数据,i,j分别表示第i行和第j列,i和j分别从0开始,如果已经插入了表头,j就从1开始。“jacky”报错,那么在属性中字符集改为“使用多字节符集”

在具体插入哪行:http://blog.csdn.net/lovton/article/details/6527208

4.点击右键出现菜单。

具体步骤:右键点击项目名-》添加-》资源-》Menu,建立主菜单。

添加函数,在对话框中右键点击listcontrol-》类向导-》消息-》WM_CONTEXTMENU->函数名称(OnContextMenu)

函数添加如下内容:注意 IDR_MENU1为菜单名 IDC_LIST1 listcontrol的ID名

void CJGHQLOGTOOLDlg::OnContextMenu(CWnd* pWnd, CPoint point)
{
// TODO: 在此处添加消息处理程序代码
CWnd* pCtl = GetDlgItem(IDC_LIST1); if (pWnd == pCtl)
{
m_menu.LoadMenu(IDR_MENU1);
CMenu *pPopup;
pPopup = m_menu.GetSubMenu(); //获得子菜单指针 pPopup->EnableMenuItem(ID_TOEXCEL,MF_BYCOMMAND|MF_ENABLED); //允许菜单项使用
pPopup->TrackPopupMenu(TPM_LEFTALIGN|TPM_RIGHTBUTTON,point.x,point.y,this); //显示弹出菜单,参数依次为(鼠标在菜单左边|跟踪右键,x,y,this)
pPopup->Detach();
m_menu.DestroyMenu();
}
}

5.删除数据

  m_LogList.DeleteAllItems();或者

while(m_LogList.DeleteItem(0));

6. 得到点击右键的listctrl的行列号,左键类似

步骤:右键点击-》添加事件处理程序-》消息类型选择NM_RCLICK,对应函数处理名称为OnNMRClickList1

出现函数添加内容:

  

void CJGHQLOGTOOLDlg::OnClickList1(NMHDR* pNMHDR, LRESULT* pResult)
{
// 方法一:
/*
DWORD dwPos = GetMessagePos();
CPoint point( LOWORD(dwPos), HIWORD(dwPos) ); m_list.ScreenToClient(&point); LVHITTESTINFO lvinfo;
lvinfo.pt = point;
lvinfo.flags = LVHT_ABOVE; int nItem = m_list.SubItemHitTest(&lvinfo);
if(nItem != -1)
{
CString strtemp;
strtemp.Format("单击的是第%d行第%d列", lvinfo.iItem, lvinfo.iSubItem);
AfxMessageBox(strtemp);
}
*/ // 方法二:
/*
NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
if(pNMListView->iItem != -1)
{
CString strtemp;
strtemp.Format("单击的是第%d行第%d列",
pNMListView->iItem, pNMListView->iSubItem);
AfxMessageBox(strtemp);
}
*/
*pResult = ;
}

7.在点击子菜单插入对话框

步骤:1.点击项目名字-》添加资源-》Dialog

2.MeNU菜单中点击右键添加事件处理程序-》COMMAND-》添加编辑

添加如下内容: void CJGHQLOGTOOLDlg::On132778()

{
// TODO: 在此添加命令处理程序代码
//int i,temp,k;
cDlgCheck dlg;
dlg.DoModal();
TRACE(dlg.m_strValue);
}

8.listcontrol列表数据实现分页功能

思路:添加俩个按钮上一页和下一页,把数据用结构体存起来,重复的删除和插入,就ok了

遇到慢慢更新。。。。