-1

少し前に、ユーザーのカスタム タイル イメージを表示する 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()などの背景色パラメーターの他の値も試しました が、これらも機能しませんでした (代わりに、白い背景が黒くなりました)。AlphaMaskAlphaShift

私の目標を達成する方法はありますか?

4

2 に答える 2