MFC——第四次上机

哇。。。这次是贼难。。贼复杂。。哎

在给控件们添加属性时,有一个问题碰到了,就是给
image.png

这个具有下拉菜单属性的控件添加下拉菜单内容时,需要在属性
image.png

中通过分号来间隔开不同行/菜单的内容。在给List Control更改为报表属性时通过


image.png

实现的。

2.
image.png

在这个的里边,第一句是设置树形控件的主题/风格属性,root为根节点,root1.2.3分别为其的子节点,然后在各自往下散开,形成一个树形。
0+ InsertItem()方法是用来添加节点的,第一个参数是添加的内容,第二个参数的意思是当前节点的父节点(也就是在其父节点往下添加一个子节点)

3.
image.png

第一句代码的意思是设置报表的属性。下边是添加报表的头表。向列表中插入显示列,第一个参数为第几个表项,第二个参数为标题,第三个是对齐方式,这里为左对齐,第四个参数为指定宽度,这里宽度为80;
  1. 在实现“Add”按钮的时候,我写的代码如下:
std::vector<Student> students;

Student student;
void COOPEx4_sDlg::OnBnClickedButton2()
{
       // TODO:  在此添加控件通知处理程序代码
       UpdateData(true);    //用于更新控件
       CString  text;    //获取combo控件选择的菜单文本
       HTREEITEM root1_name,root2_name,root3_name;    //添加的三个年级的树节点
       m_Grade.GetLBText(m_Grade.GetCurSel(), text);    //通过.GetCurSel()获取选中项,然后GetLBText()将文本Copy到text
       if (text == "Second"&&m_Name!=""){    //如果选中的是二年级且姓名不为空
             root2_name = this->m_TreeCon.InsertItem(m_Name, root2);    //往树里边添加子节点,其父节点为root2
             m_TreeCon.Expand(root, TVE_EXPAND);        //展开根节点root
             m_TreeCon.Expand(root2, TVE_EXPAND);        //展开节点root2
            student.grade = (CString)"二年级";        //往学生对象数据内赋值
       }
       else if (text == "Third"&&m_Name != ""){        //下边同之。。。
             root3_name = this->m_TreeCon.InsertItem(m_Name, root3);
             m_TreeCon.Expand(root, TVE_EXPAND);
             m_TreeCon.Expand(root3, TVE_EXPAND);
            student.grade = (CString)"三年级";
       }
       else if (m_Name != ""){        //这里有个问题,combo控件对于第一个菜单文本好像没法获取,或者默认为第一,无法用来比较,就用了一个这种方式
             root1_name = this->m_TreeCon.InsertItem(m_Name, root1);
             m_TreeCon.Expand(root, TVE_EXPAND);
             m_TreeCon.Expand(root1, TVE_EXPAND);
             student.grade = (CString)"一年级";
       }
       student.ID = m_ID;        //赋值
       student.name =_Sub1;
       student.sub2 = m_Sub2;
       student.sub3 = m_Sub3;m_Name;
       student.sub1 = m
        student.push_back(student);
       length++;    //定义了一个用来记录学生对象数量的变量(全局)

       //打印日志
       CString m_time = getTime();
       CString str = m_time + (CString)"  DATA ADD";
       m_Log.AddString(str);
}

5.在实现“Reset”功能时代码如下:

void COOPEx4_sDlg::OnBnClickedButton3()
{
       // TODO:  在此添加控件通知处理程序代码
       m_ID = "";
       m_Name = "";
       m_Sub1 = 0;
       m_Sub2 = 0;
       m_Sub3 = 0;
       UpdateData(false);

       //打印日志
       CString m_time = getTime();
       CString str = m_time + (CString)"  DATA RESET";
       m_Log.AddString(str);
}
  1. 为树形控件增加Double Click事件。首先需要在类向导中选择


    image.png

    双击后在事件中添加代码如下:

