2010-11-03 42 views
6

en una aplicación C++ MFC. utilizando el cc de()C++ MFC Cómo dibujar rectángulo transparente alfa

Cómo puedo dibujar un rectángulo (LPRECT) con una transparencia alfa que yo pueda ajustar.?

siguiente es un ejemplo de código # c que i necesidad de convertir en C++

private void pictureBox1_Paint(object sender, PaintEventArgs e) 
{ 
    Graphics g = e.Graphics; 
    Color color = Color.FromArgb(75,Color.Red); //sets color Red with 75% alpha transparency 

    Rectangle rectangle = new Rectangle(100,100,400,400); 
    g.FillRectangle(new SolidBrush(color), rectangle); //draws the rectangle with the color set. 
} 

Respuesta

9

Tienes que mirar en GDI +. Es un poco de faff pero puede crear un objeto "Gráficos" de la siguiente manera:

Gdiplus::Graphics g(dc.GetSafeHdc()); 
Gdiplus::Color color(192, 255, 0, 0); 

Gdiplus::Rect rectangle(100, 100, 400, 400); 
Gdiplus::SolidBrush solidBrush(color); 
g.FillRectangle(&solidBrush, rectangle); 

No se olvide de hacer

#include <gdiplus.h> 

y hacer un llamado

GdiplusStartup(...); 

alguna parte:)

Notarás que es bastante similar a tu código C#)

Vale la pena señalar que el 75 que introdujo en su código FromArgb no establece el 75% de alfa, en realidad establece 75/255 alfa o ~ 29% alfa.

+0

Si invoco GdiplusStartup(); ¿Es necesario que invoque GdiplusShutdown? Creo que debo. y si debo, ¿debería estar dentro del evento Paint? –

+1

GdiplusStartup debe invocarse una vez de manera habitual desde la función InitInstance de su aplicación MFC. GdiplusShutdown debe, entonces, ser llamado una vez cuando su aplicación finalice. – Goz

3

GDI (y por tanto MFC) no tiene soporte decente para dibujar con un alfa. Pero GDI + también está disponible en código C++. Use #include <gdiplus.h> e inicialícelo con GdiplusStartup(). Puede usar la clase Graphics, crear una con su constructor Graphics (HDC) desde su CPaintDC. Y use su método FillRectangle(). El SDK docs are here.

-1
int StartHoriz,StartVert,BarWidth,BarHeight; // rect start, width and height 
StartHoriz=0; 
StartVert=100; 
width = 100; 
height=120; 
CDC* pCDC = GetDC();  // Get CDC pointer 
CRect Rect(StartHoriz,StartVert,BarWidth,BarHeight); //create rectangle dimensions 
pCDC->Rectangle(Rect); //draw rectangle 
Cuestiones relacionadas