樹形控件添加學生信息應用——MFC基於對話框的應用(4)

新建一個基於mfc對話框的程序:

設計界面爲:

如果List Contrl 的控件不是以上格式,而是

則右鍵屬性,點開View選擇Report(報表)即可。

爲九個方框添加變量併爲每個控件修改符合(自己喜歡)的ID:

在主程序的cpp文件下,找到OnInitDialog函數爲樹形控件和可視化列表框控件設置風格和初始值

添加代碼如下:

CString strFont[3] = { _T("一年級"),_T("二年級"),_T("三年級") };//年級的下拉設置
	for (int i = 0; i < 3; i++)
	{
		m_Grade.InsertString(i, strFont[i]);
	}

	this->m_TreeCon.ModifyStyle(0, TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT);
	root = this->m_TreeCon.InsertItem(_T("年級"));

	root1 = this->m_TreeCon.InsertItem(_T("一年級"), root);
	root2 = this->m_TreeCon.InsertItem(_T("二年級"), root);
	root3 = this->m_TreeCon.InsertItem(_T("三年級"), root);
	//this->m_Grade.SetCurSel(0);

	m_Inquiry.SetExtendedStyle(LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT | LVS_EX_ONECLICKACTIVATE);
	m_Inquiry.InsertColumn(0, _T("姓名"), LVCFMT_LEFT, 40);
	m_Inquiry.InsertColumn(1, _T("學號"), LVCFMT_LEFT, 80);
	m_Inquiry.InsertColumn(2, _T("年級"), LVCFMT_LEFT, 80);
	m_Inquiry.InsertColumn(3, _T("Sub1"), LVCFMT_LEFT, 80);
	m_Inquiry.InsertColumn(4, _T("Sub2"), LVCFMT_LEFT, 80);
	m_Inquiry.InsertColumn(5, _T("Sub3"), LVCFMT_LEFT, 80);

 雙擊Add按鈕,添加代碼:

(注意:添加代碼必須包含在UpdateData(true);和UpdateData(false);之間,否則會進行錯誤的數據添加)

void COOPEx51Dlg::OnBnClickedButton2()
{
	// TODO: 在此添加控件通知處理程序代碼
	UpdateData(true);
	CString grade;
	switch (this->m_Grade.GetCurSel())
	{
	case 0:
		this->m_TreeCon.InsertItem(this->m_Name, root1);
		this->m_TreeCon.Expand(root, TVE_EXPAND);
		this->m_TreeCon.Expand(root1, TVE_EXPAND);
		grade = "一年級";
		break;
	case 1:
		this->m_TreeCon.InsertItem(this->m_Name, root2);
		this->m_TreeCon.Expand(root, TVE_EXPAND);
		this->m_TreeCon.Expand(root2, TVE_EXPAND);
		grade = "二年級";
		break;
	case 2:
		this->m_TreeCon.InsertItem(this->m_Name, root3);
		this->m_TreeCon.Expand(root, TVE_EXPAND);
		this->m_TreeCon.Expand(root3, TVE_EXPAND);
		grade = "三年級";
		break;
	}

	
        //存在另一個類裏面
	stu[count].name = this->m_Name;
	stu[count].id = this->m_ID;
	stu[count].grade = grade;
	stu[count].sub1 = this->m_Sub1;
	stu[count].sub2 = this->m_Sub2;
	stu[count].sub3 = this->m_Sub3;
	stu[count].average = (this->m_Sub1 + this->m_Sub2 + this->m_Sub3)/3.0;
	count++;
	////更新日誌

	CTime CurrentTime = CTime::GetCurrentTime();
	CString strTime;
	strTime.Format(_T("%d:%d:%d"), CurrentTime.GetHour(), CurrentTime.GetMinute(), CurrentTime.GetSecond());

	CString log;
	log = "";
	log += strTime;
	log += " DATA ADD";

	this->m_Log.AddString(log);
	UpdateData(false);
}

  雙擊ReSet按鈕,添加代碼:

	m_Grade.ResetContent();
	CString strFont[3] = { _T("一年級"),_T("二年級"),_T("三年級") };
	for (int i = 0; i < 3; i++)
	{
		m_Grade.InsertString(i, strFont[i]);
	}

	this->m_ID = "";
	this->m_Name = "";
	this->m_Sub1 = 0.0;
	this->m_Sub2 = 0.0;
	this->m_Sub3 = 0.0;

	//增加日誌信息

	CTime CurrentTime = CTime::GetCurrentTime();

	CString strTime;
	strTime.Format(_T("%d:%d:%d"), CurrentTime.GetHour(), CurrentTime.GetMinute(), CurrentTime.GetSecond());

	CString log;
	log = "";
	log += strTime;
	log += " DATA RESET";

	m_Log.AddString(log);
	UpdateData(false);

 

