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 este tutorial, creará una aplicación similar al Explorador de archivos. Creará una ventana con dos paneles. El panel izquierdo contendrá un objeto CMFCShellTreeCtrl que muestra el escritorio en una vista jerárquica. El panel derecho contendrá un CMFCShellListCtrl que muestra los archivos de la carpeta seleccionada en el panel izquierdo.
Prerrequisitos
En Visual Studio 2017 y versiones posteriores, la compatibilidad con MFC es un componente opcional. Para instalarlo, abra el Instalador de Visual Studio desde el menú Inicio de Windows. Busque la versión de Visual Studio que usa y elija el botón Modificar . Asegúrese de que el icono Desarrollo de escritorio con C++ está activado. En Componentes opcionales, active el botón Compatibilidad con MFC .
En este tutorial se da por supuesto que ha configurado Visual Studio para usar la configuración de desarrollo general. Si usa una configuración de desarrollo diferente, es posible que algunas ventanas de Visual Studio que usamos en este tutorial no se muestren de forma predeterminada.
Para crear una nueva aplicación MFC mediante el Asistente para aplicaciones MFC
Estos pasos varían en función de la versión de Visual Studio que use. Para ver la documentación de su versión preferida de Visual Studio, use el control de selector Versión. Se encuentra en la parte superior de la tabla de contenido de esta página.
Para crear un proyecto de MFC en Visual Studio
En el menú principal, seleccione Archivo>Nuevo>Proyecto para abrir el cuadro de diálogo Crear nuevo proyecto.
En el cuadro de búsqueda de la parte superior, escriba MFC y, a continuación, elija Aplicación MFC en la lista de resultados.
Haga clic en Next. En la página siguiente, escriba un nombre para el proyecto y especifique la ubicación del proyecto si lo desea.
Elija el botón Crear para crear el proyecto.
Una vez que se muestre el Asistente para aplicaciones MFC , use las siguientes opciones:
Elija Tipo de aplicación a la izquierda. A continuación, seleccione Documento único y Compatibilidad con la arquitectura de documentos y vistas. En Estilo de proyecto, seleccione Visual Studio y, en la lista desplegable Estilo visual y colores, seleccione Office 2007 (tema azul).
En el panel Compatibilidad con documentos compuestos , seleccione Ninguno.
No realice ningún cambio en el panel Propiedades de la plantilla de documento .
En el panel Características de la interfaz de usuario , asegúrese de que está seleccionada la opción Usar una barra de menús y una barra de herramientas . Deje todas las demás opciones tal como están.
En el panel Características avanzadas , seleccione controles ActiveX, Manifiesto de control común y opción panel de navegación . Deje todo lo demás como esté. La opción Panel de navegación hará que el asistente cree el panel a la izquierda de la ventana con un
CMFCShellTreeCtrl
elemento ya incrustado.No vamos a realizar ningún cambio en el panel Clases generadas , por lo que haga clic en Finalizar para crear el nuevo proyecto MFC.
Para crear un proyecto de MFC en Visual Studio 2017 o versiones anteriores
Use el Asistente para aplicaciones MFC para crear una nueva aplicación MFC. Para ejecutar el asistente, en el menú Archivo , seleccione Nuevo y, a continuación, seleccione Proyecto. Se mostrará el cuadro de diálogo Nuevo proyecto .
En el cuadro de diálogo Nuevo proyecto , expanda el nodo Visual C++ en el panel Tipos de proyecto y seleccione MFC. A continuación, en el panel Plantillas , seleccione Aplicación MFC. Escriba un nombre para el proyecto, como
MFCShellControls
y haga clic en Aceptar.Una vez que se muestre el Asistente para aplicaciones MFC , use las siguientes opciones:
En el panel Tipo de aplicación , en Tipo de aplicación, desactive la opción Documentos con pestañas . A continuación, seleccione Documento único y Compatibilidad con arquitectura de documento/vista. En Estilo de proyecto, seleccione Visual Studio y, en la lista desplegable Estilo visual y colores, seleccione Office 2007 (tema azul).
En el panel Compatibilidad con documentos compuestos , seleccione Ninguno.
No realice ningún cambio en el panel Cadenas de plantilla de documento .
En el panel Compatibilidad con bases de datos (Visual Studio 2015 y versiones anteriores), seleccione Ninguno porque la aplicación no usa una base de datos.
En el panel Características de la interfaz de usuario , asegúrese de que está seleccionada la opción Usar una barra de menús y una barra de herramientas . Deje todas las demás opciones tal como están.
En el panel Características avanzadas , en Características avanzadas, seleccione solo controles ActiveX y Manifiesto de control común. En Paneles de fotogramas avanzados, seleccione solo la opción Panel de navegación . Hará que el asistente cree el panel a la izquierda de la ventana con un
CMFCShellTreeCtrl
elemento ya incrustado.No vamos a realizar ningún cambio en el panel Clases generadas , por lo que haga clic en Finalizar para crear el nuevo proyecto MFC.
Compruebe que la aplicación se creó correctamente; para ello, compílela y ejecútela. Para compilar la aplicación, en el menú Compilar , seleccione Compilar solución. Si la aplicación se compila correctamente, ejecute la aplicación seleccionando Iniciar depuración en el menú Depurar .
El asistente crea automáticamente una aplicación que tiene una barra de menús estándar, una barra de herramientas estándar, una barra de estado estándar y una barra de Outlook a la izquierda de la ventana con una vista Carpetas y una vista Calendario .
Para agregar el control de lista de shell a la vista de documento
En esta sección, agregará una instancia de
CMFCShellListCtrl
a la vista que creó el asistente. Abra el archivo de encabezado de vista haciendo doble clic en MFCShellControlsView.h en el Explorador de soluciones.Busque la
#pragma once
directiva cerca de la parte superior del archivo de encabezado. Inmediatamente debajo, agregue este código para incluir el archivo de encabezado paraCMFCShellListCtrl
:#include <afxShellListCtrl.h>
Ahora agregue una variable miembro de tipo
CMFCShellListCtrl
. En primer lugar, busque el siguiente comentario en el archivo de encabezado:// Generated message map functions
Inmediatamente encima de ese comentario, agregue este código:
private: CMFCShellListCtrl m_wndList;
El Asistente para aplicaciones MFC ya creó un
CMFCShellTreeCtrl
objeto en laCMainFrame
clase , pero es un miembro protegido. Accederemos al objeto más adelante, por lo que crearemos un descriptor de acceso para él ahora. Abra el archivo de encabezado MainFrm.h haciendo doble clic en él en el Explorador de soluciones. Busque el comentario siguiente:// Attributes
Inmediatamente bajo él, agregue la siguiente declaración de método:
public: CMFCShellTreeCtrl& GetShellTreeCtrl();
A continuación, abra el archivo de origen MainFrm.cpp haciendo doble clic en él en el Explorador de soluciones. En la parte inferior de ese archivo, agregue la siguiente definición de método:
CMFCShellTreeCtrl& CMainFrame::GetShellTreeCtrl() { return m_wndTree; }
Ahora actualizamos la
CMFCShellControlsView
clase para controlar el mensaje deWM_CREATE
Windows. Abra la ventana Vista de clases y seleccione laCMFCShellControlsView
clase . Haga clic con el botón secundario y seleccione Propiedades.A continuación, en asistente para clases, haga clic en la pestaña Mensajes . Desplácese hacia abajo hasta que encuentre el
WM_CREATE
mensaje. En la lista desplegable situada junto aWM_CREATE
, seleccione <Agregar> activadoCrear. El comando crea un controlador de mensajes para nosotros y actualiza automáticamente el mapa de mensajes de MFC.En el
OnCreate
método , ahora crearemos nuestroCMFCShellListCtrl
objeto . Busque la definición delOnCreate
método en el archivo de código fuente MFCShellControlsView.cpp y reemplace su implementación por el código siguiente:int CMFCShellControlsView::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CView::OnCreate(lpCreateStruct) == -1) return -1; CRect rectDummy (0, 0, 0, 0); m_wndList.Create(WS_CHILD | WS_VISIBLE | LVS_REPORT, rectDummy, this, 1); return 0; }
Repita el paso anterior, pero para el
WM_SIZE
mensaje. Hará que la vista de aplicaciones se vuelva a dibujar cada vez que un usuario cambie el tamaño de la ventana de la aplicación. Reemplace la definición delOnSize
método por el código siguiente:void CMFCShellControlsView::OnSize(UINT nType, int cx, int cy) { CView::OnSize(nType, cx, cy); m_wndList.SetWindowPos(NULL, -1, -1, cx, cy, SWP_NOMOVE | SWP_NOZORDER | SWP_NOACTIVATE); }
El último paso es conectar los
CMFCShellTreeCtrl
objetos yCMFCShellListCtrl
mediante el método CMFCShellTreeCtrl::SetRelatedList . Después de llamar aCMFCShellTreeCtrl::SetRelatedList
, mostraráCMFCShellListCtrl
automáticamente el contenido del elemento seleccionado en .CMFCShellTreeCtrl
Conectamos los objetos delOnActivateView
método , que se invalida desde CView::OnActivateView.En el archivo de encabezado MFCShellControlsView.h, dentro de la
CMFCShellControlsView
declaración de clase, agregue la siguiente declaración de método:protected: virtual void OnActivateView(BOOL bActivate, CView* pActivateView, CView* pDeactiveView);
A continuación, agregue la definición del método al archivo de origen MFCShellControlsView.cpp:
void CMFCShellControlsView::OnActivateView(BOOL bActivate, CView* pActivateView, CView* pDeactiveView) { if (bActivate&& AfxGetMainWnd() != NULL) { ((CMainFrame*)AfxGetMainWnd())->GetShellTreeCtrl().SetRelatedList(&m_wndList); } CView::OnActivateView(bActivate, pActivateView, pDeactiveView); }
Dado que estamos llamando a métodos de la
CMainFrame
clase , debemos agregar una#include
directiva en la parte superior del archivo de origen de MFCShellControlsView.cpp:#include "MainFrm.h"
Compruebe que la aplicación se creó correctamente; para ello, compílela y ejecútela. Para compilar la aplicación, en el menú Compilar , seleccione Compilar solución. Si la aplicación se compila correctamente, ejecútelo seleccionando Iniciar depuración en el menú Depurar .
Ahora debería ver los detalles del elemento seleccionado en el
CMFCShellTreeCtrl
panel de vista. Al hacer clic en un nodo enCMFCShellTreeCtrl
, seCMFCShellListCtrl
actualizará automáticamente. Del mismo modo, si hace doble clic en una carpeta enCMFCShellListCtrl
,CMFCShellTreeCtrl
se debe actualizar automáticamente.Haga clic con el botón derecho en cualquier elemento del control de árbol o en el control de lista. Obtiene el mismo menú contextual que si estuviera usando el Explorador de archivos real.
Pasos siguientes
El asistente creó una barra de Outlook con un panel Carpetas y un panel Calendario . Probablemente no tenga sentido tener un panel Calendario en una ventana del Explorador , por lo que quitar ese panel ahora.
CMFCShellListCtrl
admite la visualización de archivos en diferentes modos, como iconos grandes, iconos pequeños, lista y detalles. Actualice la aplicación para implementar esta funcionalidad. Sugerencia: vea Ejemplos de Visual C++.