¿Cómo puedo dibujar un rectángulo azul con un alfa/transparencia valor de 0,5 (es decir, un 50% de transparencia) en Nativo Win32 C++?

El uso de una macro como RGBA() falla, no estoy seguro de cómo me puede especificar el valor alfa de la brocha.

SetDCPenColor(hdc, RGBA(255,255,0,127));
SetDCBrushColor(hdc, RGBA(255,255,0,127));
Rectangle(hdc, 0, 0, width, height);

OriginalEl autor sazr | 2012-06-10

2 Comentarios

  1. 6

    Estoy bastante seguro de que voy a necesitar GDI+ a hacerlo así, pero no debería estar allí con GDI:

    //in rendering function
    using namespace Gdiplus;
    Graphics g (hdc);
    SolidBrush brush (Color (127 /*A*/, 0 /*R*/, 0 /*G*/, 255 /*B*/));
    g.FillRectangle (&brush, 0, 0, width, height);

    En el lado positivo, GDI+, aunque no muy rápido, tiene mayores capacidades y los resultados visuales, y es orientado a objetos, lo que también significa que usted no necesita preocuparse acerca de todos aquellos SelectObject y DeleteObject llamadas.

    Ser conscientes de que hay un par de pasos adicionales cuando se inicia/termina el programa con el fin de utilizar GDI+, y que todo está en el Gdiplus espacio de nombres, y -lgdiplus.

    Si usted realmente necesita GDI, la única solución que conozco es AlphaBlend, que realmente es más complejo que el método de simplemente el dibujo de formas para el contexto de dispositivo. Siempre es bueno empezar con GDI+, ya que todavía en uso, y es mucho más fácil de usar que GDI.

    No creo que GDI+ no es más rápido que GDI es? GDI es acelerado por hardware, pero no para GDI+ (por lo que he leído).
    No he leído mucho, pero yo recuerdo que siendo más rápido. Mira, que parece estar en lo cierto. GDI+ todavía tiene más capacidad, y produce mejores imágenes, aunque. Si usted está realmente preocupado acerca de la velocidad (y la calidad al mismo tiempo), DirectX es un muy buen candidato.
    Sí, no hay duda de GDI+ produce mejores imágenes y tiene más capacidad. +1.

    OriginalEl autor chris

Dejar respuesta

Please enter your comment!
Please enter your name here