Pregunta

Obtengo un controlador de dominio para un identificador de ventana de un objeto en otro programa usando win32gui.GetDC que devuelve int / long. Necesito convertir este DC en un DC de memoria en python. Lo único que no puedo averiguar cómo hacer es obtener un objeto derivado de wxDC del int / long que devuelve win32gui. Ninguno de los objetos wxDC me permite pasarles un identificador de DC real por lo que puedo decir. Esto, por supuesto, me impide hacer mi blit. ¿Hay alguna manera de hacer esto?

¿Fue útil?

Solución

Descargué la fuente de wxWidgets y busqué, y creo que esto funcionará.

Necesita el identificador (HWND) para la ventana externa, no el DC.

window = wx.Frame(None, -1, '')
window.AssociateHandle(hwnd)
dc = wx.WindowDC(window)

Otros consejos

Por lo que puedo decir, los DC en python se abstraen debido a la variación de la plataforma. Por lo tanto, un contexto de dispositivo en Python no se asigna directamente a un contexto de dispositivo en Windows, aunque muchos de los métodos son llamadas directas a métodos de Windows. Para que esto suceda, parece que deberías crear tu propia clase de DelegateDC o algo similar que esté diseñado solo para Windows para que puedas establecer el identificador de DC directamente.

También podría haber alguna forma de adjuntar una ventana wx al manejador de la ventana, después de lo cual podrías obtener una wxWindowDC desde la ventana wx ... aunque no puedo resolver esto.

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