首页 > 解决方案 > 如何从 CMFCPropertyGridProperty ComboBox 中获取选项?

问题描述

如何从CMFCPropertyGridProperty类的 ComboBox 中获取选项

CMFCPropertyGridProperty* pShpType_S = new CMFCPropertyGridProperty(_T("shpType_S"), shpType_S, _T("shpType_S"));

pShpType_S->AddOption(_T("POINT"));
pShpType_S->AddOption(_T("LINE"));
pShpType_S->AddOption(_T("BOX"));
pShpType_S->AddOption(_T("CIRCLE"));
pShpType_S->AddOption(_T("SPHERE"));
pShpType_S->AddOption(_T("MESH"));
pShpType_S->AllowEdit(FALSE);

标签: visual-c++mfc

解决方案


您应该能够使用:

CMFCPropertyGridProperty* pProperty = ...;
COleVariant vProperty = pProperty->GetValue();
if (vProperty.vt == VT_BSTR)
{
    CString strValue = vProperty.bstrVal;

    // If you also want the index
    bool bFound = false;
    int iNumOptions = pProperty->GetOptionCount();
    for (int iOption = 0; iOption < iNumOptions; iOption++)
    {
        if (strValue.CollateNoCase(pProperty->GetOption(iOption)) == 0)
        {
            // Match!
            bFound = true;
            break;
        }
    }
    // iOption has the index value.
}

抬头:

变体可以包含几种不同类型的值,您必须检查.vt成员。对于组合属性,该值将是一个文本字符串,因此您检查[VT_BSTR][1].

的实际定义[CMFCPropertyGridProperty::GetValue][1]是:

virtual const _variant_t& GetValue() const;

所以你也可以使用_variant_t代替COleVariant. 但我使用后者。


推荐阅读