c++ - Dibuje en la pantalla con GDI+(o GDI) similar a Inspeccionar
windows api (1)
En las ventanas, las superficies de la pantalla (y las ventanas ...) son ... volátiles, como areneros. La "superposición" de ventanas y la relectura de superficies descubiertas es una ilusión hecha por la gestión adecuada de eventos.
Todo se dibuja permaneciendo allí hasta que algo más se dibuje sobre él. "Descubrir" una superficie hace que la ventana que representa esa superficie reciba un mensaje WM_PAINT. Depende de ese procedimiento de ventana reaccionar ante ese mensaje al volver a pintar todo lo que se supone que debe estar debajo de él.
Ahora, a menos que intercepte de alguna manera el mensaje WM_PAINT que se envía a la ventana del escritorio, no tiene la mayor probabilidad de saber que el escritorio necesita un repintado y, por lo tanto, no se invocará su código de pintura y no se volverá a pintar. O mejor sucede solo siguiendo el código de actualización de la ventana del escritorio, eso no es consciente de su pintura.
Intento dibujar en la pantalla (toda la pantalla, encima de cada otra ventana) usando GDI +.
Pasé NULL a GetDC para obtener un HDC en la pantalla, y luego lo usé para crear un objeto Graphics, y usé DrawRectangle para dibujar rectángulos en la pantalla.
Todo funciona ... excepto ... el interior del rectángulo no se actualizará.
Como si lo dibujara sobre un símbolo del sistema y muevo el símbolo del sistema, el interior del rectángulo permanece negro. Espero ver lo que está debajo del rectángulo.
Aquí está el código que está haciendo el dibujo ...
Pen BluePen(Color(255, 0, 255, 0), 2);
Graphics graphics(screenDC);
graphics.DrawRectangle(&BluePen, myRect);
Muy simple, entonces ¿hay algo que tenga que hacer para que el interior del rectángulo se actualice cuando la pantalla lo haga? O para que sea verdaderamente transparente.
================= EDITAR =================
Bueno, había renunciado a esto y asumí que no era posible hasta que ... me di cuenta de que la herramienta Inspeccionar que viene con el SDK de Windows hace esto perfectamente.
Me gustaría recrear algo similar al rectángulo resaltado, y si selecciono una ventana (como Firefox) y luego inspecciono el foco, puedo moverlo libremente con todo lo que se actualiza perfectamente. Ni siquiera parpadea.
Entonces ... ¿alguien sabe cómo Inspect logra hacer esto?
También las respuestas en GDI en lugar de GDI + están bien ...