VS MFC之List Control控件的使用

【簡單實現顯示功能】

先上圖,基本功能實現就是這樣一個狀態,後面我會在陸續添加一些屬性及功能,先記錄一下實現的步驟

 

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 控件實例

                MFC List Control整行選中及其他相關技巧

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章