Compartir a través de


Tutorial: Uso de los nuevos controles de shell de MFC

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

  1. En el menú principal, seleccione Archivo>Nuevo>Proyecto para abrir el cuadro de diálogo Crear nuevo proyecto.

  2. 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.

  3. 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.

  4. Elija el botón Crear para crear el proyecto.

    Una vez que se muestre el Asistente para aplicaciones MFC , use las siguientes opciones:

    1. 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).

    2. En el panel Compatibilidad con documentos compuestos , seleccione Ninguno.

    3. No realice ningún cambio en el panel Propiedades de la plantilla de documento .

    4. 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.

    5. 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.

    6. 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

  1. 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 .

  2. 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:

    1. 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).

    2. En el panel Compatibilidad con documentos compuestos , seleccione Ninguno.

    3. No realice ningún cambio en el panel Cadenas de plantilla de documento .

    4. 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.

    5. 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.

    6. 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.

    7. 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

  1. 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 para CMFCShellListCtrl:

    #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;
    
  2. El Asistente para aplicaciones MFC ya creó un CMFCShellTreeCtrl objeto en la CMainFrame 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;
    }
    
  3. Ahora actualizamos la CMFCShellControlsView clase para controlar el mensaje de WM_CREATE Windows. Abra la ventana Vista de clases y seleccione la CMFCShellControlsView 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 a WM_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 nuestro CMFCShellListCtrl objeto . Busque la definición del OnCreate 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;
    }
    
  4. 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 del OnSize 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);
    }
    
  5. El último paso es conectar los CMFCShellTreeCtrl objetos y CMFCShellListCtrl mediante el método CMFCShellTreeCtrl::SetRelatedList . Después de llamar a CMFCShellTreeCtrl::SetRelatedList, mostrará CMFCShellListCtrl automáticamente el contenido del elemento seleccionado en .CMFCShellTreeCtrl Conectamos los objetos del OnActivateView 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"
    
  6. 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 en CMFCShellTreeCtrl, se CMFCShellListCtrl actualizará automáticamente. Del mismo modo, si hace doble clic en una carpeta en CMFCShellListCtrl, 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++.

Consulte también

Tutoriales