https://bugs.winehq.org/show_bug.cgi?id=54906
--- Comment #3 from George Hazan george.hazan@gmail.com --- Well, imho I've found the root of problems.
In Miranda's console output there're a lot of lines like
011c:fixme:uxtheme:BeginBufferedPaint painting parameters are ignored
And inside Miranda the ICO file is converted into HBITMAP inside the following code:
HBITMAP ConvertIconToBitmap(HIMAGELIST hIml, int iconId) { if (!beginBufferedPaint) { HMODULE hThemeAPI = GetModuleHandleA("uxtheme.dll"); beginBufferedPaint = (pfnBeginBufferedPaint)GetProcAddress(hThemeAPI, "BeginBufferedPaint"); endBufferedPaint = (pfnEndBufferedPaint)GetProcAddress(hThemeAPI, "EndBufferedPaint"); }
BITMAPINFO bmi = { 0 }; bmi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER); bmi.bmiHeader.biPlanes = 1; bmi.bmiHeader.biCompression = BI_RGB; bmi.bmiHeader.biBitCount = 32; bmi.bmiHeader.biWidth = g_iIconSX; bmi.bmiHeader.biHeight = g_iIconSY;
HDC hdc = CreateCompatibleDC(nullptr); HBITMAP hbmp = CreateDIBSection(hdc, &bmi, DIB_RGB_COLORS, nullptr, nullptr, 0); HBITMAP hbmpOld = (HBITMAP)SelectObject(hdc, hbmp);
BLENDFUNCTION bfAlpha = { AC_SRC_OVER, 0, 255, AC_SRC_ALPHA }; BP_PAINTPARAMS paintParams = { 0 }; paintParams.cbSize = sizeof(paintParams); paintParams.dwFlags = BPPF_ERASE; paintParams.pBlendFunction = &bfAlpha;
HDC hdcBuffer; RECT rcIcon = { 0, 0, g_iIconSX, g_iIconSY }; HANDLE hPaintBuffer = beginBufferedPaint(hdc, &rcIcon, BPBF_DIB, &paintParams, &hdcBuffer); if (hPaintBuffer) { ImageList_Draw(hIml, iconId, hdc, 0, 0, ILD_TRANSPARENT); endBufferedPaint(hPaintBuffer, TRUE); }
SelectObject(hdc, hbmpOld); DeleteDC(hdc);
return hbmp; }
This function generates a black bitmap under Wine.