Azrail_LDL 2023-10-10 21:40 采纳率: 75%
浏览 124
已结题

怎么使用国外写的MFC GridControl控件来实现自己想要的表格?

有偿请教各位,指点一下

使用MFC 表格Grid Control的类,控件如下图,网上可下载:
下载地址 https://www.tsingfun.com/it/cpp/MFC-Grid-control-2-27.html

img

来实现自己想要的表格,每个表格有按钮可增减行数列数,且需要绑定对应信息,如图

img

表格内容绑定 school.cfg 文件,内容如下

[成绩]

语文(科目) = 3(名次),80(成绩)

数学 = 5,95

英语 = 7,94

[班级]

一班(班级) = 50(总人数),27(男生),23(女生)

二班 =48,24,24

英语 =46,26,20

[兴趣班]

烹饪(兴趣班) = 50(人数),15(课数)

足球 = 5,20

乒乓球 = 7,30

  • 写回答

16条回答 默认 最新

  • 专家-赤兔[在线] 优质创作者: 编程框架技术领域 2023-10-10 21:45
    关注

    引自强大而免费的微信小程序:皆我百晓生。如有帮助,还望采纳。


    要实现自己想要的表格,并使用国外写的MFC Grid Control控件,可以按照以下步骤进行:

    1. 下载并导入MFC Grid Control控件:从网上下载MFC Grid Control控件,并将其导入到您的项目中。

    2. 创建CGridCtrl对象:在MFC的对话框类中创建一个CGridCtrl对象,这将作为表格的显示控件。

    3. 设置表头和行列数:调用CGridCtrl对象的SetRowCount和SetColumnCount方法,设置表格的行数和列数。

    4. 添加按钮:使用MFC的Button控件来添加增减行列数的按钮,并为按钮添加响应的事件处理函数。

    5. 绑定数据:从school.cfg文件中读取数据,并将数据绑定到表格中。可以使用MFC的文件操作函数来读取和解析文件内容。

    6. 更新表格显示:根据数据的变化,调用CGridCtrl对象的SetItemText方法,更新表格的显示内容。

    下面是一个简单的示例代码,帮助您开始实现这个功能:

    // 将以下代码添加到对话框类中的OnInitDialog函数中
    BOOL CMyDialog::OnInitDialog()
    {
        CDialogEx::OnInitDialog();
    
        // 创建GridCtrl控件
        CRect rect;
        GetClientRect(&rect);
        m_GridCtrl.Create(rect, this, IDC_GRID_CTRL);
    
        // 设置表头和行列数
        m_GridCtrl.SetRowCount(3);
        m_GridCtrl.SetColumnCount(3);
    
        // 添加增减行列数的按钮
        m_btnAddRow.Create(_T("Add Row"), WS_CHILD | WS_VISIBLE, rect, this, IDC_ADD_ROW);
        m_btnAddCol.Create(_T("Add Col"), WS_CHILD | WS_VISIBLE, rect, this, IDC_ADD_COL);
    
        // 绑定按钮的事件处理函数
        m_btnAddRow.SetOwner(this);
        m_btnAddCol.SetOwner(this);
        m_btnAddRow.SetWindowPos(NULL, rect.right - 100, rect.top + 10, 80, 30, SWP_SHOWWINDOW);
        m_btnAddCol.SetWindowPos(NULL, rect.right - 100, rect.top + 50, 80, 30, SWP_SHOWWINDOW);
    
        // 从配置文件中读取数据
        LoadData();
    
        return TRUE;
    }
    
    // 添加增加行按钮的事件处理函数
    void CMyDialog::OnAddRow()
    {
        int nRowCount = m_GridCtrl.GetRowCount();
        m_GridCtrl.SetRowCount(nRowCount + 1);
    }
    
    // 添加增加列按钮的事件处理函数
    void CMyDialog::OnAddCol()
    {
        int nColCount = m_GridCtrl.GetColumnCount();
        m_GridCtrl.SetColumnCount(nColCount + 1);
    }
    
    // 从配置文件中读取数据并绑定到表格中
    void CMyDialog::LoadData()
    {
        CString strFilePath = _T("school.cfg");
    
        CStdioFile file;
        if (file.Open(strFilePath, CFile::modeRead))
        {
            CString strLine;
            while (file.ReadString(strLine))
            {
                if (strLine.Left(1) == _T("[")) // 找到表格标题行
                {
                    int nRow = m_GridCtrl.GetRowCount();
                    m_GridCtrl.SetItemText(nRow, 0, strLine);
                }
                else // 数据行
                {
                    int nRow = m_GridCtrl.GetRowCount() - 1;
                    int nCol = m_GridCtrl.GetColumnCount();
                    int nPos = strLine.Find(_T("="));
                    CString strHeader = strLine.Left(nPos);
                    CString strData = strLine.Mid(nPos + 1);
    
                    m_GridCtrl.SetItemText(nRow, 0, strHeader);
                    for (int i = 1; i < nCol; i++)
                    {
                        nPos = strData.Find(_T(","));
                        CString strValue = strData.Left(nPos);
                        strData = strData.Mid(nPos + 1);
                        m_GridCtrl.SetItemText(nRow, i, strValue);
                    }
                }
            }
    
            file.Close();
        }
    }
    

    以上代码只是一个简单的示例,您可以根据自己的需求进行相应的修改和完善。

    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 10月17日
  • 修改了问题 10月10日
  • 创建了问题 10月10日