제어가 초기화/활성화 된 후 ActiveX 컨트롤을 위해 HWND를 어떻게 얻습니까?

StackOverflow https://stackoverflow.com/questions/413425

  •  03-07-2019
  •  | 
  •  

문제

Visual Studio 2008을 사용하여 C ++에서 ATL 8.0 기반 ActiveX 컨트롤을 만들고 있습니다. 하위 창을 만들어 ActiveX 컨트롤에 연결해야합니다.

ActiveX 컨트롤이 소유 한 HWND에 어떻게 액세스 할 수 있습니까?

컨트롤 창이 작성된 후 HWND를 사용하기 위해 어떤 ATL 기능을 재정의 할 수 있습니까?

도움이 되었습니까?

해결책 2

약간의 시행 착오 후, 나는 내가 그에 따른 대답을 찾았습니다.

ATL ActiveX의 생성자에서 다음 코드 라인을 추가하도록 제어합니다.

m_bWindowOnly = true;

이로 인해 컨트롤이 생성되는 창이 발생합니다 (부모 창의 HWND를 재사용하는 대신). 그 후 컨트롤 클래스의 M_HWND 멤버는 컨트롤 창에 대한 HWND에 액세스하는 데 사용될 수 있습니다.

다른 팁

ActiveX를 사용하면 자신의 인터페이스에서 자신의 방법을 정의 할 수 있지만 (Brians의 가정을 다루기 위해) 여기서는 도움이되지 않을 수 있습니다. ActiveX 컨트롤은 다른 구성 요소에 의해 매우 잘 생성 될 수 있습니다. ATL도 관련이 없습니다. COM 인터페이스를 감싸는 C ++ 템플릿 라이브러리입니다.

여기에 필요한 기능은 iolewindow :: getwindow입니다. "HWMD를 사용하기 위해 ATL 기능을 재정의한다"는 의미가 확실하지 않습니다. HWND를 검색 한 후에는 HWND를 사용하는 기능으로 전달할 수 있습니다. 예를 들어, SetParent의 부모로서 (자식, 부모)

전체 공개] : ActiveX 또는 ATL에 익숙하지는 않지만 이것이 적어도 다소 도움이되기를 바랍니다.

ActiveX에서 객체에서 임의의 메소드를 정의 할 수 있다면 HWND의 값을 간단히 반환 할 수있는 함수를 노출 시키십시오 (제어는 거의 확실히 자체 HWND를 알고 있습니다). 그렇게하면 전화 할 수 있습니다 GetActiveXHwnd() 필요한 핸들을 얻으려면 추가 조작을 위해 사용할 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top