블로그 이미지
랜달프

calendar

1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31

Notice


    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 에서 넘어온값을 덮어버린다.

    출처 (작성자)   이노릭스(김춘구)

    posted by 랜달프