Servicios especiales de CWinApp
Además de ejecutar el bucle de mensajes y de que el usuario tenga la oportunidad de inicializar la aplicación y para limpiar después de ella, CWinApp proporciona varios otros servicios.
Shell Registration
De forma predeterminada, el asistente para aplicaciones MFC permite al usuario a los archivos de datos abierto que la aplicación ha creado haciendo doble clic en el Explorador o administrador de archivo del archivo.Si la aplicación es una aplicación MDI y especifica una extensión para los archivos creados por la aplicación, el asistente para aplicaciones MFC agregue llamadas a RegisterShellFileTypes y las funciones miembro de EnableShellOpen de CWinApp a InitInstance reemplazan que escribe automáticamente.
RegisterShellFileTypes registra los tipos de documento de la aplicación con el Explorador o el administrador de archivos del archivo.La función agrega entradas a la base de datos de registro que Windows mantiene.Las entradas registrar cada tipo de documento, asociar una extensión de archivo al tipo de archivo, especifique una línea de comandos para abrir la aplicación, y especifique un comando de intercambio de datos dinámicos de (DDE) de abrir un documento de ese tipo.
EnableShellOpen completa el proceso permitiendo la aplicación para recibir los comandos DDE desde el archivo Explorador o administrador de archivos de abrir el archivo elegido por el usuario.
Esta compatibilidad automático del registro en CWinApp elimina la necesidad de enviar un archivo .reg con la aplicación o de realizar el trabajo de la instalación especial.
Si desea inicializar GDI+ para la aplicación (llamando a GdiplusStartup en la función de InitInstance ), tiene que suprimir el subproceso en segundo plano de GDI+.
Puede hacer estableciendo el miembro de SuppressBackgroundThread de la estructura de GdiplusStartupInput a TRUE.Al suprimir el subproceso de fondo GDI+, las llamadas de NotificationHook y de NotificationUnhook (vea GdiplusStartupOutput) se deben realizar justo antes de entrar y de salir del bucle de mensajes de la aplicación.Por consiguiente, un buen lugar para llamar a GdiplusStartup y las funciones de notificación de enlace tendrían un reemplazo de la función virtual CWinApp::Run, como se muestra a continuación:
int CMyWinApp::Run()
{
GdiplusStartupInput gdiSI;
GdiplusStartupOutput gdiSO;
ULONG_PTR gdiToken;
ULONG_PTR gdiHookToken;
gdiSI.SuppressBackgroundThread = TRUE;
GdiplusStartup(&gdiToken,&gdiSI,&gdiSO);
gdiSO.NotificationHook(&gdiHookToken);
int nRet = CWinApp::Run();
gdiSO.NotificationUnhook(gdiHookToken);
GdiplusShutdown(gdiToken);
return nRet;
}
Si no suprime el subproceso en segundo plano GDI+, los comandos DDE pueden emitir prematuramente a la aplicación antes de crear la ventana principal.Los comandos DDE emitidos por el shell pueden estar cancelado prematuramente, por lo que los mensajes de error.
Arrastrar y colocar del administrador de archivos
Los archivos se pueden arrastrar desde la ventana vista de archivo en el Explorador del administrador de archivos o a una ventana en su aplicación.Se podría, por ejemplo, habilite uno o más archivos que se arrastrarán a la ventana principal de una aplicación MDI, donde la aplicación podría recuperar los nombres de archivo y abrir ventanas secundarias MDI para esos archivos.
Para habilitar arrastrar y colocar del archivo en la aplicación, el asistente para aplicaciones MFC escribe una llamada a la función DragAcceptFiles miembro de CWnd para la ventana de marco principal en el InitInstance.Puede quitar esa llamada si no desea implementar la característica de arrastrar y colocar.
[!NOTA]
También puede implementar un arrastrar y colocar más general capacidad- que arrastra datos entre o dentro documento- con OLE.Para obtener información, vea el artículo Arrastrar y colocar (OLE).
Seguimiento de documentos utilizados Más Recientemente
Cuando el usuario abre y cierra los archivos, el objeto application realiza el seguimiento de los cuatro archivos usados recientemente.Los nombres de estos archivos se agregan al menú archivo y se actualizan cuando cambian.El marco almacena estos nombres de archivo en el registro o en el archivo .ini, con el mismo nombre que el proyecto y se lee del archivo cuando se inicia la aplicación.La invalidación de InitInstance que el asistente para aplicaciones MFC crea automáticamente incluye una llamada a la función LoadStdProfileSettingsmiembro de CWinApp , que carga la información del registro o del archivo .ini, incluidos los nombres de archivos usados recientemente.
Se almacenan estas entradas como sigue:
En Windows NT, Windows 2000, y versiones posteriores, el valor se almacena un clave del Registro.
En Windows 3.x, el valor se almacena en el archivo Win.ini.
En Windows 95 y versiones posteriores, el valor se almacena en una versión almacenada en memoria caché de WIN.INI.