少し前に、ユーザーのカスタム タイル イメージを表示する Windows 7 用の CredentialProvider を作成しました。Windows 10 で CredentialProvider をテストしたところ、通常の Windows ユーザー イメージのようにタイル イメージが丸くないことに気付きました。HBITMAP
丸い形の透明なPNGを読み込んで、対応するものをICredentialProviderCredentiall::GetBitmapValue()
関数に渡そうとしました。残念ながら、PNG の背景は透明ではなく白です。実際の透明度を表示する方法はありますか? は LogonUI 自体によって描画されるためHBITMAP
、描画動作を変更することはできません。
PNG リソースを作成するHBITMAP
には、次の関数を使用します。
HBITMAP LoadPNG(HINSTANCE hInst, int resourceId)
{
HGLOBAL hGlobal;
LPSTREAM pStream;
HBITMAP tBmp = NULL;
ULONG_PTR token = 0;
Gdiplus::GdiplusStartupInput input = NULL;
Gdiplus::GdiplusStartup(&token, &input, NULL);
if (token != 0)
{
HRSRC hRsrc = FindResource(hInst, MAKEINTRESOURCE(resourceId), TEXT("PNG"));
HGLOBAL hGlob1 = LoadResource(hInst, hRsrc);
int size = SizeofResource(hInst, hRsrc);
hGlobal = GlobalAlloc(GMEM_FIXED, size);
LPVOID resPtr = LockResource(hGlob1);
memcpy(hGlobal, resPtr, size);
FreeResource(hGlob1);
CreateStreamOnHGlobal(hGlobal, true, &pStream);
Gdiplus::Bitmap* bmp = new Gdiplus::Bitmap(pStream, false);
bmp->GetHBITMAP(Gdiplus::Color::Transparent, &tBmp);
Gdiplus::GdiplusShutdown(token);
}
return tBmp;
}
やGetHBITMAP()
などの背景色パラメーターの他の値も試しました が、これらも機能しませんでした (代わりに、白い背景が黒くなりました)。AlphaMask
AlphaShift
私の目標を達成する方法はありますか?