游戏安全实验室 首页 技术入门 查看内容

 阅读目录

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。


*转载请注明来自游戏安全实验室(GSLAB.QQ.COM)

分享到:
踩0 赞0

收藏

上一篇:使用MFC开发界面程序

下一篇:创建MFC工程(基于VS 2013)

最新评论
B Color Image Link Quote Code Smilies

发表评论