ATL 콘트롤 클래스의 이름을 TestCtl 로 설정했다고 가정하자.
1. PersistPropertyBagImpl 과 ObjectSafetyImpl 을 상속받는다.
ObjectSafetyImple 은 보안경고창이 뜨는걸 막는데 쓰인다.
ActiveX 클래스의 상속리스트에 다음을 추가한다.
class ATL_NO_VTABLE CTestCtl :
....... (생략) .......
public IPersistPropertyBagImpl<CTESTCTL>,
public IObjectSafetyImpl<CTESTCTL, INTERFACESAFE_FOR_UNTRUSTED_DATA | INTERFACESAFE_FOR_UNTRUSTED_CALLER>
2. COM맵에 상속받은 클래스의 엔트리 포인트를 추가한다.
BEGIN_COM_MAP(CTestCtl)
....... (생략) ......
COM_INTERFACE_ENTRY(IPersistPropertyBag)
COM_INTERFACE_ENTRY(IObjectSafety)
END_COM_MAP()
3. param 으로 설정할 변수를 다룰 프로퍼티를 추가한다.
클래스 뷰에 보면 ITestCtl 이라는 인터페이스가 보인다.
여기에서 속성을 추가해 준다. 중요한것은 반드시 put/get을
동시에 추가해야 한다는 점이다. UserCode 라는 프로퍼티를
추가하면 idl 파일에 프로퍼티가 생성될것이다.
4. 생성된 프로퍼티의 id 값으로 PROT_MAP에 프로퍼티 엔트리
포인터를 추가해준다.
BEGIN_PROP_MAP(CEchatRecorder)
PROP_ENTRY("UserCode", 1, CLSID_TestCtl )
END_PROP_MAP()
note.
param 태그로 넘길 프로퍼티값을 초기화 해야될 필요가 있다면
생성자에서 초기값을 설정해야한다. 다른곳에서 초기화를 하면
param 에서 넘어온값을 덮어버린다.
출처 (작성자) 이노릭스(김춘구)