Control de mensajes de Windows para páginas de propiedades
Cuando un proveedor de páginas de propiedades de dispositivo controla una solicitud para crear una página de propiedades para su dispositivo o clase de dispositivo, devuelve la dirección de un procedimiento de cuadro de diálogo para la página de propiedades. El procedimiento del cuadro de diálogo debe inicializar la página de propiedades cuando obtiene un mensaje de WM_INITDIALOG y debe estar preparado para controlar los cambios en las propiedades del dispositivo cuando obtiene un mensaje de WM_NOTIFY. El procedimiento también puede controlar cualquier otro mensaje que necesite, como se describe en la documentación de Microsoft Windows SDK.
En respuesta a un mensaje de WM_INITDIALOG, el procedimiento del cuadro de diálogo inicializa información en la página de propiedades. Esta información puede incluir un icono que representa el dispositivo, el nombre descriptivo del dispositivo y su descripción del dispositivo PnP.
SetupDiLoadClassIcon carga los iconos de una clase de dispositivo especificada y devuelve un identificador al icono grande cargado que se puede usar en una llamada posterior a SendDlgItemMessage. Por ejemplo:
if (SetupDiLoadClassIcon(
&pTestPropPageData->DeviceInfoData->ClassGuid, &ClassIcon,
NULL)) {
OldIcon = (HICON)SendDlgItemMessage(
hDlg,
IDC_TEST_ICON,
STM_SETICON, (WPARAM)ClassIcon, 0);
if (OldIcon) {
DestroyIcon(OldIcon);
}
}
El identificador devuelto en ClassIcon se puede convertir a WPARAM que requiere la función SendDlgItemMessage. En el ejemplo, IDC_TEST_ICON identifica el control en el cuadro de diálogo que recibe el mensaje STM_SETICON. El valor de IDC_TEST_ICON debe definirse en el proveedor. Para ver funciones adicionales que manipulan iconos y mapas de bits, consulte Funciones de instalación de dispositivos. Para obtener más información sobre SendDlgItemMessage, DestroyIcon y el uso de iconos en cuadros de diálogo, consulte la documentación de Windows SDK.
Además de un icono que representa el dispositivo, una página de propiedades de dispositivo típica incluye una descripción o un "nombre descriptivo" del dispositivo y muestra la configuración actual de las propiedades del dispositivo. El administrador de Plug and Play (PnP) almacena las propiedades PnP de cada dispositivo del Registro. Un proveedor de páginas de propiedades puede llamar a SetupDiGetDeviceRegistryProperty para obtener el valor de cualquier propiedad de este tipo. Si la información de configuración específica de la clase o del dispositivo también se ha almacenado en el Registro como parte del proceso de instalación, un proveedor de páginas de propiedades puede usar otras funciones SetupDiXxx para extraer esa información para su visualización. Para obtener más información, consulte Funciones de instalación de dispositivos.
Cuando se producen determinados tipos de cambios en la página, la hoja de propiedades envía un mensaje WM_NOTIFY al procedimiento del cuadro de diálogo. El procedimiento del cuadro de diálogo debe estar preparado para extraer el código de notificación de los parámetros del mensaje y responder adecuadamente.
Para obtener más información sobre las notificaciones que podría encontrar un procedimiento de cuadro de diálogo, como las notificaciones PSN_APPLY o PSN_HELP, y cómo el procedimiento debe controlarlas, consulte Notificaciones en la documentación de Windows SDK.
Notificaciones de PSN_APPLY
La hoja de propiedades envía un mensaje de notificación PSN_APPLY cuando el usuario hace clic en Aceptar, Cerrar o Aplicar. En respuesta a este mensaje, el procedimiento del cuadro de diálogo debe validar y aplicar los cambios realizados por el usuario.
Cuando recibe la notificación de PSN_APPLY, el proveedor debe hacer lo siguiente:
Si aún no lo ha hecho, obtenga un puntero a los parámetros de instalación del dispositivo (SP_DEVINSTALL_PARAMS estructura) para el dispositivo. Esta estructura está disponible llamando a SetupDiGetDeviceInstallParams, pasando el DeviceInfoSet guardado y DeviceInfoData que se pasaron en el área a la que hace referencia el miembro lParam de la estructura PROPSHEETPAGE.
Asegúrese de que los cambios del usuario sean válidos.
Si el proveedor permite a un usuario establecer una propiedad que requiera que Windows quite y reinicie el dispositivo, el proveedor debe establecer la marca DI_FLAGSEX_PROPCHANGE_PENDING en el campo FlagsEx de la estructura de SP_DEVINSTALL_PARAMS devuelta.
Sin embargo, si el proveedor puede asegurarse de que los cambios no requieren que los controladores del dispositivo se detengan y, a continuación, se reinicien, no es necesario establecer esta marca.
Llame a SetupDiSetDeviceInstallParams con la estructura de SP_DEVINSTALL_PARAMS modificada para establecer los nuevos parámetros.
Notificaciones de PSN_RESET
La hoja de propiedades envía un mensaje de notificación PSN_RESET cuando el usuario hace clic en Cancelar. En respuesta a este mensaje, el procedimiento del cuadro de diálogo debe descartar los cambios realizados por el usuario.