C ++ MFC Как рисовать прозрачный прямоугольник альфа - PullRequest
6 голосов
/ 03 ноября 2010

в приложении C ++ MFC.используя dc из (CPaintDC dc(this);)

Как нарисовать прямоугольник (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 ]

9 голосов
/ 03 ноября 2010

Вам нужно посмотреть в GDI +.Это немного ошибочно, но вы можете создать объект «Графика» следующим образом:

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

Стоит отметить, что 75, которые вы вставили в код FromArgb, неустановить альфа 75%, на самом деле альфа 75/255 или ~ 29% альфа.

3 голосов
/ 03 ноября 2010

GDI (и, следовательно, MFC) не имеет достойной поддержки для рисования с альфа-каналом. Но GDI + также доступен в коде C ++. Используйте #include <gdiplus.h> и инициализируйте его с помощью GdiplusStartup (). Вы можете использовать класс Graphics, создать его с помощью конструктора Graphics (HDC) из вашего CPaintDC. И используйте его метод FillRectangle (). Документы SDK здесь .

0 голосов
/ 11 февраля 2013
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
...