2011-09-18 2 views
2

가능한 중복 :
Why does GetSafeHwnd() return zero in an ActiveX control?액티브 X와 HWND를 COleControl

나는 액티브 통신 구성 요소를 구축하고있다. 나는 실제로 모든 커뮤니케이션 일을하는 수업을 가지고있다. 클래스가 메시지를 소유자 (COleControl에서 파생 된 소유자)에게 전달할 수 있도록 Hwnd 핸들을 사용하여이 클래스를 인스턴스화해야합니다.

그러나 델파이로 앱 빌드에서 ActiveX 컨트롤을 사용할 때 this->GetSafeHwnd();에 의해 반환 된 핸들은 NULL을 반환합니다. ('this'포인터는 내가 COleControl에서 파생 한 클래스의 인스턴스입니다.)

누구에게도 해결책이 있습니까?

+0

이것이 이전 질문과 다른 이유를 설명하십시오. http://stackoverflow.com/questions/7453225/why-does-getsafehwnd-return-zero-in-anactive-control –

답변

1

아마도 컨트롤이 창없는 활성화를 허용 할 수 있습니다. 이러한 제어는 자체 윈도우가 없어도 상위 창 내부에서 렌더링 될 수 있습니다. 다른 컨테이너는이 컨트롤을 윈도우 또는 윈도우 없음으로 만들 수 있습니다.

컨트롤의 "창없는 활성화 허용"속성을 비활성화합니다. 그러나 컨트롤 렌더링 성능이 저하 될 수 있습니다. 내부 통신을 위해 보이지 않는 다른 창을 생성 할 수 있으며 창없는 활성화를 허용합니다.

자세한 내용은 COleControl :: GetControlFlags 및 windowlessActivate 플래그를 참조하십시오.

+0

다른 보이지 않는 윈도우와 내 ActiveX 컨트롤 간의 내부 통신을 어떻게 만들 수 있습니까? 샘플을 보여 주시겠습니까? –

+0

나는 그것을 발언했지만 아직 문제가있다. DWORD CPINActiveCtrl :: GetControlFlags() { \t DWORD dwFlags = COleControl :: GetControlFlags(); \t // dwFlags | = windowlessActivate; \t dwFlags | = canOptimizeDraw; \t return dwFlags; }' –

+0

컨트롤 초기화 코드 어딘가에 보이지 않는 창을 만듭니다. 이 창으로 보낸 메시지를 처리하고 컨트롤 메서드를 직접 호출합니다. –