ALT로 만든 ActiveX Control  두 번째 ---
원본: http://www7.inforyoma.or.jp/~bono/junks/atlactxctrlsample.html

*** property 추가

property를 추가한다. 여기에서 디폴트로 컨트롤에 표시되고 있는 문자열 "ATL 3.0 : SampleCtrl"을 html 문서에서 넘겨주는 파라메타로 출력하기 위해서이다.
IDL 프롭퍼티의 추가에 대응하는 CSampleCtrl의 메소드를 추가한다.
[ClassView] 그리고 ISampleCtrl 를 오른쪽 마우스 버턴을 클릭해, 표시되는 pop-up menu로부터 [Add Property]를 선택한다.

[Add Property to Interface] 대화 상자가 떠면, [Property Type]에 BSTR, [Property Name]에 DisplayString을 설정해 ,[OK]를 누른다.(주: 화면엔 둘다 [Property]로 나오지만 위에 있는게 [Property Type], 아래 있는게 [Property Name]이다)

 

다음에 , 프로퍼티를 저장하기 위한 멤버 변수 CComBSTR m_DisplayString를 SampleCtrl.h 파일에  추가한다.

 

다음에 , 값을 프로퍼티 m_DisplayString를 셋팅하고 값을 얻어오는 함수를 보자.
조금 전 , 추가된 CSampleCtrl.cpp에 get_DisplayString(),put_DisplayString()에 코드를 추가할 것이다.

 

멤버 변수 m_DisplayString에 저장되어 있는 값을 CSampleCtrl.h의 OnDraw()에서 출력하려면 다음과 같이 한다.
WideCharToMultiByte함수로 유니코드를 멀티바이트 코드변환시키고 있다.

 

이것으로, 프로퍼티를 표시할 수 있을 것 같지만 아직도 할 일이 남아있다.
웹브라우즈 등에서 프로퍼티를 설정하고 싶은 경우 ,IPersistPropertyBag를 추가할 필요가 있다.
ATL에서는 IPersistPropertyBagImpl을  상속받는 것으로 IPersistPropertyBag추가할수있다.
CSampleCtrl.h 클래스에 다음과 같이 추가하면 된다.
 
public IPersistPropertyBagImpl<CSampleCtrl> //IPersistPropertyBag 프로퍼티 추가

그리고 BEGIN_COM_MAP(CSampleCtrl)과 END_COM_MAP()의 사이에 다음 코드를 추가한다.
COM_INTERFACE_ENTRY(IPersistPropertyBag)

마지막으로 , 프로퍼티의 명칭을 정의하기 위해, BEGIN_PROP_MAP(CSampleCtrl)과 END_PROP_MAP()의 사이에 다음 코드를 추가한다.
PROP_ENTRY("DisplayString", 1, GetObjectCLSID())

두 번째 파라메터 1은 위저드로 IDL에 추가된 DisplayString의 프로퍼티 ID이다.

빌드가 끝나면 , HTML(SampleCtrl.htm)을 다음과 같이 편집한다.

실행하면 다음과 같은 같은 보안 경고 메시지 박스가 뜨게 될 것이다. 컨트롤이 안전하다는걸 마킹 하지 않았기 때문이다. 우선 무시하고 [예]를 클릭하면 실행화면을 볼수있을것이다.

보안 문제는 3편에 가서 해결할것이다.