建立基于对话框的应用程序,新建一个列表控件List Ctrl和按钮控件,将列表控件的属性View 改为Report,并添加变量m_listctrl
在Dlg.cpp的初始化区域添加代码:
// TODO: 在此添加额外的初始化代码
SetIcon(m_hIcon, TRUE); // 设置大图标
SetIcon(m_hIcon, FALSE); // 设置小图标
// 添加标题
m_listctrl.InsertColumn(0, L"学号");
m_listctrl.InsertColumn(1, L"姓名");
m_listctrl.InsertColumn(2, L"性别");
m_listctrl.InsertColumn(3, L"年龄");
// 设置标题宽度
m_listctrl.SetColumnWidth(0, 180);
m_listctrl.SetColumnWidth(1, 120);
m_listctrl.SetColumnWidth(2, 80);
m_listctrl.SetColumnWidth(3, 80);
// 设置列表风格:整行选择|网格
m_listctrl.SetExtendedStyle(LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES);
// 添加数据
// 循环添加
for (int i = 0; i < 5; i++){
int n = m_listctrl.InsertItem(0, L"ECJTU20132110080122");
m_listctrl.SetItemText(n, 1, L"郝水");
m_listctrl.SetItemText(n, 2, L"男");
m_listctrl.SetItemText(n, 3, L"25");
}
int n = m_listctrl.InsertItem(0, L"ECJTU20132002202123");
m_listctrl.SetItemText(n, 1, L"吴志向");
m_listctrl.SetItemText(n, 2, L"女");
m_listctrl.SetItemText(n, 3, L"22");
// 设置背景颜色
m_listctrl.SetBkColor(RGB(155, 255, 55));
// 设置文本背景颜色
m_listctrl.SetTextBkColor(RGB(255, 199, 199));
// 设置文本颜色
m_listctrl.SetTextColor(RGB(60, 60, 255));
运行效果:
编辑按钮,双击按钮来编写代码:
void CMFC_ListDlg::OnBnClickedButton1()
{
// TODO: 在此添加控件通知处理程序代码
// 设置可选中多行
m_listctrl.SetExtendedStyle(LVS_EX_CHECKBOXES);
// 提示字符串
CString str = L"";
CString num = L"";
for (int i = 0; i < m_listctrl.GetItemCount(); i++){
if (m_listctrl.GetItemState(i, LVIS_SELECTED) == LVIS_SELECTED || m_listctrl.GetCheck(i)){
num.Format(L" %d ", i);
str += num;
}
}
str = L"第" + str + L"行被选中";
AfxMessageBox(str);
}
运行结果:点击选择数据,选中数据项,再点击选择数据
添加菜单选项:
在资源视图里添加资源,添加菜单
双击列表控件,来编辑代码:
void CMFC_ListDlg::OnLvnItemchangedList1(NMHDR *pNMHDR, LRESULT *pResult)
{
LPNMLISTVIEW pNMLV = reinterpret_cast<LPNMLISTVIEW>(pNMHDR);
// TODO: 在此添加控件通知处理程序代码
NM_LISTVIEW *pNMListView = (NM_LISTVIEW*)pNMHDR;
if (pNMListView->iItem != -1){
DWORD dwPos = GetMessagePos();
CPoint point(LOWORD(dwPos), HIWORD(dwPos));
CMenu menu;
VERIFY(menu.LoadMenu(IDR_MENU1));
CMenu *popup = menu.GetSubMenu(0);
ASSERT(popup != NULL);
popup->TrackPopupMenu(TPM_LEFTALIGN + TPM_RIGHTBUTTON, point.x, point.y, this);
}
*pResult = 0;
}
获取指定列的数据:
void CListWarDlg::OnLvnItemchangedList1(NMHDR *pNMHDR, LRESULT *pResult)
{
LPNMLISTVIEW pNMLV = reinterpret_cast<LPNMLISTVIEW>(pNMHDR);
// TODO: 在此添加控件通知处理程序代码
m_list.SetExtendedStyle(LVS_EX_CHECKBOXES | LVS_EX_FULLROWSELECT);
CString str_sex;
CString str_pos;
NM_LISTVIEW *pNMListView = (NM_LISTVIEW*)pNMHDR;
if (pNMListView->iItem != -1){
// 获取性别
//POSITION pos = m_list.GetFirstSelectedItemPosition(); // 可获取第一行的记录
str_sex = m_list.GetItemText(pNMListView->iItem, 2);
str_pos.Format(L"pos = %d,sex=", m_list.GetNextItem(-1, LVNI_ALL | LVNI_SELECTED));
SetDlgItemText(IDC_EDIT, str_pos+str_sex);
DWORD dwPos = GetMessagePos();
CPoint point(LOWORD(dwPos), HIWORD(dwPos));
CMenu menu;
VERIFY(menu.LoadMenuW(IDR_MENU1));
CMenu *popup = menu.GetSubMenu(0);
ASSERT(popup != NULL);
popup->TrackPopupMenu(TPM_LEFTALIGN + TPM_RIGHTBUTTON, point.x, point.y, this);
}
*pResult = 0;
}