MFC 实现一个表格控件,表格的第一列是复选框,并且表格需要画线区分行列
时间: 2024-02-19 10:01:37 浏览: 201
好的,您可以使用 MFC 中的 CListCtrl 控件实现这个表格。首先,在 Visual Studio 中新建一个 MFC 应用程序,然后在对话框资源中添加一个 List Control 控件。
接着,在您的对话框类头文件中添加以下代码:
```cpp
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;
};
```
然后在您的对话框类实现文件中添加以下代码:
```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 | LVS_EX_GRIDLINES);
// 添加表头
m_listCtrl.InsertColumn(0, _T("Checkbox"), LVCFMT_LEFT, 100);
m_listCtrl.InsertColumn(1, _T("Column 1"), LVCFMT_LEFT, 100);
m_listCtrl.InsertColumn(2, _T("Column 2"), LVCFMT_LEFT, 100);
m_listCtrl.InsertColumn(3, _T("Column 3"), LVCFMT_LEFT, 100);
// 添加行数据
for (int i = 0; i < 10; i++)
{
int row = m_listCtrl.InsertItem(i, _T(""));
m_listCtrl.SetCheck(row, FALSE);
m_listCtrl.SetItemText(row, 1, _T("Data 1"));
m_listCtrl.SetItemText(row, 2, _T("Data 2"));
m_listCtrl.SetItemText(row, 3, _T("Data 3"));
}
return TRUE;
}
void CMyDlg::DoDataExchange(CDataExchange* pDX)
{
CDialogEx::DoDataExchange(pDX);
DDX_Control(pDX, IDC_LIST_CTRL, m_listCtrl);
}
```
这样,您就可以在表格的第一列添加复选框了。为了画线区分行列,我们在 List Control 控件的扩展样式中添加了 LVS_EX_GRIDLINES 样式。这样就可以在表格中画出水平和垂直的线条了。
阅读全文