Comment convertir HICON à HBITMAP dans VC++?

Comment convertir HICON à HBITMAP dans VC++?

Je sais que c'est une FAQ, mais toutes les solutions que j'ai trouvé sur Google ne fonctionnent pas. Ce dont j'ai besoin est une fonction qui prend un paramètre HICON et retourne HBITMAP.

Plus si possible de faire la conversion en bitmap 32 bits même l'icône est de 24 bits, 16 bits ou 8 bits.

C'est le code, je ne sais pas où ça se passe mal:

HBITMAP icon_to_bitmap(HICON Icon_Handle) {
  HDC Screen_Handle = GetDC(NULL);
  HDC Device_Handle = CreateCompatibleDC(Screen_Handle);

  HBITMAP Bitmap_Handle = 
  CreateCompatibleBitmap(Device_Handle,GetSystemMetrics(SM_CXICON),
  GetSystemMetrics(SM_CYICON));

  HBITMAP Old_Bitmap = (HBITMAP)SelectObject(Device_Handle,Bitmap_Handle);
  DrawIcon(Device_Handle, 0,0, Icon_Handle);
  SelectObject(Device_Handle,Old_Bitmap);

  DeleteDC(Device_Handle);
  ReleaseDC(NULL,Screen_Handle);
  return Bitmap_Handle;
}

OriginalL'auteur jondinham | 2011-09-10