void CXTPChartRangeBarSeriesLabel::DoPropExchange(CXTPPropExchange* pPX)
{
	CXTPChartDiagram2DSeriesLabel::DoPropExchange(pPX);

	PX_Enum(pPX, _T("Position"), m_nPosition, xtpChartRangeBarLabelOutside);
	PX_Enum(pPX, _T("Type"), m_nType, xtpChartRangeBarTwoLabels);
}
void CXTPChartFillStyle::DoPropExchange(CXTPPropExchange* pPX)
{
	if (pPX->IsLoading())
	{
		CString strFillMode, strGradientDirection;

		PX_String(pPX, _T("FillMode"), strFillMode);

		if (strFillMode.CompareNoCase(_T("Gradient")) == 0)
		{
			m_nFillMode = xtpChartFillGradient;
			PX_String(pPX, _T("GradientDirection"), strGradientDirection);

			for (int i = 0; i < _countof(lpszGradientDirection); i++)
			{
				if (strGradientDirection.CompareNoCase(lpszGradientDirection[i]) == 0)
				{
					m_nGradientDirection = (XTPChartGradientDirection)i;
					break;
				}
			}

		}
		else if (strFillMode.CompareNoCase(_T("Empty")) == 0)
		{
			m_nFillMode = xtpChartFillEmpty;
		}
		else if (strFillMode.CompareNoCase(_T("Hatch")) == 0)
		{
			m_nFillMode = xtpChartFillHatch;

			PX_Enum(pPX, _T("HatchStyle"), m_nHatchStyle, xtpChartHatchStyleSolidDiamond);
		}
		else
		{
			m_nFillMode = xtpChartFillSolid;
		}
	}
	else
	{
		CString strFillMode = m_nFillMode == xtpChartFillEmpty ? _T("Empty") : m_nFillMode == xtpChartFillGradient ? _T("Gradient") :
			m_nFillMode == xtpChartFillHatch ? _T("Hatch") : _T("");

		PX_String(pPX, _T("FillMode"), strFillMode, _T(""));

		if (m_nFillMode == xtpChartFillGradient)
		{
			CString  strGradientDirection = lpszGradientDirection[m_nGradientDirection];

			PX_String(pPX, _T("GradientDirection"), strGradientDirection);
		}

		if (m_nFillMode == xtpChartFillHatch)
		{
			PX_Enum(pPX, _T("HatchStyle"), m_nHatchStyle, xtpChartHatchStyleHorizontal);
		}
	}

}
void CXTPChartTitle::DoPropExchange(CXTPPropExchange* pPX)
{
	PX_Bool(pPX, _T("Visible"), m_bVisible, FALSE);
	PX_Enum(pPX, _T("Docking"), m_nDocking, xtpChartDockTop);
	PX_Enum(pPX, _T("Alignment"), m_nAlignment, xtpChartAlignCenter);
	PX_Bool(pPX, _T("Antialiasing"), m_bAntialiasing, TRUE);
	PX_Int(pPX, _T("Indent"), m_nIndent, 0);
	PX_Color(pPX, _T("TextColor"), m_clrTextColor);
	PX_String(pPX, _T("Text"), m_strText);

	PX_Font(pPX, _T("Font"), m_pFont);
}
void CXTPControlCustom::DoPropExchange(CXTPPropExchange* pPX)
{
	CXTPControlButton::DoPropExchange(pPX);

	PX_Rect(pPX, _T("Borders"), m_rcBorders, CRect(0, 0, 0, 0));
	PX_Size(pPX, _T("ControlSize"), m_szControl, CSize(0, 0));
	PX_Enum(pPX, _T("VerticalOptions"), m_verticalOptions, xtpVerticalHide);

	if (pPX->GetSchema() > _XTP_SCHEMA_861)
	{
		PX_Int(pPX, _T("ControlId"), m_nControlID, 0);
	}

	if (pPX->IsLoading() && m_nControlID != 0)
	{
		CXTPCommandBars* pCommandBars = ((XTP_COMMANDBARS_PROPEXCHANGE_PARAM*)pPX->m_dwData)->pCommandBars;
		ASSERT(pCommandBars->IsKindOf(RUNTIME_CLASS(CXTPCommandBars)));
		ASSERT(pCommandBars && pCommandBars->GetSite());

		CWnd* pWnd = FindChildWindow(pCommandBars, m_nControlID);

		if (pWnd)
		{
			m_hwndControl = pWnd->GetSafeHwnd();
		}

	}
}
void CXTPChartLineStyle::DoPropExchange(CXTPPropExchange* pPX)
{
	PX_Int(pPX, _T("Thickness"), m_nThickness, 1);
	PX_Enum(pPX, _T("DashStyle"), m_nDashStyle, xtpChartDashStyleSolid);

	if (pPX->IsStoring())
	{
		int nCount = (int)m_arrDashArray.GetSize();

		PX_Int(pPX, _T("DashArray"), nCount, 0);

		for (int i = 0; i < nCount; i++)
		{
			CString strSection;
			strSection.Format(_T("Dash%d"), i);

			PX_Float(pPX, strSection, m_arrDashArray[i]);
		}
	}
	else
	{
		int nCount;
		PX_Int(pPX, _T("DashArray"), nCount, 0);

		m_arrDashArray.SetSize(nCount);

		for (int i = 0; i < nCount; i++)
		{
			CString strSection;
			strSection.Format(_T("Dash%d"), i);

			PX_Float(pPX, strSection, m_arrDashArray[i]);
		}
	}
}
void CXTPControlScrollBar::DoPropExchange(CXTPPropExchange* pPX)
{
	CXTPControl::DoPropExchange(pPX);

	PX_Int(pPX, _T("Min"), m_nMin, 0);
	PX_Int(pPX, _T("Max"), m_nMax, 100);
	PX_Int(pPX, _T("Pos"), m_nPos, 0);
	PX_Enum(pPX, _T("ScrollBarStyle"), m_scrollBarStyle, xtpScrollStyleDefault);
}
void CXTPChartMarker::DoPropExchange(CXTPPropExchange* pPX)
{
	PX_Bool(pPX, _T("BorderVisible"), m_bBorderVisible, TRUE);
	PX_Color(pPX, _T("BorderColor"), m_clrBorderColor);
	PX_Color(pPX, _T("Color"), m_clrColor);
	PX_Enum(pPX, _T("Type"), m_nType, xtpChartMarkerCircle);
	PX_Int(pPX, _T("Size"), m_nSize, 0);
	PX_Bool(pPX, _T("Visible"), m_bVisible, TRUE);

	CXTPPropExchangeSection secFillStyle(pPX->GetSection(_T("FillStyle")));
	m_pFillStyle->DoPropExchange(&secFillStyle);
}
void CXTPTaskPanelGroup::DoPropExchange(CXTPPropExchange* pPX)
{
	CXTPTaskPanelItem::DoPropExchange(pPX);

	BOOL bExpanded = IsExpanded();

	PX_Bool(pPX, _T("CaptionVisible"), m_bCaptionVisible, TRUE);
	PX_Bool(pPX, _T("Expandable"), m_bExpandable, TRUE);
	PX_Bool(pPX, _T("Expanded"), bExpanded, FALSE);
	PX_Bool(pPX, _T("Special"), m_bSpecial, FALSE);
	PX_Enum(pPX, _T("Layout"), m_itemLayout, xtpTaskItemLayoutDefault);
	PX_Rect(pPX, _T("MarginsInner"), m_rcMarginsInner, CXTPTaskPanelPaintManager::rectDefault);
	PX_Rect(pPX, _T("MarginsOuter"), m_rcMarginsOuter, CXTPTaskPanelPaintManager::rectDefault);
	PX_Size(pPX, _T("IconSize"), m_szItemIcon, CSize(0));

	if (pPX->IsLoading())
	{
		m_pItems->m_pPanel = m_pPanel;
		SetExpanded(bExpanded);
	}

	CXTPPropExchangeSection secItems(pPX->GetSection(_T("Items")));
	m_pItems->DoPropExchange(&secItems);
}