📜  MFC-属性表(1)

📅  最后修改于: 2023-12-03 15:02:56.282000             🧑  作者: Mango

MFC 属性表

MFC 属性表(Property Grid)控件是 Windows 程序界面的重要组成部分,它允许用户在表格中输入和编辑属性值。在 MFC 中,属性表控件通常是使用 CMFCPropertyGridCtrl 类来创建和管理的。

核心特性

MFC 属性表控件具有许多核心特性,包括:

  • 复杂属性值:属性表控件支持复杂的属性值,如颜色、字体、列表、枚举和图像等。

  • 分类属性:属性表控件允许您将属性分组到不同的分类中,以帮助组织和分类属性。

  • 自定义视图:属性表控件允许您使用自定义视图来呈现属性值。例如,您可以使用自定义视图来呈现日期值或自定义图像。

  • 自定义编辑器:属性表控件允许您使用自定义编辑器来编辑属性值。例如,您可以使用自定义编辑器来编辑时间或日期值。

  • 事件处理:属性表控件支持事件处理,可以处理属性值的更改或编辑操作。

使用方法
创建属性表控件

要创建属性表控件,您需要执行以下步骤:

1.添加一个属性表控件到您的对话框或窗口中。

CMFCPropertyGridCtrl m_wndPropList;

2.初始化控件。

// 在 OnInitDialog 中执行
m_wndPropList.EnableHeaderCtrl(FALSE);
m_wndPropList.EnableDescriptionArea(TRUE);
m_wndPropList.SetVSDotNetLook();
m_wndPropList.MarkModifiedProperties();

3.向控件添加属性和分类。

// 添加分类
CMFCPropertyGridProperty* pGroupFont = new CMFCPropertyGridProperty(_T("Font"));
 
// 添加属性
HFONT hfont = (HFONT)SendMessage(m_hWnd, WM_GETFONT, 0, 0);
LOGFONT lf;
::GetObject(hfont, sizeof(LOGFONT), &lf);
 
CMFCPropertyGridFontProperty* pPropFont = new CMFCPropertyGridFontProperty(_T("Regular"), lf);
pGroupFont->AddSubItem(pPropFont);
m_wndPropList.AddProperty(pGroupFont);
处理事件

在 MFC 属性表控件中,您可以处理属性值的更改或编辑操作。以下是一些常用的事件处理程序:

// 属性值更改
void CMyDlg::OnPropertyChanged(NMHDR* pNMHDR, LRESULT* pResult)
{
    LPNMPROPERTYITEM pItem = reinterpret_cast<LPNMPROPERTYITEM>(pNMHDR);
    CString strName = pItem->pProp->GetName();
    COleVariant varNewValue = pItem->pProp->GetValue();
 
    // 处理更改后的属性值
}
示例代码
void CMyDlg::OnInitDialog()
{
    // 父类初始化方法
    CDialogEx::OnInitDialog();
 
    // 添加属性表控件
    m_wndPropList.Create(WS_CHILD | WS_VISIBLE | WS_TABSTOP, CRect(12, 42, 450, 280), this, ID_PROPERTY_GRID);
 
    // 初始化控件
    m_wndPropList.EnableHeaderCtrl(FALSE);
    m_wndPropList.EnableDescriptionArea(TRUE);
    m_wndPropList.SetVSDotNetLook();
    m_wndPropList.MarkModifiedProperties();
 
    // 添加分类
    CMFCPropertyGridProperty* pGroupFont = new CMFCPropertyGridProperty(_T("Font"));
 
    // 添加属性
    HFONT hfont = (HFONT)SendMessage(m_hWnd, WM_GETFONT, 0, 0);
    LOGFONT lf;
    ::GetObject(hfont, sizeof(LOGFONT), &lf);
 
    CMFCPropertyGridFontProperty* pPropFont = new CMFCPropertyGridFontProperty(_T("Regular"), lf);
    pGroupFont->AddSubItem(pPropFont);
    m_wndPropList.AddProperty(pGroupFont);
}
参考资料