MFC 컨트롤을 ActiveX: ActiveX 컨트롤에 있는 그림을 사용
이 문서에서는 일반적인 그림 형식 및 ActiveX 컨트롤을 구현 하는 방법을 설명 합니다.다음 내용을 다룹니다.
사용자 지정 그림 속성 개요
ActiveX 컨트롤에는 사용자 지정 Picture 속성 구현
컨트롤 프로젝트에 추가
사용자 지정 그림 속성 개요
그림 형식 그룹의 일부 ActiveX 컨트롤에 공통 된 형식 중 하나입니다.그림 형식 메타 파일, 비트맵 또는 아이콘을 처리 하는 ActiveX 컨트롤에 표시 되는 그림을 지정할 수 있습니다.사용자 지정 그림 그림 개체 및 사용자 액세스 제어의 Picture 속성에 Get/Set 함수를 사용 하 여 구현 됩니다.컨트롤 사용자가 스톡 그림 속성 페이지를 사용 하 여 사용자 지정 Picture 속성에 액세스 합니다.
표준 그림 형식 외에, 글꼴 및 색 형식을 사용할 수도 있습니다.ActiveX 컨트롤에 표준 글꼴 종류를 사용 하 여에 대 한 자세한 내용은 ActiveX 컨트롤 MFC: 글꼴을 사용 하 여.
ActiveX 컨트롤 클래스 컨트롤 내에 Picture 속성을 구현 하려면 사용할 수 있습니다 여러 구성 요소를 제공 합니다.이러한 구성 요소는 다음과 같습니다.
CPictureHolder 클래스입니다.
이 클래스는 사용자 지정 Picture 속성에 의해 표시 되는 항목에 대 한 그림 개체와 기능에 쉽게 액세스를 제공 합니다.
속성 형식에 대 한 지원 LPPICTUREDISP, Get/Set 함수를 구현 합니다.
Picture 형식을 지 원하는 클래스 보기 사용자 지정 속성 또는 속성을 신속 하 게 추가할 수 있습니다.클래스 뷰를 사용 하 여 ActiveX 컨트롤 속성 추가 대 한 자세한 내용은 ActiveX 컨트롤 MFC: 속성.
컨트롤의 Picture 속성 또는 속성을 조작 하는 속성 페이지입니다.
이 속성 페이지는 ActiveX 컨트롤에 사용할 수 있는 스톡 속성 페이지의 그룹의 일부입니다.ActiveX 컨트롤 속성 페이지에 대 한 자세한 내용은 MFC ActiveX 컨트롤: 스톡 속성 페이지를 사용 하 여
ActiveX 컨트롤에는 사용자 지정 Picture 속성 구현
이 섹션에서 설명한 단계를 완료 하면 컨트롤 사용자가 선택한 그림을 표시할 수 있습니다.사용자가 현재 그림을 표시 하 고 다른 그림을 선택할 수 있도록 하는 찾아보기 버튼이 있습니다 속성 페이지를 사용 하 여 표시 된 그림을 변경할 수 있습니다.
비슷한 그림 형식 사용자 지정 속성을 지원 해야 된다는 주된 차이점은 다른 속성을 구현 하는 데 사용 되는 프로세스에서 사용 하는 사용자 지정 Picture 속성 구현 됩니다.ActiveX 컨트롤에서 Picture 속성의 항목으로 그려야 하기 때문에 완벽 하 게 구현 되기 전에 많은 추가 및 수정 속성을 만들어야 합니다.
사용자 지정 Picture 속성을 구현 하려면 다음을 수행 해야 합니다.
컨트롤 프로젝트에 코드를 추가 합니다..
표준 그림 속성 페이지 ID 형식의 데이터 멤버 CPictureHolder, 및 사용자 정의 형식의 속성을 LPPICTUREDISP 는 Get/Set 구현이 추가 해야 합니다.
컨트롤 클래스에 몇 가지 함수를 수정.
이러한 수정 사항은 ActiveX 컨트롤의 그리기를 담당 하는 여러 가지 함수가 만들어집니다.
컨트롤 프로젝트에 추가
표준 Picture 속성 페이지의 속성 페이지 ID를 추가 하려면 후 다음 줄을 삽입은 BEGIN_PROPPAGEIDS 매크로 컨트롤 구현 파일에서 (.CPP):
PROPPAGEID(CLSID_CPicturePropPage)
또한 count 매개 변수를 증가 해야 사용자 BEGIN_PROPPAGEIDS 씩 매크로.다음 줄이를 보여줍니다.
BEGIN_PROPPAGEIDS(CMyAxPicCtrl, 2)
추가 하는 CPictureHolder 컨트롤 클래스에 데이터 멤버로 컨트롤 헤더 파일에 선언에 protected 섹션 아래에 다음 줄을 삽입 (.H):
CPictureHolder m_pic;
해당 데이터 멤버의 이름을 지정 하는 것이 필요 하지 않습니다 m_pic. 원하는 이름을 사용할 수 있습니다.
그런 다음 Picture 형식을 지 원하는 사용자 지정 속성을 추가 합니다.
속성 추가 마법사를 사용 하 여 사용자 지정 picture 속성을 추가 하려면
컨트롤의 프로젝트를 로드 합니다.
클래스 뷰에서 컨트롤의 라이브러리 노드를 확장 합니다.
(두 번째 라이브러리 노드 노드) 컨트롤 인터페이스 노드를 마우스 오른쪽 단추로 바로 가기 메뉴를 엽니다.
바로 가기 메뉴에서 선택 추가 다음 속성 추가.
에 속성 이름 상자에 속성 이름을 입력 합니다.예를 들어 위해, ControlPicture 이 절차에서 사용 됩니다.
에 속성 형식 상자에서 IPictureDisp * 속성 형식에 대 한.
에 대 한 형식 구현를 클릭 Get/Set 메서드.
Get 및 Set 함수에 대 한 고유 이름을 입력 하거나 기본 이름을 적용 합니다.(이 예제에서는 기본 이름 GetControlPicture 및 SetControlPicture 사용 됩니다.)
마침을 클릭합니다.
속성 추가 마법사 컨트롤 헤더의 디스패치 맵 주석 사이 다음 코드를 추가 합니다. (.H) 파일:
IPictureDisp* GetControlPicture(void);
void SetControlPicture(IPictureDisp* pVal);
또한 다음 코드 컨트롤 구현 디스패치 맵에 넣어둔 (.Cpp).
DISP_PROPERTY_EX_ID(CMyAxPicCtrl, "ControlPicture", dispidControlPicture,
GetControlPicture, SetControlPicture, VT_PICTURE)
속성 추가 마법사는 컨트롤 구현 파일에 다음 두 개의 스텁 함수를 또한 추가:
IPictureDisp* CWizardGenCtrl::GetControlPicture(void)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
// TODO: Add your dispatch handler code here
return NULL;
}
void CWizardGenCtrl::SetControlPicture(IPictureDisp* /*pVal*/)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
// TODO: Add your property handler code here
SetModifiedFlag();
}
[!참고]
위의 예제에서 컨트롤 클래스 및 함수 이름은 다를 수 있습니다.
수정 컨트롤 프로젝트
컨트롤 프로젝트에 필요한 추가 변경한 후 ActiveX 컨트롤의 렌더링에 영향을 주는 몇 가지 함수를 수정 해야 합니다.이러한 함수 OnResetState, OnDraw, Get/Set 함수는 사용자 지정 Picture 속성의 컨트롤 구현 파일에 위치 하 고 있습니다.(이 예제에서는 control 클래스 라 CSampleCtrl, CPictureHolder 데이터 멤버 라고 m_pic, 및 사용자 지정 그림 속성 이름입니다 ControlPicture.)
컨트롤에서 OnResetState 기능, 선택적 다음 줄을 추가 하 여 호출 하면 COleControl::OnResetState:
m_pic.CreateEmpty();
이 컨트롤의 그림이 빈 그림으로 설정합니다.
제대로 그림을 그리기 위해 호출 CPictureHolder::Render 컨트롤에 OnDraw 함수.다음 예제와 비슷하게 함수를 수정 합니다.
void CMyAxPicCtrl::OnDraw(CDC* pdc, const CRect& rcBounds, const CRect& /*rcInvalid*/)
{
if (!pdc)
return;
m_pic.Render(pdc, rcBounds, rcBounds);
}
컨트롤의 사용자 지정 picture 속성의 Get 함수에 다음 줄을 추가 합니다.
return m_pic.GetPictureDispatch();
컨트롤의 사용자 지정 Picture 속성 집합 함수에서 다음 줄을 추가 합니다.
m_pic.SetPictureDispatch(pVal);
InvalidateControl();
Picture 속성을 디자인 타임에 추가 된 정보가 런타임에 표시 됩니다 있도록 영구 설정 되어야 합니다.다음 줄을 추가 COleControl-파생 클래스의 DoPropExchange 함수:
PX_Picture(pPX, _T("ControlPicture"), m_pic);
[!참고]
위 예제에서 클래스 및 함수 이름을 다를 수 있습니다.
수정을 완료 한 후 사용자 지정 Picture 속성의 새 기능을 통합 하 고 테스트 컨테이너를 사용 하 여 새 속성을 테스트 하려면 프로젝트를 다시 빌드해야 합니다.테스트 컨테이너에 액세스하는 방법에 대한 자세한 내용은 Test Container를 사용하여 속성 및 이벤트 테스트를 참조하십시오.