2010-11-03 6 views
6

dans une application MFC C++. en utilisant la dc de()C++ MFC Comment dessiner Rectangle alpha transparent

Comment puis-je dessiner un rectangle (LPRECT) avec une transparence alpha que je peux régler.?

Voici un exemple C# code que je dois 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. 
} 

Répondre

9

Vous devez regarder dans GDI +. Son un peu faff mais vous pouvez créer un "Graphics" objet comme suit:

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); 

Ne pas oublier de faire

#include <gdiplus.h> 

et d'appeler

GdiplusStartup(...); 

quelque part:)

Vous remarquerez que c'est assez sacrément similaire à votre code C#;)

Cela vaut la peine de noter que le 75 que vous mettez dans votre code FromArgb ne définit pas 75% alpha, il définit en fait 75/255 alpha ou ~ 29% alpha.

+0

Si j'appelle GdiplusStartup(); est-ce que je devrais invoquer GdiplusShutdown? Je pense que je dois. et si je dois, devrait-il être dans l'événement de peinture? –

+1

GdiplusStartup doit normalement être appelé depuis la fonction InitInstance de votre application MFC. GdiplusShutdown devrait alors être appelé une fois que votre application se termine. – Goz

3

GDI (et donc MFC) n'a pas de support décent pour le dessin avec un alpha. Mais GDI + est également disponible en code C++. Utilisez #include <gdiplus.h> et initialisez-le avec GdiplusStartup(). Vous pouvez utiliser la classe Graphics, en créer une avec son constructeur Graphics (HDC) à partir de votre CPaintDC. Et utilisez sa méthode FillRectangle(). Le SDK documente 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 
Questions connexes