Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
En los temas siguientes se describe cómo realizar determinadas tareas relacionadas con los iconos:
Crear un icono
En el ejemplo siguiente se crean dos identificadores de icono: uno para el icono de pregunta estándar y otro para un icono personalizado incluido como recurso en el archivo de definición de recursos de la aplicación.
HICON hIcon1 = LoadIcon(NULL, IDI_QUESTION);
HICON hIcon2 = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_MYICON));
Las aplicaciones deben implementar iconos personalizados como recursos y usar LoadIcon o LoadImage en lugar de crear el icono en tiempo de ejecución. El uso de recursos de icono evita la dependencia del dispositivo, simplifica la localización y permite a las aplicaciones compartir diseños de iconos.
CreateIcon se puede usar para crear un icono monocromo personalizado en tiempo de ejecución. Use el asistente y el PackCursorMasks mapa de símbolos desde Crear un cursor y, a continuación, cree un icono con un plano y un bit por píxel:
HICON hIcon = CreateIcon(hInstance, CURSOR_SIZE, CURSOR_SIZE, 1, 1, abAnd, abXor);
Para crear un icono con combinación alfa en tiempo de ejecución, consulte Creación de un cursor con combinación alfa — pase TRUE por en fIcon para crear un icono en lugar de un cursor.
Antes de cerrar, la aplicación debe usar DestroyIcon para destruir cualquier icono obtenido de CreateIcon, CreateIconIndirect, CreateIconFromResourceEx sin la LR_SHARED marca o LoadImage sin la LR_SHARED marca. Los iconos cargados con LoadIcon, o creados o cargados con LR_SHARED, son recursos compartidos del sistema y no se deben destruir.
Obtención del tamaño del icono
Consulte Obtener el tamaño del cursor. El ejemplo funciona de forma idéntica para los iconos: pasa un HICON en lugar de HCURSOR.
Mostrar un icono
La aplicación puede cargar y crear iconos para mostrarlos en el área cliente de la aplicación o en las ventanas secundarias. En el ejemplo siguiente se muestra cómo dibujar un icono en el área cliente de la ventana cuyo contexto de dispositivo (DC) se identifica mediante el parámetro hdc .
DrawIcon(hdc, 10, 20, hIcon1);
El sistema muestra automáticamente los iconos de clase de una ventana. La aplicación puede asignar iconos de clase al registrar una clase de ventana. La aplicación puede reemplazar un icono de clase mediante la función SetClassLongPtr . Esta función cambia la configuración de ventana predeterminada para todas las ventanas de una clase determinada. En el ejemplo siguiente se reemplaza un icono de clase por el icono cuyo identificador de recurso es 480.
SetClassLongPtr(hWnd, GCLP_HICON,
(LONG_PTR)LoadIcon(hInstance, MAKEINTRESOURCE(IDI_MYICON)));
Para obtener más información sobre las clases de ventana, vea Clases de ventana.
Compartir recursos de icono
El código siguiente usa las funciones CreateIconFromResourceEx, DrawIcon y LookupIconIdFromDirectoryEx, y varias de las funciones de recursos, para crear un identificador de icono basado en datos de icono de otro archivo ejecutable. A continuación, muestra el icono en una ventana.
Advertencia de seguridad: El uso de LoadLibrary incorrectamente puede poner en peligro la seguridad de la aplicación cargando el archivo DLL incorrecto. Consulte la documentación de LoadLibrary para obtener información sobre cómo cargar correctamente archivos DLL con diferentes versiones de Windows.
int cx = GetSystemMetrics(SM_CXICON);
int cy = GetSystemMetrics(SM_CYICON);
// LoadLibraryExW with LOAD_LIBRARY_AS_DATAFILE avoids running the DLL/EXE.
// Always use a fully qualified path to prevent DLL planting.
HINSTANCE hExe = LoadLibraryEx(TEXT("C:\\path\\to\\myapp.exe"), NULL,
LOAD_LIBRARY_AS_DATAFILE);
if (hExe == NULL)
return;
HRSRC hResource = FindResource(hExe, MAKEINTRESOURCE(440), RT_GROUP_ICON);
HGLOBAL hMem = LoadResource(hExe, hResource);
BYTE *lpResource = LockResource(hMem);
int nID = LookupIconIdFromDirectoryEx(lpResource, TRUE, cx, cy, LR_DEFAULTCOLOR);
hResource = FindResource(hExe, MAKEINTRESOURCE(nID), RT_ICON);
hMem = LoadResource(hExe, hResource);
lpResource = LockResource(hMem);
HICON hIcon1 = CreateIconFromResourceEx(lpResource,
SizeofResource(hExe, hResource), TRUE, 0x00030000,
cx, cy, LR_DEFAULTCOLOR);
DrawIcon(hdc, 10, 20, hIcon1);
FreeLibrary(hExe);