• MFC list control控件数据修改


    MFC listcontral控件 创建和添加数据
    MFC list控件 从文件中添加保存数据项

    先给list control控件添加拓展风格

    m_list.SetExtendedStyle(LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES);
    //选中行高亮和分割线
    
    • 1
    • 2

    添加风格后效果如图

    添加一个editControl控件,命名为m_edit,默认是Control变量;在OnInitDialog()方法里隐藏m_edit.ShowWindow(SW_HIDE);

    在Dlg类中定义三个变量

    int m_Row;//鼠标选中的行号
    int m_Col;//鼠标选中的列号
    CString m_strListItem;//鼠标选中的那一项的数据
    
    • 1
    • 2
    • 3

    使用类向导添加list control控件的双击消息响应函数

    void Clist控件Dlg::OnDblclkList1(NMHDR* pNMHDR, LRESULT* pResult)
    {
    LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR);
    // TODO: 在此添加控件通知处理程序代码
    CRect rc;
    NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
    m_Row = pNMListView->iItem;//每一行的item从零开始,双击选中行号
    m_Col = pNMListView->iSubItem;//每一行中的列就是SubItem也是从零开始,获得选中列号
    
    if (m_Col != -1&&m_Col>1)//选择子项,
    {
    
    m_list.GetSubItemRect(m_Row, m_Col, LVIR_LABEL, rc);//获得列表视图控件中的项的边框矩形
    m_edit.SetParent(&m_list);
    m_edit.MoveWindow(rc);
    m_edit.SetWindowText(m_list.GetItemText(m_Row, m_Col));//设置选中框的数值(由用户输入 )
    m_edit.ShowWindow(SW_SHOW);//显示在窗口中
    m_edit.SetFocus();//设置edit焦点
    m_edit.ShowCaret();//显示光标
    m_edit.SetSel(-1); //-1选择编辑控件中的所有文本
    
    }
    
    *pResult = 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25

    因为前两项是英雄名称和职业这个基本是不会更改的,要有改动的是后面两项价格,所以加了一个m_Col>1的判断。

    但是此时只能实现edit控件中的数值修改不能实现保存,所以在edit控件中添加killfocus函数

    (该edit控件的ID是IDC_EDIT5)

    void Clist控件Dlg::OnKillfocusEdit5()
    {
    // TODO: 在此添加控件通知处理程序代码
    m_edit.GetWindowText(m_strListItem);//获取修改后编辑框中的数据
    m_list.SetItemText(m_Row, m_Col, m_strListItem);
    int price = _wtoi(m_strListItem);   
            //判断修改的是金币价格还是点券价格
    if (m_Col == 2)
    heroVector[m_Row].Price_God = price;
    if(m_Col==3)
    heroVector[m_Row].Price_Tickets = price;
    m_edit.ShowWindow(SW_HIDE);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    heroVector中元素的顺序和list control中显示的顺序是一致的,这就是为什么要添加一个全局变量count来控制给list control控件添加项的时候都是从末尾插入。

  • 相关阅读:
    2023天津理工大学计算机考研信息汇总
    干货 | JavaScript脚本注入,完成Selenium 无法做到的那些事
    1.2 基本分类
    基础模型量化学习扩展仓库
    Linux_基础指令(一)
    get√接口自动化核心知识点浓缩,为面试加分
    华为机试真题 Python 实现【最大化控制资源成本】【2022.11 Q4 新题】
    门控循环单元(GRU)
    【最佳实践】京东小程序-LBS业务场景的性能提升
    非对称密码体制详解
  • 原文地址:https://blog.csdn.net/m0_72895175/article/details/132136940