void COOPEx4_sDlg::OnDblclkTree(NMHDR *pNMHDR, LRESULT *pResult)
{
       // TODO:  在此添加控件通知处理程序代码
       int line = 0, row = 0,num=0;//行 列
       CString Sub1, Sub2, Sub3,Ary,x,test;       //三门成绩,平均数,选中树节点的文本
       //num=m_TreeCon.GetSelectedCount();
       x = m_TreeCon.GetItemText(m_TreeCon.GetSelectedItem());    //获取选中树节点的文本

       //防止crush
       if (x!= "年级"){    //防止双击啥都没有的年纪节点会出现crush的现象
             for (; num <= length; num++){    //遍历找到与双击节点姓名相同的学生对象(避免姓名重复,没做解决)
                    if (x == students[num].name)
                           break;
             }
             Sub1.Format(_T("%f"), students[num].sub1);    //强制类型转换,将成绩的double转化为CString
             Sub2.Format(_T("%f"), students[num].sub2);
             Sub3.Format(_T("%f"), students[num].sub3);
             Ary.Format(_T("%f"), ((students[num].sub1 + students[num].sub2 + students[num].sub3) / 3));
             for (int i = 0; i <= line; i++)
             {
                    m_Inquiry.InsertItem(line, (CString)"");    //向报表中添加项
                    for (row; row <= 6; row++)
                    {
                           switch (row)
                           {
                           case 0:
                                 m_Inquiry.SetItemText(line, row, students[num].name);
                                 break;
                           case 1:
                                 m_Inquiry.SetItemText(line, row, students[num].ID);
                                 break;
                           case 2:
                                 m_Inquiry.SetItemText(line, row, students[num].grade);
                                 break;
                           case 3:
                                 m_Inquiry.SetItemText(line, row, Sub1);
                                 break;
                           case 4:
                                 m_Inquiry.SetItemText(line, row, Sub2);
                                 break;
                           case 5:
                                 m_Inquiry.SetItemText(line, row, Sub3);
                                 break;
                           case 6:
                                 m_Inquiry.SetItemText(line, row, Ary);
                                 break;
                           default:
                                 break;
                           }
                    }
             }
             *pResult = 0;
       }
             //打印日志
             CString m_time = getTime();
             CString str = m_time + (CString)"  TREE DOUBLE CLICK";
             m_Log.AddString(str);
       
}

7.在实习打印报表的时候,我自定义了一个getTime()方法用来获取当前系统时间,然后返回结果

CString getTime(){
       CTime m_time;
       m_time = CTime::GetCurrentTime();             //获取当前时间日期 
       return m_time.Format(_T("%Y-%m-%d %H:%M:%S %A"));   //格式化日期时间 
}

在具体打印的时候这么使用:

//打印日志             CString m_time = getTime();             CString str = m_time + (CString)"  TREE DOUBLE CLICK";             m_Log.AddString(str);
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 200,045评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,114评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 147,120评论 0 332
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,902评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,828评论 5 360
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,132评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,590评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,258评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,408评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,335评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,385评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,068评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,660评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,747评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,967评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,406评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,970评论 2 341

推荐阅读更多精彩内容

  • 1、窗体 1、常用属性 (1)Name属性:用来获取或设置窗体的名称,在应用程序中可通过Name属性来引用窗体。 ...
    Moment__格调阅读 4,457评论 0 11
  • 程序设计中常使用树型结构来表征某些数据的关联关系,如上下级、栏目结构、商品分类、菜单、回复等。 分类的层级关系可以...
    JunChow520阅读 4,081评论 4 3
  • 我投降,关于你的我都退让。 可惜爱不是一封情书两张照片三滴眼泪四句情话五次拥抱六场约会七朵玫瑰八场电影九年缠绵十年...
    顾闵阅读 628评论 0 1
  • 原文: 用兵有言:"吾不敢为主,而为客;不敢进寸,而退尺。" 译文: 用兵的人曾经这样说,“我不敢主动进犯,而采取...
    秀妮_5519阅读 224评论 0 3
  • 今天不知道写啥。所以写的很少:今天早上我去的很早,在路上我遇见了张怡,然后我爸爸让她上车到校门口的时候荆峰贺...
    窦子_e284阅读 266评论 0 0