/******************************************** ** 工作室:S&P工作室 ** 作者 :张东斌 ** 日期 :2007年6月 *********************************************/ #include "StdAfx.h" #include "SPVC80Helpers.h" #include "SPPropertyGridInplaceEdit.h" #include "SPPropertyGridInplaceButton.h" #include "SPPropertyGridInplaceList.h" #include "SPPropertyGridItem.h" #include "SPPropertyGridItemSize.h" #include "SPPropertyGridItemNumber.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CSPPropertyGridItemSize::CSPPropertyGridItemSizeWidth class CSPPropertyGridItemSize::CSPPropertyGridItemSizeWidth : public CSPPropertyGridItemNumber { public: CSPPropertyGridItemSizeWidth(CString strCaption) : CSPPropertyGridItemNumber(strCaption) {} virtual void OnValueChanged(CString strValue) { ((CSPPropertyGridItemSize*)m_pParent)->SetWidth(strValue); } }; ///////////////////////////////////////////////////////////////////////////// // CSPPropertyGridItemSize::CSPPropertyGridItemSizeHeight class CSPPropertyGridItemSize::CSPPropertyGridItemSizeHeight : public CSPPropertyGridItemNumber { public: CSPPropertyGridItemSizeHeight(CString strCaption) : CSPPropertyGridItemNumber(strCaption) {} virtual void OnValueChanged(CString strValue) { ((CSPPropertyGridItemSize*)m_pParent)->SetHeight(strValue); } }; ///////////////////////////////////////////////////////////////////////////// // CSPPropertyGridItemSize IMPLEMENT_DYNAMIC(CSPPropertyGridItemSize, CSPPropertyGridItem) CSPPropertyGridItemSize::CSPPropertyGridItemSize(CString strCaption, CSize size, CSize* pBindSize) : CSPPropertyGridItem(strCaption) { m_szValue = size; BindToSize(pBindSize); m_strValue = SizeToString(size); } CSPPropertyGridItemSize::CSPPropertyGridItemSize(UINT nID, CSize size, CSize* pBindSize) : CSPPropertyGridItem(nID) { m_szValue = size; BindToSize(pBindSize); m_strValue = SizeToString(size); } CSPPropertyGridItemSize::~CSPPropertyGridItemSize() { } ///////////////////////////////////////////////////////////////////////////// // void CSPPropertyGridItemSize::OnAddChildItem() { m_itemWidth = (CSPPropertyGridItemSizeWidth*)AddChildItem(new CSPPropertyGridItemSizeWidth(_T("Width"))); m_itemHeight = (CSPPropertyGridItemSizeHeight*)AddChildItem(new CSPPropertyGridItemSizeHeight(_T("Height"))); UpdateChilds(); } CString CSPPropertyGridItemSize::SizeToString(CSize size) { CString str; str.Format(_T("%i; %i"), size.cx, size.cy); return str; } CSize CSPPropertyGridItemSize::StringToSize(CString str) { CString strWidth, strHeight; AfxExtractSubString(strWidth, str, 0, ';'); AfxExtractSubString(strHeight, str, 1, ';'); return CSize(_ttoi(strWidth), _ttoi(strHeight)); } void CSPPropertyGridItemSize::SetValue(CString strValue) { SetSize(StringToSize(strValue)); } void CSPPropertyGridItemSize::SetSize(CSize size) { m_szValue = size; if (m_pBindSize) { *m_pBindSize = m_szValue; } CSPPropertyGridItem::SetValue(SizeToString(m_szValue)); UpdateChilds(); } void CSPPropertyGridItemSize::BindToSize(CSize* pBindSize) { m_pBindSize = pBindSize; if (m_pBindSize) { *m_pBindSize = m_szValue; } } void CSPPropertyGridItemSize::OnBeforeInsert() { if( m_pBindSize && *m_pBindSize != m_szValue) { SetSize(*m_pBindSize); } } void CSPPropertyGridItemSize::UpdateChilds() { m_itemWidth->SetNumber(m_szValue.cx); m_itemHeight->SetNumber(m_szValue.cy); } void CSPPropertyGridItemSize::SetWidth(CString strWidth) { OnValueChanged(SizeToString(CSize(_ttoi(strWidth), m_szValue.cy))); } void CSPPropertyGridItemSize::SetHeight(CString strHeight) { OnValueChanged(SizeToString(CSize(m_szValue.cx, _ttoi(strHeight)))); }