CMFCPropertyGridCtrl的简单用法

简单创建一个CMFCPropertyGridCtrl

创建一个简单的工程,添加CMFCPropertyGridCtrl这个控件,然后关联一个变量。

	BOOL CPropertySysDlg::OnInitDialog()
{
	CDialogEx::OnInitDialog();
	// TODO: 在此添加额外的初始化代码
    m_propertyGridCtrl.EnableHeaderCtrl(FALSE);
    m_propertyGridCtrl.SetVSDotNetLook(FALSE);//描述是否按照.NET的样式绘制控件
    m_propertyGridCtrl.MarkModifiedProperties(TRUE);//指定如何显示修改后的属性
    m_propertyGridCtrl.SetAlphabeticMode(FALSE);//设置或重置字母模式
    m_propertyGridCtrl.EnableDescriptionArea(TRUE);//启用或禁用在属性列表下方显示的说明区域
    m_propertyGridCtrl.SetDescriptionRows(3);//设置描述区域的行数
    m_propertyGridCtrl.SetShowDragContext();//指定当用户调整列的大小时,框架是否重绘当前属性网格控件的名称和值列
    //设置表头宽度
    HDITEM item;
    item.cxy = 120;
    item.mask = HDI_WIDTH;
    m_propertyGridCtrl.GetHeaderCtrl().SetItem(0, new HDITEM(item));
    //new出来的pGroup和subitem项,不需要手动释放,由m_propertyGridCtrl释放即可
    CMFCPropertyGridProperty* pGroup = new CMFCPropertyGridProperty(_T("灯具属性"));
    CMFCPropertyGridProperty* pNameItem = new CMFCPropertyGridProperty(_T("名称"), _T("白炽灯"), _T("灯具名称"));
    pNameItem->AllowEdit(FALSE);//不允许编辑
    pGroup->AddSubItem(pNameItem);
    CMFCPropertyGridProperty* pPowerItem = new CMFCPropertyGridProperty(_T("功率(W)"), _T("100"), _T("灯具功率"));
    pPowerItem->AllowEdit(TRUE);
    pGroup->AddSubItem(pPowerItem);
    CMFCPropertyGridProperty* pPriceItem = new CMFCPropertyGridProperty(_T("价格(人民币)"), _T("8.2"), _T("灯具价格"));
    pPriceItem->AddOption(_T("8.2"));
    pPriceItem->AddOption(_T("10.25"));
    pPriceItem->AddOption(_T("12.00"));
    pPriceItem->AllowEdit(TRUE);
    pGroup->AddSubItem(pPriceItem);
    //添加一个属性
    m_propertyGridCtrl.AddProperty(pGroup);
    m_propertyGridCtrl.ExpandAll(TRUE);

	return TRUE;  // 除非将焦点设置到控件,否则返回 TRUE
}

初步得到的界面

在这里插入图片描述

控件头部设置

m_propertyGridCtrl.EnableHeaderCtrl(TRUE, _T("常用灯具"), _T(""));这一行描述的是:
在这里插入图片描述

下拉框

    CMFCPropertyGridProperty* pPriceItem = new CMFCPropertyGridProperty(_T("价格(人民币)"), _T("8.2"), _T("灯具价格"));
    pPriceItem->AddOption(_T("8.2"));
    pPriceItem->AddOption(_T("10.25"));
    pPriceItem->AddOption(_T("12.00"));
    pPriceItem->AllowEdit(TRUE);
    pGroup->AddSubItem(pPriceItem);

在这里插入图片描述

修改后值变黑色

m_propertyGridCtrl.MarkModifiedProperties(TRUE);//指定如何显示修改后的属性
在这里插入图片描述

是否允许编辑值

    CMFCPropertyGridProperty* pPowerItem = new CMFCPropertyGridProperty(_T("功率(W)"), _T("100"), _T("灯具功率"));
    pPowerItem->AllowEdit(TRUE);//是否允许编辑值
    pGroup->AddSubItem(pPowerItem);

禁用某一项(变灰色)

    CMFCPropertyGridProperty* pPriceItem = new CMFCPropertyGridProperty(_T("价格(人民币)"), _T("8.2"), _T("灯具价格"));
    pPriceItem->AddOption(_T("8.2"));
    pPriceItem->AddOption(_T("10.25"));
    pPriceItem->AddOption(_T("12.00"));
    pPriceItem->AllowEdit(TRUE);
    pPriceItem->Enable(FALSE);//禁用
    pGroup->AddSubItem(pPriceItem);

在这里插入图片描述

添加自定义颜色

if (drawCustomColor)
{
	m_propertyGridCtrl.SetCustomColors(RGB(228, 243, 254), RGB(46, 70, 165), RGB(200, 236, 209), RGB(33, 102, 49), RGB(255, 229, 216), RGB(128, 0, 0), RGB(159, 159, 255));
}
else
{
    COLORREF c = (COLORREF)-1;
    m_propertyGridCtrl.SetCustomColors(c, c, c, c, c, c, c);
}

在这里插入图片描述

按照属性名进行排序

m_propertyGridCtrl.EnableMarkSortedColumn(m_bMarkSortedColumn);

添加颜色属性

    //添加颜色
    COLORREF defaultColorRef = RGB(228, 243, 254);
    CMFCPropertyGridColorProperty* pColorProperty = new CMFCPropertyGridColorProperty(_T("构件颜色"), defaultColorRef);
    pGroup->AddSubItem(pColorProperty);

在这里插入图片描述

添加文件路径属性框

    static TCHAR BASED_CODE szFilter[] = _T("Icon Files(*.ico)|*.ico|All Files(*.*)|*.*||");
    pGroup->AddSubItem(new CMFCPropertyGridFileProperty(_T("Icon"), TRUE, _T(""), _T("ico"), 0, szFilter, _T("Specifies the dialog icon")));

