我試圖在本地Win32 C++中繪製一個稍微透明的藍色矩形。我正在使用函數AlphaBlend(),但它沒有在窗口上繪製任何東西,沒有任何反應。使用AlphaBlend繪製稍微透明的矩形失敗
我的問題:當我運行我的函數繪製一個稍微透明的矩形時,它不會顯示在我的窗口上。我有一種感覺我做錯了,也許我應該使用HBITMAP?
你能告訴我需要做些什麼來讓我的函數在窗口上繪製一個稍微透明的矩形嗎?
另外我知道GDI +,但我現在要避免它,因爲當我使用該庫時,我收到了很多編譯/包含錯誤,並且我想盡可能低/本地,而沒有幫助圖書館,爲我做的一切。
bool paintRect(HDC hdc, RECT dim, COLORREF penCol, COLORREF brushCol, unsigned int opacity)
{
HDC tempHdc = CreateCompatibleDC(hdc);
BLENDFUNCTION blend = {AC_SRC_OVER, 0, 127, AC_SRC_ALPHA};
SetDCPenColor(tempHdc, RGB(255,255,0));
SetDCBrushColor(tempHdc, RGB(255,255,0));
Rectangle(tempHdc, dim.left, dim.top, dim.right, dim.bottom);
return bool(AlphaBlend(hdc, dim.left, dim.top, dim.right, dim.bottom, tempHdc, dim.left, dim.top, dim.right, dim.bottom, blend));
}
// Usage
case WM_PAINT:
{
HDC hdc;
PAINTSTRUCT ps;
hdc = BeginPaint(hwnd, &ps);
RECT a = {0,0,100,100};
paintRect(hdc, a, RGB(255,255,0), RGB(255,255,0), 127); // 127 is 50% transparency right?
EndPaint(hwnd, &ps);
}
break;
請注意,我忽略保存並重新選擇舊的位圖(並非它不重要,但與問題無關),我有0而不是AC_SRC_ALPHA,強制創建32位位圖,因爲AlphaBlend期望,使用藍色而不是黃色,並填充矩形。 – Tony
你能解釋一下AC_SRC_ALPHA,並且更詳細地設置0嗎? –
我認爲'//將位圖寬度和高度設置爲三個水平區域中的每一個的寬度和高度的60%。稍後,混合將發生在三個區域中的每一個的中心.'是複製粘貼錯誤。 – sergiol