VS2008 및 ATL로 만든 C++로 작성된 ActiveX 컨트롤이 있습니다. 대부분의 경우, IDispatchImpl을 사용하는 대신 자체의 IDispatchEx 구현을 작성한다는 점을 제외하고는 꽤 표준 (원래 템플릿에서 많이 수정하지 않은 컨트롤)입니다. 이 컨트롤은 Internet Explorer에서만 사용되며 주로 IE8로 테스트했습니다.ATL 컨트롤의 InPlaceActivate가 마우스 이벤트가 발생할 때까지 호출되지 않습니다.
브라우저에서 객체 태그가 호스팅되는 지역 위로 마우스를 움직일 때까지는 아무 이유없이 InPlaceActivate가 호출되지 않습니다. 아무 창도 생성되지 않았습니다. WM_CREATE 메시지는 전송되지 않습니다.
DISPID_READYSTATE 구현을 시도했지만 아무것도 도움이되지 않습니다. SetClientSite
메서드에서 InPlaceActivate(OLEIVERB_UIACTIVATE);
으로 전화를 걸면 일반적으로 작동하지만 확실히 정상적으로 수행 할 수는 없습니다.
왜 이런 일이 발생합니까? 브라우저는 InPlaceActivate를 호출 할 때 (또는 호출이 호출하는 시점)를 어떻게 결정합니까?
페이지에 ATL 컨트롤을 포함하는 데 사용되는 태그는 다음과 같습니다 <object id="plugin" type="application/x-vnd.FirebreathTemplatePlugin" width="300" height="300"></object>
당신은 파일에 대한 전체 소스는 여기에서 찾을 수 있습니다 : http://code.google.com/p/firebreath/source/browse/src/ActiveXPlugin/FBControl.h
, 나는이 여전히 있습니다 DECLARE_OLEMISC_STATUS (OLEMISC_RECOMPOSEONRESIZE | OLEMISC_CANTLINKINSIDE | OLEMISC_INSIDEOUT | OLEMISC_ACTIVATEWHENVISIBLE | OLEMISC_SETCLIENTSITEFIRST ) 내가 실수로 그것을 대체 할 일을 할 수 있나요? – taxilian
죄송합니다, 확실하지 않습니다. 그건 내 최고의 추측이었다. –