몇일간 여기 저기 돌아 다니면서 찾아 도 보고 했는데
잘 모르겠네요. 여기서도 검색해서 내용을 읽어 봤지만
자세히 나오지를 않아서요.
ATL COM 으로 만든 건데요.
기존에 글들 대부분이 MFC 로 만든 ActiveX 에 param 으로
초기화 하는 설명이 대부분이고 ATL COM 할려면 어떤 부분
에서 처리를 해야 하는지에 대한건 별로 없더라고요.
(있긴 한데 간략하게 써 있어서 알수가 없었어요)
간략하게 html 문서 상에서 param 을 이용해서 문자를 저장하는
소스나 하는법좀 가르켜 주셨으면 합니다.
즐거운 하루 되세요.
혹시 해보신분 계시면 꼭좀 부탁합니다 ㅜ,.ㅜ
.... |
mildblue7 (등록일 : 2002-04-16 10:36) |
* ATL Property Bag 사용하기 html에서 <OBJECT> <PARAM name="USerCode" value="10"> </OBJECT> 이런 식으로 초기화 값을 넘기고 싶을 때가 있다. Composition control 로 만들어진 ActiveX를 기준으로 하였다. Simple Object로 만든 ActiveX라면 별도의 인터페이스를 상속받아야 한다. ATL 에서 제공하는 IPersistPropertyBagImpl 클래스는 멤버 변수 m_bRequiresSave 를 사 용하는데, 이 변수는 <atlctl.h> 헤더 파일의 CComControlBase 클래스에 정의되어 있 다. CComControlBase를 그대로 쓸 수 없으니, 이에서 파생된 가장 간단한 템플릿 클래스인 CComControl<> 클래스를 상속받으면 된다. CompositeControl 은 위저드에 의해서 CComCompositeControl에서 파생되는데, class CComCompositeControl : public CComControl< T, CAxDialogImpl< T > > 이기 때문에 별도로 CComControl<>을 상속받을 필요가 없다. 여기서는 CEchatRecorder 라는 클래스를 사용한다. 0. CComControl<>에서 파생되지 않았다면 클래스 상속 목록에 CComControl<> 을 추가한 다. class ATL_NO_VTABLE CEchatRecorder : ..... ( 중간 생략 ) ...... public CComControl<CEchatRecorder> 이런 식으로 한다. 1. PersistPropertyBagImpl 을 상속받는다. AcitveX 클래스의 상속 리스트에 다음을 추가한다. class ATL_NO_VTABLE CEchatRecorder : ..... ( 중간 생략 ) ...... public IPersistPropertyBagImpl<CEchatRecorder> 2. COM 맵에 PersistPropertyBag의 엔트리 포인트를 추가한다. BEGIN_COM_MAP(CEchatRecorder) COM_INTERFACE_ENTRY(IPersistPropertyBag) END_COM_MAP() 3. 초기값으로 설정할 변수를 다룰 프로퍼티를 추가한다. 중요한 것은 반드시!!! put/get 동시에 추가해야 한다는 점이다. SerUser 라는 프로퍼티를 주가해 보자. 그러면 idl 파일에, [propget, id(1), helpstring("property UserCode")] HRESULT UserCode([out, retval] long *pVal); [propput, id(1), helpstring("property UserCode")] HRESULT UserCode([in] long newVal); 이런 식으로 추가가 될 것이다. 여기서 id 값은 이전에 메서드니 프로퍼티를 추가했었다 면 1이 아닌 값이 할당될테지만, 어느 경우에서나 put/get은 동일한 id를 갖는다. 4. PROP_MAP에 프로퍼티 엔트리 포인터를 추가해 준다. BEGIN_PROP_MAP(CEchatRecorder) PROP_ENTRY("UserCode", 1, CLSID_EchatRecorder ) END_PROP_MAP() note. <PARAM> 으로 넘긴 값은 AcviteX의 OnInitDialog()가 호출되기 전에 세팅된다. <PARAM> 으로 넘길 프로퍼티의 초기값을 설정해야 한다면 OnInitDialog() 안이 아니라 생성자에 서 초기값을 설정하라. 그렇지 않으면 <PARAM>에서 넘어간 값이 OnInitDialog()에서 덮어씌워진다. |
'기본 카테고리' 카테고리의 다른 글
CString , BSTR ,char ,CComVariant 간의 자료형변환 (0) | 2007.07.12 |
---|---|
Hosting the Windows Media Player Control in a Windows Application (0) | 2007.07.12 |
일본 환타CF (0) | 2007.07.10 |
atl composite 한글 Unicode 컴파일 또는 ... (0) | 2007.07.05 |
스타크래프트2 ( starcraft2 ) 월드와이드 인비테이션 실제 시연 동영상 (0) | 2007.05.26 |