【簡單實現顯示功能】
先上圖,基本功能實現就是這樣一個狀態,後面我會在陸續添加一些屬性及功能,先記錄一下實現的步驟
1.新建一個工程文件,在界面上新建一個“List Control”控件,首先把它的“View”設置爲“Report(報表)”模式,這個很重要,要不然到時候什麼也不會顯示,也不會報錯
2.爲這個“List Control”控件關聯“CListCtrl”類型變量m_StuInformation,然後在這個工程文件的“*Dlg.cpp”文件的初始化函數“OnInitDialog()”中添加如下代碼(如果是在原有的工程文件上又新建的界面的話,可以直接把原工程文件“*Dlg.cpp”裏面的“OnInitDialog()”初始化函數複製粘貼一份到自己新建的這個Dialog界面的“*Dlg.cpp”文件中,把會報錯的一些語句直接刪除即可)
m_StuInformation.SetExtendedStyle(LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES); // 整行選擇、網格線
m_StuInformation.InsertColumn(0, _T("學號"), LVCFMT_LEFT, 100); // 插入第2列的列名
m_StuInformation.InsertColumn(1, _T("姓名"), LVCFMT_LEFT, 100); // 插入第3列的列名
m_StuInformation.InsertColumn(2, _T("性別"), LVCFMT_LEFT, 100); // 插入第4列的列名
m_StuInformation.InsertColumn(3, _T("語文"), LVCFMT_LEFT, 100); // 插入第5列的列名
m_StuInformation.InsertColumn(4, _T("數學"), LVCFMT_LEFT, 100); // 插入第6列的列名
m_StuInformation.InsertColumn(5, _T("英語"), LVCFMT_LEFT, 100); // 插入第7列的列名
////設置行高
CImageList m_l;
m_l.Create(1,25,TRUE|ILC_COLOR32,1,0); //設置表格的高度
m_StuInformation.SetImageList(&m_l,LVSIL_SMALL);
////設置字體
CFont m_font;
m_font.CreatePointFont(140, "新宋體"); //設置標題欄的高度及字體
m_StuInformation.SetFont(&m_font);
m_StuInformation.SetColumnWidth (0,120); //設置列寬
m_StuInformation.SetColumnWidth (1,120);
m_StuInformation.SetColumnWidth (2,80);
m_StuInformation.SetColumnWidth (3,80);
m_StuInformation.SetColumnWidth (4,80);
m_StuInformation.SetColumnWidth (5,80);
for (int i=0;i<1;i++)
{ //不斷獲取下一組結果
Str_StuId ="1002020001";
Str_Name = "王一";
Str_Gene = "男";
Str_Chinese.Format(_T("%d"), 120);
Str_Math.Format(_T("%d"), 121);
Str_English.Format(_T("%d"), 122);
m_StuInformation.InsertItem(i, _T("")); // 插入行
m_StuInformation.SetItemText(i, 0, Str_StuId); // 設置第2列(學號)
m_StuInformation.SetItemText(i, 1, Str_Name); // 設置第3列(姓名)
m_StuInformation.SetItemText(i, 2, Str_Gene); // 設置第4列(性別)
m_StuInformation.SetItemText(i, 3, Str_Chinese); // 設置第5列(語文)
m_StuInformation.SetItemText(i, 4, Str_Math); // 設置第6列(數學)
m_StuInformation.SetItemText(i, 5, Str_English); // 設置第7列(英語)
list_row++; //list_row爲list Ctrl表格中顯示的數據的行數,便於後期操作,在頭文件中定義
}
3.其中把變量m_StuInformation,list_row及Str_StuId,Str_Name,Str_Gene,Str_Chinese,Str_Math,Str_English定義在stdafx.h和stdafx.cpp中,定義爲整個工程文件的全局變量,方便功能擴展。
【右鍵單擊彈出菜單,實現增加、修改、刪除數據】
1.首先新建一個菜單,如下
2.爲表格添加右鍵單擊菜單響應程序,
3.點擊“添加編輯”,自動添加程序框架,如下
在程序中添加如下代碼:
void CListCtrlDlg::OnNMRClickList1(NMHDR *pNMHDR, LRESULT *pResult)
{
LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR);
// TODO: 在此添加控件通知處理程序代碼
NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
if (pNMListView->iItem != -1)
{
CPoint pt;
GetCursorPos(&pt);
CMenu menu;
menu.LoadMenu(IDR_MENU1);
CMenu *popmenu;
popmenu = menu.GetSubMenu(0);
popmenu->TrackPopupMenu(TPM_RIGHTBUTTON, pt.x, pt.y, this);
}
*pResult = 0;
}
再爲每個右鍵後的菜單選項添加事件處理程序
點擊添加編輯後的程序如下:
增加方法及程序:
實現方法:點擊“增加”後,彈出一個“增加信息”界面,輸入信息點擊確定後,在原來的界面顯示出來
1.首先新建一個dialog文件,併爲其添加類
2.在主程序ListCtrlDlg.cpp中包含剛纔添加的“添加信息”界面的類文件的頭文件,並在剛纔的增加對應的事件處理程序中添加如下代碼:
////增加
void CListCtrlDlg::OnFile32772()
{
// TODO: 在此添加命令處理程序代碼
CAddDlg m;
m.DoModal();
}
實現效果如下:
在“添加信息”界面上添加如下所示的控件,選中控件,右鍵“類嚮導”爲文本編輯框關聯變量如下:
在“確定”按鈕中添加如下代碼:
void CAddDlg::OnBnClickedOk()
{
// TODO: 在此添加控件通知處理程序代碼
UpdateData(TRUE);
CDialogEx::OnOK();
//////將增加的數據顯示到listCtrl中
Str_StuId = m_Add_id;
Str_Name = m_Add_name;
Str_Gene = m_Add_gene;
Str_Chinese = m_Add_Chinese;
Str_Math = m_Add_math;
Str_English = m_Add_English;
m_StuInformation.InsertItem(list_row, _T("")); // 插入行
m_StuInformation.SetItemText(list_row, 0, Str_StuId); // 設置第2列(學號)
m_StuInformation.SetItemText(list_row, 1, Str_Name); // 設置第3列(姓名)
m_StuInformation.SetItemText(list_row, 2, Str_Gene); // 設置第4列(性別)
m_StuInformation.SetItemText(list_row, 3, Str_Chinese); // 設置第5列(語文)
m_StuInformation.SetItemText(list_row, 4, Str_Math); // 設置第6列(數學)
m_StuInformation.SetItemText(list_row, 5, Str_English); // 設置第7列(英語)
list_row++; //list_row爲list Ctrl表格中顯示的數據的行數,便於後期操作,在頭文件中定義
}
實現效果如下:
刪除程序如下:
////刪除
void CListCtrlDlg::OnFile32774()
{
// TODO: 在此添加命令處理程序代碼
int i, iState;
int nItemSelected = m_StuInformation.GetSelectedCount();
int nItemCount = m_StuInformation.GetItemCount();
if (nItemSelected < 1)
return;
for (i = nItemCount - 1; i >= 0; i--)
{
iState = m_StuInformation.GetItemState(i, LVIS_SELECTED);
if (iState != 0)
{
m_StuInformation.DeleteItem(i);
}
}
}
參考鏈接:MFC實例:[4] List Control 控件實例