2401_83592121 2024-04-16 14:22 采纳率: 71.4%
浏览 2
已结题

我想问一下是用什么控件实现上面的表格的

请问下这个表格是用MFC中的什么控件做的啊?
请问下这个表格是用MFC中的什么控件做的啊?
请问下这个表格是用MFC中的什么控件做的啊?

img

  • 写回答

4条回答 默认 最新

  • 专家-赤兔[在线] 优质创作者: 编程框架技术领域 2024-04-16 14:22
    关注

    引自免费微信小程序:皆我百晓生

    在MFC中,这样的表格通常使用CListCtrl控件来实现。CListCtrl是一个用于显示多行列表数据的窗口类,可以用来创建类似表格的界面,支持自定义列标题、不同类型的单元格数据(例如整数、字符串等)以及用户交互。

    为了实现上述表格,你需要按照以下步骤操作:

    1. 创建一个新的MFC对话框类,比如叫做CMyDialog
    2. 在资源编辑器中,在对话框上添加一个CListCtrl控件。
    3. 编辑CMyDialog类的头文件(.h),增加必要的成员变量和消息映射函数。
    4. 编写CMyDialog类的源文件(.cpp),初始化列表控件并填充数据。

    以下是具体的步骤和代码示例:

    CMyDialog.h

    #include <afxwin.h>
    class CMyDialog : public CDialogEx
    {
    public:
        CListCtrl m_listCtrl;
        //...
    protected:
        DECLARE_MESSAGE_MAP()
    };
    

    CMyDialog.cpp

    #include "CMyDialog.h"
    #include "afxdialogex.h"
    
    BEGIN_MESSAGE_MAP(CMyDialog, CDialogEx)
        ON_WM_SIZE()
    END_MESSAGE_MAP()
    
    void CMyDialog::DoDataExchange(CDataExchange* pDX)
    {
        CDialogEx::DoDataExchange(pDX);
        DDX_Control(pDX, IDC_LIST_CTRL, m_listCtrl); // 假设IDC_LIST_CTRL是列表控件的ID
    }
    
    // 初始化列表控件和列标题
    void CMyDialog::InitListCtrl()
    {
        // 设置列表控件的样式为可编辑且有横纵滚动条
        m_listCtrl.SetExtendedStyle(LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES | LVS_EX_DOUBLEBUFFER);
    
        // 添加列标题
        m_listCtrl.InsertColumn(0, _T("序"), LVCFMT_LEFT, 40);
        m_listCtrl.InsertColumn(1, _T("项目"), LVCFMT_LEFT, 100);
        m_listCtrl.InsertColumn(2, _T("含义"), LVCFMT_LEFT, 100);
        m_listCtrl.InsertColumn(3, _T("数值"), LVCFMT_LEFT, 60);
        m_listCtrl.InsertColumn(4, _T("修改"), LVCFMT_LEFT, 60);
        m_listCtrl.InsertColumn(5, _T("操作"), LVCFMT_LEFT, 60);
    
        // 添加数据
        for (int i = 0; i < 20; ++i)
        {
            TV_ITEM item;
            item.mask = LVIF_TEXT;
            item.pszText = const_cast<LPTSTR>(_T("Item ")); // 替换为实际数据
            item.cchTextMax = 20;
            item.iSubItem = 0;
            m_listCtrl.InsertItem(i, &item);
    
            item.iSubItem = 1;
            item.pszText = const_cast<LPTSTR>(_T("Project ")); // 替换为实际数据
            m_listCtrl.SetItem(&item);
    
            item.iSubItem = 2;
            item.pszText = const_cast<LPTSTR>(_T("Meaning ")); // 替换为实际数据
            m_listCtrl.SetItem(&item);
    
            item.iSubItem = 3;
            item.pszText = const_cast<LPTSTR>(_T("Value ")); // 替换为实际数据
            m_listCtrl.SetItem(&item);
    
            item.iSubItem = 4;
            item.pszText = const_cast<LPTSTR>(_T("Modify ")); // 替换为实际数据
            m_listCtrl.SetItem(&item);
    
            item.iSubItem = 5;
            item.pszText = const_cast<LPTSTR>(_T("Action ")); // 替换为实际数据
            m_listCtrl.SetItem(&item);
        }
    }
    
    BOOL CMyDialog::OnInitDialog()
    {
        CDialogEx::OnInitDialog();
    
        // 初始化列表控件
        InitListCtrl();
    
        return TRUE;  // 返回TRUE表示成功处理了OnInitDialog消息
    }
    

    这段代码展示了如何创建一个包含五个列的列表控件,并向其中添加一些示例数据。你需要根据实际需求替换列标题和数据。注意,这里的数据是硬编码的,如果你需要从数据库或其他地方获取数据,你需要相应地修改代码来读取和解析这些数据。

    此外,为了使列表看起来更像表格,你可能还需要调整列表控件的字体、颜色以及边框样式。你可以在OnInitDialog()方法中添加额外的设置,或者在资源编辑器中配置列表控件的外观。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 4月24日
  • 已采纳回答 4月16日
  • 创建了问题 4月16日