ネイティブ Win32 C++ で、アルファ/透明度の値が 0.5 (つまり、透明度 50%) の青い四角形を描画するにはどうすればよいですか?
RGBA() のようなマクロを使用すると失敗します。ブラシのアルファ値を指定する方法がわかりません。
SetDCPenColor(hdc, RGBA(255,255,0,127));
SetDCBrushColor(hdc, RGBA(255,255,0,127));
Rectangle(hdc, 0, 0, width, height);
そのようにするにはGDI +が必要になると確信していますが、GDIにはあるはずです:
//in rendering function
using namespace Gdiplus;
Graphics g (hdc);
SolidBrush brush (Color (127 /*A*/, 0 /*R*/, 0 /*G*/, 255 /*B*/));
g.FillRectangle (&brush, 0, 0, width, height);
SelectObject
プラス面としては、GDI+ はそれほど高速ではありませんが、より優れた機能と視覚的な結果を備えており、オブジェクト指向であるため、これらすべてとDeleteObject
呼び出しについて心配する必要はありません。
GDI+ を使用するためにプログラムを初期化/終了するときにいくつかの追加の手順Gdiplus
があり、すべてが名前空間にあることに注意してください-lgdiplus
。
本当に GDI が必要な場合、私が知っている唯一の解決策はAlphaBlend です。これは、単純にデバイス コンテキストに図形を描画するよりも複雑な方法です。GDI+ はまだ使用されており、GDI よりもはるかに使いやすいため、GDI+ から始めるのは常に良いことです。
AlphaBlend 関数を使用する必要があります -
http://msdn.microsoft.com/en-us/library/windows/desktop/dd183351(v=vs.85).aspx
http://www.codeproject.com/Articles/ 286/AlphaBlend 関数の使用