J'essaye d'utiliser quelques icônes de système telles que SIID_DOCNOASSOC
et SIID_FOLDER
et les dessiner.Masque manquant de HICON sur Win10 mais pas Win7
J'ai le problème que mon code fonctionne comme prévu dans Windows 7, sur Windows 10 les images récupérées manquent leur masque. Je ne peux pas comprendre pourquoi (le champ PICONINFO.hbmMask
que je peux récupérer avec GetIconInfo
est non nul, indiquant qu'il y a un masque, en effet).
Mon code est écrit en realbasic, qui utilise un dialecte de VB, mais cela ne devrait guère d'importance, comme je l'ai eu à travailler dans Win 7, je pense:
dim info as SHSTOCKICONINFO
info.cbSize = SHSTOCKICONINFO.Size
SHGetStockIconInfo (SIID_DOCNOASSOC, SHGSI_ICON, info)
dim iconHandle as Integer = info.hIcon
dim destDC as Integer = ... // intialized outside
DrawIconEx (destDC, 0, 0, iconHandle, 0, 0, 0, 0, DI_MASK)
Le code ci-dessus alla chercher la icône pour un fichier simple, puis dessine son masque. Alors que le masque est correct sur Win 7, le masque est entièrement noir sur toute la zone de l'icône sur Win 10.
Pourquoi cela se produirait-il?
Vous semblez ignorer les valeurs de retour, donc ne pas avoir de vérification d'erreur –
Win10 est plus susceptible d'être la version 64 bits, donc une erreur de déclaration pinvoke peut facilement octet. Il n'est pas non plus évident si c'est la même icône, Win10 utilisera beaucoup plus d'icônes plus chics. Celui qui incorpore une image PNG et n'a pas de masque. Aucune n'est nécessaire car le format PNG prend déjà en charge la transparence. –
[L'évolution du format de fichier ICO, partie 4: images PNG] (https://blogs.msdn.microsoft.com/oldnewthing/20101022-00/?p=12473). – IInspectable