Плитка Windows 10 CredentialProvider Прозрачность изображения

Некоторое время назад я создал CredentialProvider для Windows 7, который показал пользовательское изображение плитки для пользователя. Когда я тестировал свой CredentialProvider в Windows 10, я заметил, что изображение мозаики не круглое, как обычное изображение пользователя Windows, поэтому я предположил, что я должен обеспечить прозрачность своего круглого изображения. Я попытался загрузить прозрачный PNG с круглой формой и передать соответствующий HBITMAP в ICredentialProviderCredentiall::GetBitmapValue() функция. К сожалению, вместо того, чтобы быть прозрачным, фон PNG белый. Есть ли способ показать фактическую прозрачность? Так как HBITMAP нарисован самим LogonUI, я не могу изменить поведение при рисовании.

Чтобы создать HBITMAP из моего ресурса PNG я использую следующую функцию:

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, но они тоже не работали (вместо этого белый фон стал черным)

Есть ли способ достичь моей цели?

1

Решение

Новейший Технический справочник провайдера учетных данных (что не так просто найти в MSDN) на самом деле говорит о проблеме с изображением плитки:

В Windows 10 выбранный поставщик учетных данных User / V1 / PLAP имеет
размер изображения 192х192. Те, что в левом нижнем списке, имеют размер 48х48.
Примечание. LogonUI использует круговое изображение для пользователя и площадь изображение для V1 / PLAP
в соответствии с новым направлением дизайна.
Размер изображения V2 Credential
Плитка провайдера для выбранного пользователя имеет размер 48х48.

0

Другие решения

Если я правильно прочитал документацию, то проблема должна заключаться в том, чтобы как-то убедить LogonUI, что это пользователь, а не V1 / PLAP, я думаю, что это может быть архивировано, возвращая фиктивного пользователя в вызове GetSerialization.

-2

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector