新建一個基於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參考和查詢的一些博客和鏈接等資料: