| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 |
- #include "stdafx.h"
- #include "PropertyGridInplaceEdit.h"
- #include "PropertyGridInplaceButton.h"
- #include "PropertyGridInplaceList.h"
- #include "PropertyGridItem.h"
- #include "PropertyGridItemEnum.h"
- CPropertyGridItemEnum::CPropertyGridItemEnum(CString strCaption)
- : CPropertyGridItem(strCaption)
- {
- _Init();
- }
- CPropertyGridItemEnum::CPropertyGridItemEnum(UINT nID)
- : CPropertyGridItem(nID)
- {
- _Init();
- }
- CPropertyGridItemEnum::~CPropertyGridItemEnum()
- {
- }
- void CPropertyGridItemEnum::_Init()
- {
- SetFlags(pgitemHasComboButton); // 设置属性项不可编辑、有组合框
- m_pBindEnum = NULL;
- }
- void CPropertyGridItemEnum::AddEnumItem(int nItemValue, CString nItemText)
- {
- m_lstEnumItemValues.Add(nItemValue);
- GetConstraints()->AddConstraint(nItemText);
- }
- void CPropertyGridItemEnum::SetEnum(int value)
- {
- int count = (int)m_lstEnumItemValues.GetSize();
- ASSERT(count); // 设置属性值时,必须存在枚举数据项
- // 查找枚举值对应的列表索引
- int index;
- for (index = 0; index < count; index++)
- {
- if (m_lstEnumItemValues[index] == value)
- break;
- }
- // 如果没有找到,则设为第一个枚举数据
- if (index == count)
- index = 0;
- // 从属性项的下拉列表对象(派生自CStringList)获取指定枚举数据项的文本
- POSITION pos = GetConstraints()->FindIndex(index);
- ASSERT(pos);
- CPropertyGridItem::SetValue(GetConstraints()->GetAt(pos));
- if (m_pBindEnum)
- *m_pBindEnum = m_lstEnumItemValues[index];
- }
- int CPropertyGridItemEnum::GetEnum()
- {
- int index = GetConstraints()->FindConstraint( GetValue() );
- ASSERT(index != -1); // 获取属性值时,必须存在枚举数据项,且调用SetEnum设置了初值
- return m_lstEnumItemValues[index];
- }
- void CPropertyGridItemEnum::BindToEnum(int* pBindEnum)
- {
- m_pBindEnum = pBindEnum;
- if (m_pBindEnum)
- SetEnum(*m_pBindEnum);
- }
- void CPropertyGridItemEnum::SetValue(CString strValue)
- {
- CPropertyGridItem::SetValue(strValue);
- if (m_pBindEnum)
- *m_pBindEnum = GetEnum();
- }
|