MFC 컨트롤을 ActiveX: 직렬화

이 문서는 ActiveX 컨트롤을 serialize 하는 방법을 설명 합니다.Serialization 읽거나 디스크 파일과 같은 영구적 저장소 매체에 기록 하는 프로세스입니다.클래스의 serialization에 대 한 기본 제공 지원 Microsoft Foundation 클래스 (MFC) 라이브러리를 제공 CObject.COleControlActiveX 컨트롤 속성 교환 메커니즘을 사용 하 여이 지원을 확장합니다.

ActiveX 컨트롤에 대 한 직렬화를 재정의 하 여 구현 된 COleControl::DoPropExchange.이 함수를 로드 하는 동안 호출 하 고 컨트롤 개체의 저장 멤버 변수 또는 멤버 변수로 변경 알림 구현 하는 모든 속성을 저장 합니다.

다음 항목에서는 ActiveX 제어를 직렬화 하는 작업에 관련 된 주요 문제를 다룹니다.

  • 구현 DoPropExchange 사용자 컨트롤 개체를 serialize 하는 함수

  • 직렬화 프로세스를 사용자 지정합니다.

  • 버전 지원 구현

DoPropExchange 함수 구현

ActiveX 컨트롤 마법사를 사용 하 여 컨트롤 프로젝트를 생성 하는 경우 컨트롤 클래스에는 기본 구현을 비롯 하 여 여러 가지 기본 처리기 함수가 자동으로 추가 됩니다 COleControl::DoPropExchange.다음 예제에서는 ActiveX 컨트롤 마법사에서 만든 클래스에 추가 하는 코드를 보여 줍니다.

void CMyAxUICtrl::DoPropExchange(CPropExchange* pPX)
{
   ExchangeVersion(pPX, MAKELONG(_wVerMinor, _wVerMajor));
   COleControl::DoPropExchange(pPX);

   // TODO: Call PX_ functions for each persistent custom property.
}

영구 속성을 만들려면 원하는 경우 수정 DoPropExchange 속성 교환 함수 호출을 추가 합니다.기본값은 CircleShape 속성에 있는 사용자 지정 부울 CircleShape 속성의 serialization에 다음 예제에서는 TRUE:

void CMyAxSerCtrl::DoPropExchange(CPropExchange* pPX)
{
    ExchangeVersion(pPX, MAKELONG(_wVerMinor, _wVerMajor));
    COleControl::DoPropExchange(pPX);


...


   PX_Bool(pPX, _T("CircleShape"), m_bCircleShape, TRUE);
}

다음 표에서 컨트롤의 속성을 serialize 하는 데 사용할 수 있는 속성 교환 함수가 나열:

속성 교환 함수

목적

PX_Blob)

이진 대형 개체 (BLOB) 데이터 속성 형식을 serialize합니다.

PX_Bool)

형식이 부울 속성을 serialize합니다.

PX_Color)

색 형식 속성을 serialize합니다.

PX_Currency)

형식을 serialize CY (통화) 속성입니다.

PX_Double)

형식을 serialize 이중 속성입니다.

PX_Font)

글꼴 형식의 속성을 serialize합니다.

PX_Float)

형식을 serialize float 속성입니다.

PX_IUnknown)

형식의 속성을 serialize 합니다. LPUNKNOWN.

PX_Long)

형식을 serialize 속성입니다.

PX_Picture)

Picture 속성 형식을 serialize합니다.

PX_Short)

형식을 serialize 짧은 속성입니다.

PX_String)

형식을 serialize CString 속성입니다.

PX_ULong)

형식을 serialize ULONG 속성입니다.

PX_UShort)

형식을 serialize USHORT 속성입니다.

이러한 속성 교환 함수에 대 한 자세한 내용은 지 속성을 OLE 컨트롤 에 있는 MFC 참조.

DoPropExchange 기본 동작 사용자 지정

