속성 페이지는 속성 페이지를 요구 하는 경우 공유를 허용 하는 별도 COM 개체로 구현 됩니다. 컨트롤에 속성 페이지를 추가 하려면 ATL 개체 마법사를 사용할 수 있습니다.
ATL 개체 마법사를 시작 하 고 컨트롤 왼쪽에서 범주를 선택 합니다. 오른쪽에 속성 페이지 를 선택 하 고 을 클릭합니다。
다시 새 개체의 이름을 입력할 수 있도록 대화 상자를 얻는다. PolyProp 개체를 호출 하 고 짧은 이름 편집 상자에 해당 이름을 입력합니다。

알림 인터페이스 편집 상자 밖으로 회색 이다. 이 때문에 속성 페이지는 사용자 지정 인터페이스를 필요 하지 않습니다.
속성 페이지의 제목을 설정 하려면 문자열 탭을 클릭 합니다. 속성 페이지의 제목은 해당 페이지 탭에 표시 되는 문자열입니다. Amp; 입력다각형 제목으로. Doc 문자열 속성 프레임 상태 선 또는 도구 팁에 넣어 사용 하는 설명입니다. 참고가이 문자열 하지만 당신은 현재 표준 속성 프레임 사용 하지는 어쨌든에서 그것을 설정할 수 있습니다. Helpfile 을 생성 하는 순간에, 그래서 그 텍스트 상자에서 항목을 지울 려 하지. 확인 을 누르고 속성 페이지 개체를 만들 것입니다(&A)。

다음 세 개의 파일이 만들어집니다.:
| 파일 | 설명 |
| PolyProp.h | C + + 클래스를 포함 CPolyProp , 속성 페이지를 구현 하는。 |
| PolyProp.cpp | PolyProp.h 파일을 포함。 |
| PolyProp.rgs | 속성 페이지 개체를 등록 하는 레지스트리 스크립트。 |
다음 코드 변경 내용이 또한:
PolyProp 클래스는 Polygon.idl 파일에 추가 됩니다。
이제 속성 페이지에 표시할 필드를 추가 합니다. Polygon.rc 대화 상자에에서는 여기에 귀하의 컨트롤을 삽입 하려면 알려 주는 레이블을 제외한 비어 공지. 해당 레이블을 삭제 하 고 추가 텍스트를 포함 하는 "사이드:". 레이블 옆에 편집 상자를 추가 하 고 ID를 부여IDC_SIDES。

