阅读目录
List Control控件使用
发布于:2016-6-12 18:21 | 152540次阅读 作者: 管理员 | 原作者: TP | 来自: 原创
微软MFC中的List Control控件能以列表的方式显示数据。以下叙述该控件的使用方法。本文以Visual Studio2013为开发平台展开叙述。 在需要以报表形式显示数据时,List Control控件通常是最好的选择,许多专用的数据报表控件,也是在它的基础上派生而来。列表控件可以由多个子项组成,并且支持大图标、小图标、列表和报表4种方式显示信息。
一、选定List Control控件 新建一个对话框类型的MFC工程,打开工具箱,将如下图红框里的控件拖动至界面上。
效果显示如下图。
右键单击控件,选择属性。在属性栏中可以更改控件的属性,如下图。
二、数据显示 为控件添加变量,右键单击控件,选择“添加变量”,变量名为m_objListctrlMain。 控件显示如下图。
2.1设置控件格式 在OnInitDialog函数中添加以下代码,可以进行基本的控件格式设置。更多复杂的设置代码可参考MSDN。 m_objListctrlMain.ModifyStyle(0, LVS_REPORT); m_objListctrlMain.SetExtendedStyle(m_objListctrlMain.GetExtendedStyle() | LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT);
2.2插入列 插入两列 设置第一列的属性并插入列表 LVCOLUMN stColId = {0}; stColId.mask = LVCF_FMT | LVCF_TEXT | LVCF_WIDTH; stColId.fmt = LVCFMT_LEFT | LVCFMT_IMAGE; stColId.cx = 120; stColId.pszText = L"ID"; m_objListctrlMain.InsertColumn(0, &stColId);
设置第二列的属性并插入列表 LVCOLUMN stColName = {0}; stColName.mask = LVCF_FMT | LVCF_TEXT | LVCF_WIDTH; stColName.fmt = LVCFMT_LEFT; stColName.cx = 100; stColName.pszText = L"Name"; m_objListctrlMain.InsertColumn(1, &stColName);
2.3插入行 以下示例代码先获取列表的行数,然后在最后一行插入记录值。 int iRowIndex = m_objListctrlMain.GetItemCount(); LV_ITEM stItemNew; stItemNew.mask = LVIF_TEXT; stItemNew.iItem = iRowIndex; //行数 stItemNew.iSubItem = 0; stItemNew.pszText = L"New Data"; //第一列 m_objListctrlMain.InsertItem(&stItemNew); 也可以在列表头部和中间插入一行记录值。
2.4设置数据项的值 m_objListctrlMain.SetItemText(iRowIndex, 1, L"reily");
2.5删除行 m_objListctrlMain.DeleteItem(1);
更多详细的数据显示操作可参考MSDN。
三、控件的事件处理函数 可以编写List Control控件的事件处理函数,用于响应各个操作事件。 在控件的属性栏中选择“控件事件”,如下图红框内的闪电图标。事件栏会列出该控件所有的事件。点击事件项右边的空白栏,可以自动生成该事件的处理函数的框架代码,如下图。
下面以鼠标左键单击、右键单击事件为例,具体叙述控件事件处理函数的编写。 3.1鼠标左键单击的事件处理函数 在该处理函数中实现一个功能,左键单击一个列表项后,会在编辑框控件里显示该列表项的值。 从工具栏中拖动一个Edit Control控件至对话框中,设置其控件ID为IDC_EDIT_ITEMVALUE。 直接在生成的事件处理函数框架里添加新功能的代码,如下。 void CListTestDlg::OnNMClickListMain(NMHDR *pNMHDR, LRESULT *pResult) { LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR); // TODO: 在此添加控件通知处理程序代码 *pResult = 0;
CString strItemValue; NMLISTVIEW *pNMListView = (NMLISTVIEW*)pNMHDR; if (-1 != pNMListView->iItem) { strItemValue = m_objListctrlMain.GetItemText(pNMListView->iItem, pNMListView->iSubItem);
SetDlgItemText(IDC_EDIT_ITEMVALUE, strItemValue); } }
效果如下图所示
3.2鼠标右键单击的事件处理函数 在该处理函数中实现一个功能,右键单击一行数据后,弹出菜单栏,选中“delete”删除该行。 打开MFC工程的资源视图,添加一个菜单资源,设置其资源ID为IDR_MENU_MAIN,添加一个菜单项,设置其控件ID为ID_MENU_DELETE。 直接在生成的事件处理函数框架里添加新功能的代码。 void CListTestDlg::OnNMRClickListMain(NMHDR *pNMHDR, LRESULT *pResult) { LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR); // TODO: 在此添加控件通知处理程序代码 *pResult = 0;
NMLISTVIEW* pNMListView = (NMLISTVIEW*)pNMHDR; if (-1 != pNMListView->iItem) { DWORD dwPos = GetMessagePos(); CPoint objMenuPoint(LOWORD(dwPos), HIWORD(dwPos));
CMenu objMainMenu; VERIFY(objMainMenu.LoadMenu(IDR_MENU_MAIN)); CMenu* objPopMenu = objMainMenu.GetSubMenu(0); ASSERT(objPopMenu != NULL); UINT uiMenuId = objPopMenu->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON | TPM_RETURNCMD, objMenuPoint.x, objMenuPoint.y, this); switch (uiMenuId) { case ID_MENU_DELETE: m_objListctrlMain.DeleteItem(pNMListView->iItem); break;
} } }
效果如下图所示。
更多事件处理函数可以参考MSDN。 |

最新评论
发表评论