Некоторое время назад я создал 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
, но они тоже не работали (вместо этого белый фон стал черным)
Есть ли способ достичь моей цели?
Новейший Технический справочник провайдера учетных данных (что не так просто найти в MSDN) на самом деле говорит о проблеме с изображением плитки:
В Windows 10 выбранный поставщик учетных данных User / V1 / PLAP имеет
размер изображения 192х192. Те, что в левом нижнем списке, имеют размер 48х48.
Примечание. LogonUI использует круговое изображение для пользователя и площадь изображение для V1 / PLAP
в соответствии с новым направлением дизайна. Размер изображения V2 Credential
Плитка провайдера для выбранного пользователя имеет размер 48х48.
Если я правильно прочитал документацию, то проблема должна заключаться в том, чтобы как-то убедить LogonUI, что это пользователь, а не V1 / PLAP, я думаю, что это может быть архивировано, возвращая фиктивного пользователя в вызове GetSerialization.