PolyProp.h 파일 상단에 Polygon.h 포함:
# include "Polygon.h"nbsp; / / Ipolyctl의 정의(&N)
이제 활성화를 CPolyProp 클래스 적용 단추를 누를 때 개체의 면 수를 설정 합니다. 변화는 Apply Polyprop.h에서 다음과 같은 작동。
STDMETHOD(Apply)(void)
{
USES_CONVERSION;
ATLTRACE(_T("CPolyProp::Apply\n"));
에 대 한 (UINT I = 0; 난 lt; m_nObjects; i + +)
{
< IPolyCtl, 및 IID_IPolyCtl > CComQIPtr pPoly(m_ppUnk[i]);
짧은 nSides (short)GetDlgItemInt(IDC_SIDES); =
실패 하는 경우 (pPoly-> put_Sides(nSides))
{
CComPtr <IErrorInfo> pError;
CComBSTR strError;
GetErrorInfo (0 & pError);
pError-> GetDescription(&strError);
MessageBox(OLE2T(strError), _T("Error"), MB_ICONEXCLAMATION);
E_FAIL; 반환
}
}
m_bDirty = FALSE;
return S_OK;
}
속성 페이지는 한 번에, 그것에 연결 된 하나 이상의 클라이언트 있다 그래서 Apply 주위를 반복 하 고 호출 하는 함수 put_Sides 편집 상자에서 검색 된 값을 사용 하 여 각 클라이언트에. 각 개체에 대해 QueryInterface 를 수행 하는 CComQIPtr 클래스를 사용 하는 IPolyCtl IUnknown 인터페이스 (에 저장를 m_ppUnk 배열)。
코드는 이제 그 사실은 양쪽 속성을 설정 확인 합니다. 실패 하는 경우 코드는 IErrorInfo 인터페이스에서 오류 정보를 표시 하는 메시지 상자를 표시 합니다. 일반적으로 컨테이너 ISupportErrorInfo 인터페이스에 대 한 개체를 요청 하 고 개체가 설정 오류 정보를 지원 하는지 여부를 확인 하려면 InterfaceSupportsErrorInfo 를 먼저 호출 하는 방법. 하지만 그 수 표를 포기 수 있습니다 컨트롤 이므로。
CComPtr 을 사용 하면 자동으로 인터페이스에서 출시 를 호출할 필요가 없습니다, 참조를 처리 하 여 수 있습니다. CComBSTR 하면 BSTR 처리와 최종 SysFreeString 호출을 수행할 필요가 없습니다. 또한 사용 하면 다양 한 문자열 변환 클래스 중 하나 (이것이 USES_CONVERSION 매크로 함수의 시작 시 추가) 필요한 경우 BSTR 를 변환할 수 있습니다.
또한 적용 단추 사용할 수를 나타내는 속성 페이지의 더티 플래그를 설정 해야 합니다. 사용자 측면 편집 상자에서 값을 변경할 때 발생 합니다. 속성 페이지 클래스 (CPolyProp) 클래스 뷰 에서 단추로 클릭 하 고 바로 가기 menu.nbsp;에서 Windows 메시지 처리기 추가... 를 선택합니다 개체 상자에서 IDC_SIDES를 선택 하 고 EN_CHANGE 메시지 추가(&N)。
지금 하는 polyprop.h에 다음 코드를 추가 합니다 OnChangeSides 함수 (마법사 거기에 넣어 모든 코드를 삭제 하는):
LRESULT OnChangeSides(WORD wNotify, WORD wID, HWND hWnd, BOOLamp; bHandled)
{
SetDirty(TRUE);
0; 반환
}(&A)
OnChangeSides에 대 한 EN_CHANGE 통지와 함께 WM_COMMAND 메시지를 보낼 때 호출 됩니다는 IDC_SIDES 컨트롤. OnChangeSides 다음 호출 SetDirty 전달 사실 속성 페이지는 지금 더러운 하 고 적용 단추를 활성화 해야 합니다。
이제 컨트롤에 속성 페이지를 추가 합니다. ATL 개체 마법사 하지 않습니다이 당신을 위해 자동으로 이후 프로젝트에 컨트롤이 여러 개 있을 수 있습니다. Polyctl.h를 열고 속성 지도에이 줄을 추가:
PROP_ENTRY ("측면", 1, CLSID_PolyProp)
컨트롤의 속성 맵에 지금 이것 처럼 보이는:
BEGIN_PROP_MAP(CPolyCtl)
PROP_DATA_ENTRY ("_cx", m_sizeExtent.cx, VT_UI4)
PROP_DATA_ENTRY ("_cy", m_sizeExtent.cy, VT_UI4)
PROP_ENTRY ("FillColor", DISPID_FILLCOLOR, CLSID_StockColorPage)
PROP_ENTRY ("측면", 1, CLSID_PolyProp)
/ / 예제 항목
/ / PROP_ENTRY ("속성 설명", dispid, clsid)
/ / PROP_PAGE(CLSID_StockColorPage)
END_PROP_MAP()
추가한 수를 PROP_PAGE 하지만, 사용 하는 경우 속성 페이지의 CLSID와 매크로 PROP_ENTRY 매크로 같이, 양쪽 속성 값은 컨트롤을 저장 하는 경우에 저장 됩니다. 매크로에 세 개의 매개 변수는 속성의 DISPID 및 속성에는 속성 페이지의 CLSID 속성 설명 합니다. Visual basic 컨트롤을 로드 하 고 디자인 타임에 면 수를 설정 하는 예를 들어, 경우에 유용 합니다. 면 수 Visual Basic 프로젝트를 다시 로드 복원 이후 면 수 저장。
이제 해당 컨트롤을 빌드 및 ActiveX 컨트롤 테스트 컨테이너에 삽입 합니다. 테스트 컨테이너에서 편집 메뉴에서 클릭 PolyCtl 클래스 개체. 속성 페이지가 나타납니다; 다각형 탭 선택。

처음 적용 단추는 비활성화 됩니다. 양쪽에 값을 입력 하는 시작 상자를 편집 하 고 적용 단추가 활성화 될. 값을 입력을 마친 후 적용 버튼을 클릭 합니다. 컨트롤 표시 변경 하 고 적용 버튼을 다시 비활성화 됩니다. 잘못 된 값을 입력 한에서 설정할 수 있는 오류 설명을 포함 된 메시지 상자가 나타납니다 합니다 put_Sides 함수。
다음 웹 페이지에서 컨트롤을 놓을 게 요。