MFCT 实现一个表格,表格第一列是复选框,并且表格的每一行是动态生成的
时间: 2024-02-19 08:01:40 浏览: 87
好的,您可以使用 MFC 中的 CListCtrl 控件实现这个表格。首先,在 Visual Studio 中新建一个 MFC 应用程序,然后在对话框资源中添加一个 List Control 控件。
接着,在您的对话框类头文件中添加以下代码:
```cpp
#include <vector>
class CMyDlg : public CDialogEx
{
public:
CMyDlg(CWnd* pParent = nullptr); // 标准构造函数
virtual ~CMyDlg();
// 对话框数据
#ifdef AFX_DESIGN_TIME
enum { IDD = IDD_MY_DIALOG };
#endif
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持
DECLARE_MESSAGE_MAP()
private:
CListCtrl m_listCtrl;
std::vector<CString> m_data; // 保存要显示的数据
};
```
然后在您的对话框类实现文件中添加以下代码:
```cpp
BOOL CMyDlg::OnInitDialog()
{
CDialogEx::OnInitDialog();
// 初始化 List Control 控件
m_listCtrl.Create(WS_VISIBLE | WS_TABSTOP | WS_CHILD | LVS_REPORT | LVS_SHOWSELALWAYS,
CRect(10, 10, 400, 300), this, IDC_LIST_CTRL);
m_listCtrl.SetExtendedStyle(LVS_EX_FULLROWSELECT | LVS_EX_CHECKBOXES);
// 添加表头
m_listCtrl.InsertColumn(0, _T("Checkbox"), LVCFMT_LEFT, 100);
m_listCtrl.InsertColumn(1, _T("Data"), LVCFMT_LEFT, 200);
// 添加行数据
m_data.push_back(_T("Data 1"));
m_data.push_back(_T("Data 2"));
m_data.push_back(_T("Data 3"));
m_data.push_back(_T("Data 4"));
m_data.push_back(_T("Data 5"));
for (int i = 0; i < m_data.size(); i++)
{
int row = m_listCtrl.InsertItem(i, _T(""));
m_listCtrl.SetItemText(row, 1, m_data[i]);
}
return TRUE;
}
void CMyDlg::DoDataExchange(CDataExchange* pDX)
{
CDialogEx::DoDataExchange(pDX);
DDX_Control(pDX, IDC_LIST_CTRL, m_listCtrl);
}
void CMyDlg::OnOK()
{
// 获取选中的行
for (int i = 0; i < m_data.size(); i++)
{
if (m_listCtrl.GetCheck(i))
{
CString data = m_data[i];
// TODO: 处理选中的数据
}
}
CDialogEx::OnOK();
}
```
这样,您就可以在表格的第一列添加复选框,并且动态生成每一行的数据了。在对话框的 OnOK 函数中,您可以获取选中的行数据,并进行相应的处理。
阅读全文