2010-11-03 22 views
6

Nasıl Çizilir. i ayarlayabilmek bir alfa şeffaflık ile bir dikdörtgen (LPRECT) çizmek nasıl()C++ MFC C++ MFC uygulamasında Alfa şeffaf Dikdörtgen

ait dc kullanarak.?

aşağıdakı 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. 
} 

cevap

9

GDI + 'ya bakmanız gerekiyor. Onun bir bir faff biraz ama şöyle bir "Grafik" nesne oluşturabilirsiniz:

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> 

yapmak unutma ve yere

GdiplusStartup(...); 

aramaya :

C# kodunuza benzeyen çok hoş bir şey olduğunu fark edersiniz;)

FromArgb kodunuza koyduğunuz 75 değerin,% 75 alpha içermediğine dikkat edin, aslında 75/255 alpha veya ~ 29% alpha ayarlıyor.

+0

GdiplusStartup() öğesini çağırırsam; GdiplusShutdown'u çağırmalı mıyım? Sanırım yapmalıyım. ve eğer yapmalıyım, Boya Etkinliği içinde olmalı mı? –

+1

GdiplusStartup, MFC uygulamanızın InitInstance işlevinden hemen sonra çağrılmalıdır. GdiplusShutdown, uygulamanız çıktığında bir kez çağrılmalıdır. – Goz

3

GDI (ve böylece MFC) bir alfa çizim için iyi bir destek vardır dönüştürmek için gereken bir örnek C# kodudur. Ancak GDI +, C++ kodunda da mevcuttur. #include <gdiplus.h> kullanın ve GdiplusStartup() ile başlatın. Grafik sınıfını kullanarak, CPaintDC'nizden Grafik (HDC) yapıcısıyla bir tane oluşturabilirsiniz. Ve FillRectangle() yöntemini kullanın. SDK belgeleri 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 
İlgili konular