tipos texto mas lista informatica extensiones ejemplos comunes archivos c++ winapi visual-c++ icons

c++ - texto - Obtener iconos para tipos de archivos comunes



tipos de archivos y extensiones en informatica (2)

Quiero obtener los iconos de tipos de archivos comunes en mi dll. Estoy usando vc ++. Solo tengo la extensión de archivo y el tipo de mime del archivo en función del cual quiero obtener el ícono para el archivo.

¿Puede alguien decirme cómo puedo hacer eso? (El método disponible en vc ++ necesita que el usuario proporcione la ruta del archivo para el que se necesita el icono. No tengo acceso a ningún archivo de este tipo)

Gracias.


Shell API

Puede obtenerlos desde el shell llamando a SHGetFileInfo() junto con el indicador SHGFI_USEFILEATTRIBUTES : este indicador permite que la rutina funcione sin requerir que el nombre de archivo pasado realmente exista, de modo que si tiene una extensión de archivo solo crea un nombre de archivo, agregue el extensión, y pasarlo adentro.

Al combinar otros indicadores, podrá recuperar:

  • Un icono grande o pequeño como lo determina la configuración del sistema : SHGFI_ICON|SHGFI_LARGEICON o SHGFI_ICON|SHGFI_SMALLICON
  • Un icono grande o pequeño como lo determina la configuración del shell : SHGFI_ICON|SHGFI_LARGEICON|SHGFI_SHELLICONSIZE o SHGFI_ICON|SHGFI_SMALLICON|SHGFI_SHELLICONSIZE
  • El índice del icono en la lista de imágenes del shell junto con la lista de imágenes adecuada: SHGFI_SYSICONINDEX
  • La ruta y el nombre del archivo del módulo real donde se almacena el ícono (junto con el índice de ícono en ese módulo): SHGFI_ICONLOCATION

Ejemplos

// Load a System Large icon image SHGetFileInfo( szFileName, FILE_ATTRIBUTE_NORMAL, &shfi, sizeof(SHFILEINFO), SHGFI_USEFILEATTRIBUTES | SHGFI_ICON | SHGFI_LARGEICON); // Load a System Small icon image SHGetFileInfo( szFileName, FILE_ATTRIBUTE_NORMAL, &shfi, sizeof(SHFILEINFO), SHGFI_USEFILEATTRIBUTES | SHGFI_ICON | SHGFI_SMALLICON); // Load a Shell Large icon image SHGetFileInfo( szFileName, FILE_ATTRIBUTE_NORMAL, &shfi, sizeof(SHFILEINFO), SHGFI_USEFILEATTRIBUTES | SHGFI_ICON | SHGFI_SHELLICONSIZE); // Load a Shell Small icon image SHGetFileInfo( szFileName, FILE_ATTRIBUTE_NORMAL, &shfi, sizeof(SHFILEINFO), SHGFI_USEFILEATTRIBUTES | SHGFI_ICON | SHGFI_SHELLICONSIZE | SHGFI_SMALLICON);

Si desea dibujar un icono de este tipo, use algo como esto:

// Draw it at its native size DrawIconEx( hDC, nLeft, nTop, hIcon, 0, 0, 0, NULL, DI_NORMAL ); // Draw it at the System Large size DrawIconEx( hDC, nLeft, nTop, hIcon, 0, 0, 0, NULL, DI_DEFAULTSIZE | DI_NORMAL ); // Draw it at some other size (40x40 in this example) DrawIconEx( hDC, nLeft, nTop, hIcon, 40, 40, 0, NULL, DI_NORMAL );

El identificador de icono y la ruta del sistema de archivos se pueden obtener de la estructura SHFILEINFO :

typedef struct _SHFILEINFOA { HICON hIcon; // out: icon int iIcon; // out: icon index DWORD dwAttributes; // out: SFGAO_ flags CHAR szDisplayName[MAX_PATH]; // out: display name (or path) CHAR szTypeName[80]; // out: type name } SHFILEINFOA;

Tenga en cuenta que debe liberar el icono obtenido al pasar hIcon a DestroyIcon() después de que haya terminado con él.