C ++ MFC如何绘制Alpha透明矩形

时间:2010-11-03 13:47:09

标签: c++ mfc paint

在C ++ MFC应用程序中。使用(CPaintDC dc(this);

dc

如何绘制一个可以调整的Alpha透明度的矩形(LPRECT)。?

以下是我需要转换为C ++的示例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.
} 

3 个答案:

答案 0 :(得分:9)

你需要研究GDI +。它有点像faff但你可以创建一个“Graphics”对象如下:

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

别忘了做

#include <gdiplus.h>

并致电

 GdiplusStartup(...);

某处:)

你会注意到它与你的C#代码非常相似;)

值得注意的是,你在FromArgb代码中放​​入的75并没有设置75%的alpha值,它实际上设置了75/255 alpha或~29%alpha。

答案 1 :(得分:3)

GDI(以及MFC)对使用alpha绘图没有得体。但是GDI +也可以在C ++代码中使用。使用#include <gdiplus.h>并使用GdiplusStartup()初始化它。您可以使用Graphics类,使用CPaintDC中的Graphics(HDC)构造函数创建一个。并使用其FillRectangle()方法。 SDK文档are here

答案 2 :(得分:-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