9

ネイティブ 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);
4

2 に答える 2

7

そのようにするには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+ から始めるのは常に良いことです。

于 2012-06-10T02:45:52.037 に答える
5

AlphaBlend 関数を使用する必要があります -
http://msdn.microsoft.com/en-us/library/windows/desktop/dd183351(v=vs.85).aspx
http://www.codeproject.com/Articles/ 286/AlphaBlend 関数の使用

于 2012-06-10T02:47:34.520 に答える