지 속성 및 초기화 최적화

기본적으로, 지 속성 및 초기화 하는 컨트롤에서에서 처리 되는 DoPropExchange 멤버 함수입니다.이 함수 호출을 여러 일반적인 컨트롤에 들어 있습니다. PX_ 함수 (PX_Color, PX_Font등), 각 속성에 대 한 하나.

이 이렇게 장점이 있는 단일 DoPropExchange 구현을 초기화, 이진 형식 및 지 속성에서 일부 컨테이너에서 사용 하는 소위 "속성 모음" 형식 사용할 수 있습니다.이 함수는 속성에 대 한 기본값으로 하나의 장소에서 모든 정보를 제공합니다.

그러나이 보편적인 사항 비용의 효율성을 제공합니다.PX_ 함수 가져오기는 본질적으로 덜 다계층된 구현을 통해 융통성 방법에 비해 좀더 직접적 이지만 보다 유연 합니다.또한 컨트롤에 기본값을 전달 하는 경우는 PX_ 작동, 기본값은 기본값은 반드시 사용할 필요가 없을 때 상황에 때마다 제공 되어야 합니다.기본 값을 생성 하는 중요 한 작업 (예 앰비언트 속성에서 값을 가져올 때는), 다음 추가 되 면 불필요 한 작업 기본 값이 사용 되지 않는 경우에 수행 됩니다.

사용자 컨트롤을 재정의 하 여 컨트롤의 이진 지 속성 성능을 향상 시킬 수 있습니다 Serialize 함수.이 멤버 함수는 기본 구현을 호출 하 여 DoPropExchange 함수.이 재정의 하면 이진 지 속성은 보다 직접적인 구현을 제공할 수 있습니다.예를 들어,이 점을 고려해 야 DoPropExchange 함수:

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

   PX_Bool(pPX, _T("BoolProp"), m_BoolProp, TRUE);
   PX_Short(pPX, _T("ShortProp"), m_ShortProp, 0);
   PX_Color(pPX, _T("ColorProp"), m_ColorProp, RGB(0xFF,0x00,0x00));
   PX_String(pPX, _T("StringProp"), m_StringProp, _T(""));
}

이진 지 속성을 지정한이 컨트롤의 성능을 향상 시키기 위해 재정의할 수 있는 Serialize 다음과 같은 기능:

void CMyAxOptCtrl::Serialize(CArchive& ar)
{ 
    SerializeVersion(ar, MAKELONG(_wVerMinor, _wVerMajor));
    SerializeExtent(ar);
    SerializeStockProps(ar);

    if (ar.IsLoading())
    {
        ar >> m_BoolProp;
        ar >> m_ShortProp;
        ar >> m_ColorProp;
        ar >> m_StringProp;
    }
    else
    {
        ar << m_BoolProp;
        ar << m_ShortProp;
        ar << m_ColorProp;
        ar << m_StringProp;
    }
}

dwVersion 지역 변수를 사용한 버전 컨트롤의 영구 상태에 로드 되거나 저장 된 검색 합니다.호출 대신이 변수를 사용할 수 있습니다 CPropExchange::GetVersion.

작은 공간에 영구적인 형식으로 저장 하는 BOOL 속성 (생성 형식과 호환 되는 상태로 유지 하 고 PX_Bool), 속성으로 저장할 수는 바이트, 다음과 같이:

if (ar.IsLoading())
{
   BYTE bTmp;
   ar >> bTmp;
   m_BoolProp = (BOOL)bTmp;
   // other properties...
}
else
{
   ar << (BYTE)m_BoolProp;
   // other properties...
}

캐스팅 하지 않고 로드 하는 경우에는 임시 변수를 사용 하며 해당 값이 할당 되 고, m_boolProp 에 있는 바이트 참조.캐스팅 방법을 1 바이트의 유발 m_boolProp 수정 하 고, 초기화 되지 않은 나머지 바이트를 두고 있습니다.

동일한 컨트롤을 재정의 하 여 컨트롤의 초기화 최적화할 수 있습니다 COleControl::OnResetState 는 다음과 같이 하십시오.

void CMyAxOptCtrl::OnResetState()
{
   ResetVersion(MAKELONG(_wVerMinor, _wVerMajor));
   ResetStockProps();

   m_BoolProp = TRUE;
   m_ShortProp = 0;
   m_ColorProp = RGB(0xFF,0x00,0x00);
   m_StringProp.Empty();
}

하지만 SerializeOnResetState 재정의 된는 DoPropExchange 함수 유지 되어야 그대로 지 속성을 속성 모음 형태로 사용 되기 때문에.모든 세 가지 메커니즘 컨테이너 어떤 관계의 지 속성을 사용 하 여 컨트롤 속성을 지속적으로 관리 하도록 이러한 기능을 유지 하는 것이 중요 합니다.

참고 항목

개념

MFC 컨트롤을 ActiveX: 최적화