Leer en inglés

Compartir a través de


Servicios especiales de CWinApp

Además de ejecutar el bucle de mensajes y darle la oportunidad de inicializar la aplicación y limpiarla después, CWinApp ofrece 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 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 permitiendo que la aplicación reciba comandos DDE del Explorador de archivos o del 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 realizar un trabajo de instalación especial.

Si desea inicializar GDI+ para la aplicación (mediante una llamada 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 a NotificationHook y NotificationUnhook deben realizarse justo antes de entrar y salir del bucle de mensajes de la aplicación. Para 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 de GDI+ en segundo plano, puede que los comandos DDE se emitan 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 dará lugar a mensajes de error.

Arrastrar y colocar con el Administrador de archivos

Los archivos se pueden arrastrar desde la ventana de vista de archivos del Administrador de archivos o Explorador de archivos a una ventana de la aplicación. Por ejemplo, puede 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 MDI de 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 CWnd DragAcceptFiles para la ventana de marco principal en InitInstance. Puede eliminar esa llamada si no desea implementar la característica de arrastrar y colocar.

Nota

También puede implementar funcionalidades para arrastrar y colocar más generales, para arrastrar datos entre documentos o dentro de ellos, con OLE. Para obtener información, consulte el artículo Funciones OLE de arrastrar y colocar.

Realizar un 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 desde el 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.

Consulte también

CWinApp: la clase Application