¿Cómo obtengo el HWND para un control ActiveX después de que el control se haya inicializado / activado?

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

  •  03-07-2019
  •  | 
  •  

Pregunta

Estoy creando un control ActiveX basado en ATL 8.0 en C ++ con Visual Studio 2008. Necesito crear una ventana secundaria y adjuntarla al control ActiveX.

¿Cómo obtengo acceso al HWND que es propiedad del control ActiveX?

¿Qué función ATL puedo anular para usar el HWND después de que se haya creado la ventana de control?

¿Fue útil?

Solución 2

Después de algunas pruebas y errores, encontré la respuesta que buscaba.

En el constructor de su control ATL ActiveX, debe agregar la siguiente línea de código:

m_bWindowOnly = true;

Esto hace que se cree la ventana para el control (en lugar de simplemente reutilizar el HWND de la ventana principal). Después de esto, el miembro m_hWnd de la clase de control se puede usar para acceder al HWND para la ventana del control.

Otros consejos

ActiveX le permitiría definir sus propios métodos en su propia interfaz (para abordar la suposición de Brians), pero eso probablemente no ayude aquí. El control ActiveX puede ser creado muy bien por otro componente. ATL también es irrelevante: es una biblioteca de plantillas de C ++ que envuelve las interfaces COM.

La función que necesita aquí es IOleWindow :: GetWindow. No estoy seguro de lo que quiere decir con " anular una función ATL para usar el HWMD " ;. Una vez que haya recuperado el HWND, puede pasarlo a cualquier función que use un HWND. Por ejemplo, como padre en SetParent (hijo, padre)

[Revelación completa]: no estoy muy familiarizado con ActiveX o ATL, pero espero que esto sea al menos algo útil.

Si ActiveX le permite definir métodos arbitrarios en su objeto, intente exponer una función a la que pueda llamar que simplemente le devolverá el valor del HWND (el control casi con certeza conoce su propio HWND). De esa manera puede llamar a GetActiveXHwnd () para obtener el identificador necesario, que luego usaría para una mayor manipulación.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top