在这里插入图片描述

添加多个属性

BOOL CPropertySysDlg::OnInitDialog()
{
	CDialogEx::OnInitDialog();
	// TODO: 在此添加额外的初始化代码
    m_propertyGridCtrl.EnableHeaderCtrl(TRUE, _T("常用灯具"), _T(""));
    m_propertyGridCtrl.SetVSDotNetLook(FALSE);//描述是否按照.NET的样式绘制控件
    m_propertyGridCtrl.MarkModifiedProperties(TRUE);//指定如何显示修改后的属性
    m_propertyGridCtrl.SetAlphabeticMode(FALSE);//设置或重置字母模式
    m_propertyGridCtrl.EnableDescriptionArea(TRUE);//启用或禁用在属性列表下方显示的说明区域
    m_propertyGridCtrl.SetDescriptionRows(3);
    m_propertyGridCtrl.SetShowDragContext();//指定当用户调整列的大小时,框架是否重绘当前属性网格控件的名称和值列
    //设置表头宽度
    HDITEM item;
    item.cxy = 120;
    item.mask = HDI_WIDTH;
    m_propertyGridCtrl.GetHeaderCtrl().SetItem(0, new HDITEM(item));

    //!++ 添加灯具属性
    {
        //new出来的pGroup和subitem项,不需要手动释放,由m_propertyGridCtrl释放即可
        CMFCPropertyGridProperty* pGroup = new CMFCPropertyGridProperty(_T("灯具属性"));
        CMFCPropertyGridProperty* pNameItem = new CMFCPropertyGridProperty(_T("名称"), _T("白炽灯"), _T("灯具名称"));
        pNameItem->AllowEdit(FALSE);//不允许编辑
        pGroup->AddSubItem(pNameItem);
        CMFCPropertyGridProperty* pPowerItem = new CMFCPropertyGridProperty(_T("功率(W)"), _T("100"), _T("灯具功率"));
        pPowerItem->AllowEdit(TRUE);
        pGroup->AddSubItem(pPowerItem);
        CMFCPropertyGridProperty* pPriceItem = new CMFCPropertyGridProperty(_T("价格(人民币)"), _T("8.2"), _T("灯具价格"));
        pPriceItem->AddOption(_T("8.2"));
        pPriceItem->AddOption(_T("10.25"));
        pPriceItem->AddOption(_T("12.00"));
        pPriceItem->AllowEdit(TRUE);
        pPriceItem->Enable(FALSE);
        pGroup->AddSubItem(pPriceItem);
        //添加颜色属性
        COLORREF defaultColorRef = RGB(228, 243, 254);
        CMFCPropertyGridColorProperty* pColorProperty = new CMFCPropertyGridColorProperty(_T("构件颜色"), defaultColorRef);
        pGroup->AddSubItem(pColorProperty);
        //添加文件查找属性
        static TCHAR BASED_CODE szFilter[] = _T("Icon Files(*.ico)|*.ico|All Files(*.*)|*.*||");
        pGroup->AddSubItem(new CMFCPropertyGridFileProperty(_T("Icon"), TRUE, _T(""), _T("ico"), 0, szFilter, _T("Specifies the dialog icon")));
        //添加一个属性
        m_propertyGridCtrl.AddProperty(pGroup);
    }
    //!++ 添加其他属性
    {
        CMFCPropertyGridProperty* pGroup = new CMFCPropertyGridProperty(_T("其他属性"));
        CMFCPropertyGridProperty* pNameItem = new CMFCPropertyGridProperty(_T("使用寿命"), _T("100天"), _T("灯具使用保质期"));
        pNameItem->AllowEdit(FALSE);//不允许编辑
        pGroup->AddSubItem(pNameItem);

        CMFCPropertyGridProperty* pItem = new CMFCPropertyGridProperty(_T("维修店地址"), _T("北京三里屯"), _T("灯具维修地址"));
        pItem->AllowEdit(FALSE);//不允许编辑
        pGroup->AddSubItem(pItem);
        //添加一个属性
        m_propertyGridCtrl.AddProperty(pGroup);
    }

    m_propertyGridCtrl.ExpandAll(TRUE);
    if (1)
    {
        m_propertyGridCtrl.SetCustomColors(RGB(228, 243, 254), RGB(46, 70, 165), RGB(200, 236, 209), RGB(33, 102, 49), RGB(255, 229, 216), RGB(128, 0, 0), RGB(159, 159, 255));
    }
    else
    {
        COLORREF c = (COLORREF)-1;
        m_propertyGridCtrl.SetCustomColors(c, c, c, c, c, c, c);
    }

	return TRUE;  // 除非将焦点设置到控件,否则返回 TRUE
}

在这里插入图片描述

获取当前控件有的属性项

int count = m_propertyGridCtrl.GetPropertyCount();
在这里插入图片描述

获取每一个属性的属性值列表并打印

    int count = m_propertyGridCtrl.GetPropertyCount();
    for (int i = 0; i < count; i++)
    {
        CMFCPropertyGridProperty* pProperty = m_propertyGridCtrl.GetProperty(i);
        if (pProperty == nullptr)
            continue;
        int subItemCount = pProperty->GetSubItemsCount();
        for (int j = 0; j < subItemCount; j++)
        {
            CMFCPropertyGridProperty *pSubProperty = pProperty->GetSubItem(j);
            if (pSubProperty == nullptr)
                continue;
            CString name = pSubProperty->GetName();
            COleVariant value = pSubProperty->GetValue();
        }
    }
  • 3
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值