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.
Además de ejecutar el bucle de mensajes y darle la oportunidad de inicializar la aplicación y limpiarla después, CWinApp proporciona otros servicios.
Registro de shell
De forma predeterminada, el Asistente para aplicaciones MFC permite al usuario abrir archivos de datos creados por la aplicación haciendo doble clic en ellos en el Explorador de archivos o en el Administrador de archivos. Si la aplicación es una aplicación MDI y especifica una extensión para los archivos que crea la aplicación, el asistente para aplicaciones MFC agrega llamadas a las funciones miembro RegisterShellFileTypes y EnableShellOpen de CWinApp a la invalidación InitInstance que ha escrito automáticamente.
RegisterShellFileTypes registra los tipos de documento de la aplicación con el Explorador de archivos o el Administrador de archivos. La función agrega entradas a la base de datos de registro que Mantiene Windows. Las entradas registran cada tipo de documento, asocian una extensión de archivo con el tipo de archivo, especifican una línea de comandos para abrir la aplicación y especifican un comando de intercambio dinámico de datos (DDE) para abrir un documento de ese tipo.
EnableShellOpen completa el proceso al permitir que la aplicación reciba comandos DDE desde el Explorador de archivos o el Administrador de archivos para abrir el archivo elegido por el usuario.
Esta compatibilidad con el registro automático en CWinApp elimina la necesidad de enviar un archivo .reg con la aplicación o para realizar un trabajo especial de instalación.
Si desea inicializar GDI+ para la aplicación (llamando a GdiplusStartup en la función InitInstance ), debe suprimir el subproceso en segundo plano de GDI+.
Para ello, establezca el miembro SuppressBackgroundThread de la estructura GdiplusStartupInput en TRUE. Al suprimir el subproceso en segundo plano de GDI+, las llamadas NotificationHook y NotificationUnhook deben realizarse justo antes de entrar y salir del bucle de mensajes de la aplicación. Para obtener más información sobre estas llamadas, consulte GdiplusStartupOutput. Por lo tanto, un buen lugar para llamar a GdiplusStartup y a las funciones de notificación de enlace sería en una invalidación 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 GDI+ en segundo plano, los comandos DDE se pueden emitir prematuramente a la aplicación antes de que se haya creado su ventana principal. Los comandos DDE emitidos por el shell se pueden anular prematuramente, lo que da lugar a mensajes de error.
Administrador de Archivos Arrastrar y Soltar
Los archivos se pueden arrastrar desde la ventana de vista de archivos en el Administrador de archivos o el Explorador de archivos a una ventana de la aplicación. Por ejemplo, podría permitir que uno o varios archivos se arrastren a la ventana principal de una aplicación MDI, donde la aplicación podría recuperar los nombres de archivo y abrir ventanas secundarias de MDI para esos archivos.
Para habilitar la posibilidad de arrastrar y colocar archivos en la aplicación, el asistente para aplicaciones MFC escribe una llamada a la función miembro CWndDragAcceptFiles para la ventana de marco principal en InitInstance. Puede quitar esa llamada si no desea implementar la característica de arrastrar y colocar.
Nota:
También puede implementar funcionalidades de arrastrar y colocar más generales( arrastrar datos entre documentos o dentro de ellos) con OLE. Para obtener información, consulte el artículo Funciones OLE de arrastrar y colocar.
Seguimiento de los documentos usados más recientemente
A medida que el usuario abre y cierra los archivos, el objeto de aplicación realiza un seguimiento de los cuatro archivos usados más 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 los lee del archivo cuando se inicia la aplicación. La invalidación InitInstance que crea el asistente para aplicaciones MFC automáticamente incluye una llamada a la función miembro LoadStdProfileSettings de CWinApp, que carga información del registro o del archivo .ini, incluidos los nombres de archivo usados más recientemente.
Estas entradas se almacenan de la siguiente manera:
En Windows NT, Windows 2000 y versiones posteriores, el valor se almacena en una 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 caché de WIN. INI.