기본 구현은 DoPropertyExchange (에서처럼 이전 항목) 기본 클래스를 호출 COleControl.이 자동으로 지원 되는 속성 집합을 serialize COleControl, 컨트롤의 사용자 지정 속성만 serialize 할 보다 더 많은 저장소 공간을 사용 합니다.이 함수 호출을 제거 하면 중요 하 게 생각 하는 속성만 serialize 할 개체 수 있습니다.가 컨트롤 구현 된 스톡 속성 상태 저장 하거나 명시적으로 추가 하지 않는 한 컨트롤 개체를 로드할 때 serialize 됩니다 PX_ 를 호출 합니다.

버전 지원 구현

지원 버전 수정 된 ActiveX 컨트롤을 새로운 지속적 속성을 추가 하 고 여전히 감지 하 고 컨트롤의 이전 버전에서 만든 영구 상태를 로드할 수 있습니다.컨트롤의 버전을 사용할 수 있도록 영구 데이터의 일부로 호출 COleControl::ExchangeVersion 컨트롤의 DoPropExchange 함수.ActiveX 컨트롤을 ActiveX 컨트롤 마법사를 사용 하 여 만들어진 경우이 호출은 자동으로 삽입 됩니다.버전 지원이 필요 하지 않으면 제거할 수 있습니다.그러나 비용 컨트롤 크기가 매우 작은 (4 바이트) 자유롭게 버전 지원.

컨트롤 ActiveX 컨트롤 마법사로 만들어지지 않은 경우 호출을 추가 COleControl::ExchangeVersion 다음 줄 시작 부분에 삽입 하 여 해당 DoPropExchange 함수 (호출 하기 전에 COleControl::DoPropExchange):

void CMyAxSerCtrl::DoPropExchange(CPropExchange* pPX)
{
    ExchangeVersion(pPX, MAKELONG(_wVerMinor, _wVerMajor));
    COleControl::DoPropExchange(pPX);


...


}

사용할 수 있습니다 DWORD 버전 번호입니다.ActiveX 컨트롤 마법사에 의해 생성 된 프로젝트를 사용 _wVerMinor_wVerMajor 를 기본으로 합니다.이러한 프로젝트의 ActiveX 컨트롤 클래스의 구현 파일에 정의 된 전역 상수입니다.나머지를 DoPropExchange 함수를 호출할 수 있습니다 CPropExchange::GetVersion 언제 든 지 버전을 저장 하거나 검색 하는 검색 합니다.

다음 예제에서는 버전 1이 샘플에서는 컨트롤을 "ReleaseDate" 속성만이 있습니다.버전 2는 "OriginalDate" 속성을 추가합니다.컨트롤의 이전 버전에서 영구 상태를 로드 하도록 지시 하는 경우 새 기본 값을 속성에 대 한 멤버 변수를 초기화 합니다.

void CMyAxSerCtrl::DoPropExchange(CPropExchange* pPX)
{
    ExchangeVersion(pPX, MAKELONG(_wVerMinor, _wVerMajor));
    COleControl::DoPropExchange(pPX);

   PX_Long(pPX, _T("ReleaseDate"), m_ReleaseDate);
   if (pPX->GetVersion() >= MAKELONG(0, 2))
   {
      PX_Long(pPX, _T("OriginalDate"), m_OriginalDate);
   }
   else
   {
      if (pPX->IsLoading())
         m_OriginalDate = 0;
   }


...


}

기본적으로 컨트롤에 "오래 된 데이터를 최신 형식으로 변환" 합니다.컨트롤의 버전 2를 버전 1에 의해 저장 된 데이터를 로드 하는 경우 다시 저장 하면 예를 들어,이 버전 2 서식을 작성 합니다.컨트롤 형식 마지막 읽기에서 데이터를 저장 하려면 원하는 경우 전달할 FALSE 를 호출할 때 세 번째 매개 변수로 ExchangeVersion.이 세 번째 매개 변수는 선택적 이며입니다 TRUE 기본적으로.

참고 항목

개념

MFC 컨트롤을 ActiveX