雙擊Clear按鈕,添加代碼:

void COOPEx51Dlg::OnBnClickedClear()
{
	// TODO: 在此添加控件通知處理程序代碼
	CString log;
	log = "";
	this->m_Log.ResetContent();
}

 最重要的是:爲樹形控件添加雙擊監聽函數和選擇改變事件監聽函數

添加雙擊監聽函數:

右鍵單擊樹形控件,選擇添加事件NM_DBLCLK:

編輯代碼爲:

void COOPEx51Dlg::OnNMDblclkTree1(NMHDR *pNMHDR, LRESULT *pResult)
{
	// TODO: 在此添加控件通知處理程序代碼
	HTREEITEM temp = this->m_TreeCon.GetSelectedItem();
	CString text = this->m_TreeCon.GetItemText(temp);
	for (int i = 0; i < count; i++)
	{
		if (text == stu[i].name)
		{
			this->m_Inquiry.InsertItem(0, stu[i].name);
			this->m_Inquiry.SetItemText(0, 1, stu[i].id);
			this->m_Inquiry.SetItemText(0, 2, stu[i].grade);
			CString str;
			str.Format(_T("%lf"), stu[i].sub1);
			this->m_Inquiry.SetItemText(0, 3, str);
			str.Format(_T("%lf"), stu[i].sub2);
			this->m_Inquiry.SetItemText(0, 4, str);
			str.Format(_T("%lf"), stu[i].sub3);
			this->m_Inquiry.SetItemText(0, 5, str);
			break;
		}
	}

	//增加日誌信息

	CTime CurrentTime = CTime::GetCurrentTime();
	CString strTime;
	strTime.Format(_T("%d:%d:%d"), CurrentTime.GetHour(), CurrentTime.GetMinute(), CurrentTime.GetSecond());
	CString log;
	log = "";
	log += strTime;
	log += " TREE DOUBLE CLICKED";
	this->m_Log.AddString(log);
	*pResult = 0;
}

添加選擇改變事件監聽函數:

右鍵單擊樹形控件,選擇添加事件TVN_ITEMEXPANDING:

平均分的顯示:單擊學生信息時,點擊平均成績可顯示該生的三科成績的平均分:

爲List Contrl 添加事件LVN_ITEMCHANGED:

雙擊"平均分"按鈕,添加代碼:

int i = m_Inquiry.GetSelectionMark();//獲得選中List Contrl行的行標
	CString s1, s2, s3;
	s1 = m_Inquiry.GetItemText(i, 3); //i是行,j是列。m_Inquiry是個list control 對象
	s2 = m_Inquiry.GetItemText(i, 4);
	s3 = m_Inquiry.GetItemText(i, 5);
	double a = _wtof(s1.GetBuffer());   //轉換爲double類型的數據
	double b = _wtof(s2.GetBuffer());
	double c = _wtof(s3.GetBuffer());
	double d = (a + b + c)/3;            //進行計算

	CString str;
	str.Format(_T("%lf"), d);            //再轉換
	CString SS;
	SS = "";
	SS += "平均成績爲:";
	SS += str;
	MessageBox(SS);

(該樹形控件顯示實驗就此完成,如果該篇bolg對大家有幫助的話,別忘了對BZ進行打賞噢~~~~~(其實,點贊就好了~~~~))

 

 

 

最後是BZ參考和查詢的一些博客和鏈接等資料:

CString 轉換爲 double 類型

MFC的list control控件,如何得到某一行某列的字符串內容?

VC簡單入門系列實驗及知識點總結

MFC ListContrl 的使用

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