Compartir a través de


Tutorial: Mediante el Nuevo MFC Shell Controls

En este tutorial, creará una aplicación similar al Explorador del archivo.Creará una ventana que contendrá dos paneles.El panel de la izquierda contendrá un objeto de CMFCShellTreeCtrl que mostrará el escritorio en una vista jerárquica.El panel de la derecha contendrá CMFCShellListCtrl que muestra los archivos de la carpeta seleccionada en el panel izquierdo.

Requisitos previos

Este tutorial supone que ha configurar Visual Studio para utilizar Configuración general de desarrollo.Si usa un valor de desarrollo, algunas ventanas de Visual Studio que utilizamos en este tutorial podrían no mostrarse de forma predeterminada.

Para crear una nueva aplicación MFC mediante el asistente para aplicaciones MFC

  1. Utilice Asistente para aplicaciones MFC para crear una aplicación MFC.Para ejecutar el asistente, en el menú de El archivo seleccione Nuevoy, a continuación Proyecto.El cuadro de diálogo de Nuevo proyecto se mostrará.

  2. En el cuadro de diálogo de Nuevo proyecto , expanda el nodo de *** Visual C++ *** en el panel de Tipos de proyecto y seleccione *** MFC ***.A continuación, en el panel de Plantillas , seleccione Aplicación MFC.Escriba un nombre para el proyecto, como MFCShellControls y haga clic en Aceptar.Asistente para aplicaciones MFC Se mostrará.

  3. En el cuadro de diálogo de Asistente para aplicaciones MFC , haga clic en Siguiente.El panel de Tipo de aplicación se mostrará.

  4. En el panel de Tipo de aplicación , en Tipo de aplicación, desactive la opción de Organización por fichas .A continuación, *** Documento *** seleccione y ***** Compatibilidad con la arquitectura documento/vista *****seleccione.En Estilo del proyecto, Visual Studioseleccione y, en la lista desplegable de *** estilo y colores visuales *** seleccione Office 2007 (tema Azul).Deje el resto de las opciones como son.Haga clic Siguiente para mostrar el panel de Compatib. doc. compuestos .

  5. En el panel de Compatib. doc. compuestos , seleccione *** ninguno ***.Haga clic Siguiente para mostrar el panel de *** Cadenas de plantilla de documento *** .

  6. No realice ninguna modificación al panel de *** Cadenas de plantilla de documento *** .Haga clic Siguiente para mostrar el panel de Compatib. con bases de datos .

  7. En el panel de Compatib. con bases de datos , *** ninguno *** seleccionar porque esta aplicación no utiliza una base de datos.Haga clic Siguiente para mostrar el panel de Caract. de la interfaz de usuario .

  8. En el panel de Caract. de la interfaz de usuario , compruebe que la opción de *** utilice una barra de menús y una barra de herramientas *** está seleccionada.Deje el resto de las opciones como son.Haga clic Siguiente para mostrar el panel de Características avanzadas .

  9. En el panel de Características avanzadas , en Características avanzadas, seleccione solo Controles ActiveX y *** Control común manifiesto ***.En Paneles de marco avanzados, seleccione solo la opción de Panel de navegación .Esto hará que el asistente para crear el panel de la izquierda de la ventana con CMFCShellTreeCtrl insertado ya.Haga clic Siguiente para mostrar el panel de Clases generadas .

  10. No vamos a realizar cambios al panel de Clases generadas .Por consiguiente, haga clic Finalizar para crear el nuevo proyecto MFC.

  11. Compruebe que la aplicación se creó correctamente; para ello, compílela y ejecútela.Para compilar la aplicación, en el menú de Compilación seleccione Generar solución.Si la aplicación se compila correctamente, ejecute la aplicación seleccionando Iniciar depuración de menú de Depurar .

    El asistente crea automáticamente una aplicación con 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 de Carpetas y una vista de Calendario .

Para agregar el control de lista de shell a la vista del documento

  1. En esta sección, agregará una instancia de CMFCShellListCtrl a la vista que el asistente creó.Abra el archivo de encabezado de la vista haciendo doble clic en MFCShellControlsView.h en Explorador de soluciones.

    Busque la directiva de #pragma once cerca de la parte superior del archivo de encabezado.Inmediatamente debajo de él agregue este código para incluir el archivo de encabezado para CMFCShellListCtrl:

    #include <afxShellListCtrl.h>
    

    Agregue una variable miembro de CMFCShellListCtrlescrito.Primero, busque el siguiente comentario en el archivo de encabezado:

    // Generated message map functions
    

    Inmediatamente sobre ese comentario agregue este código:

    private:
        CMFCShellListCtrl m_wndList;
    
  2. Asistente para aplicaciones MFC Creado ya un objeto de CMFCShellTreeCtrl en la clase de CMainFrame , pero es miembro protegido.Tendremos acceso a este objeto.Por consiguiente, ahora cree un descriptor de acceso para él.Abra el archivo de encabezado de MainFrm.h haciendo doble clic en Explorador de soluciones.Busque el siguiente comentario:

    // Attributes
    

    Justo debajo de él, agregue la declaración del método siguiente:

    public:
        CMFCShellTreeCtrl& GetShellTreeCtrl();
    

    A continuación, abra el archivo de código fuente de MainFrm.cpp haciendo doble clic en Explorador de soluciones.En la parte inferior de ese archivo, agregue la definición de método siguientes:

    CMFCShellTreeCtrl& CMainFrame::GetShellTreeCtrl()
    {
        return m_wndTree;
    }
    
  3. Ahora actualizamos la clase de CMFCShellControlsView para procesar el mensaje de las ventanas de WM_CREATE .Abra el archivo de encabezado de MFCShellControlsView.h y haga clic en esta línea de código:

    class CMFCShellControlsView : public CView
    

    A continuación, en la ventana de Propiedades , haga clic en el icono de Mensajes .Desplácese hacia abajo hasta que encuentre el mensaje de WM_CREATE .En la lista desplegable situada junto a WM_CREATE, seleccione <Add> *** OnCreate ***.Esto crea un controlador de mensajes para nosotros y actualiza automáticamente el mapa de mensajes MFC.

    En el método de OnCreate ahora crearemos nuestro objeto de CMFCShellListCtrl .Busque la definición del método de OnCreate en el archivo de código fuente de MFCShellControlsView.cpp, y reemplace la implementación con 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 mensaje de WM_SIZE .Esto hará que la vista de las aplicaciones que se rediseñará siempre que un usuario cambie el tamaño de la ventana de la aplicación.Reemplace la definición del método de OnSize con 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 objetos de CMFCShellTreeCtrl y de CMFCShellListCtrl utilizando el método de CMFCShellTreeCtrl::SetRelatedList .Después de llamar a este método, CMFCShellListCtrl mostrará automáticamente el contenido del elemento seleccionado en CMFCShellTreeCtrl.Haremos esto en el método de OnActivateView , que se invalida de CView::OnActivateView.

    En el archivo de encabezado MFCShellControlsView.h, dentro de la declaración de clase de CMFCShellControlsView , agregue la declaración del método siguiente:

    protected:
        virtual void OnActivateView(BOOL bActivate,
            CView* pActivateView,
            CView* pDeactiveView);
    

    A continuación, agregue la definición de este método al archivo de código fuente de 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 llamando a los métodos de CMainFrame ordenan, se deben agregar una directiva de #include en la parte superior del archivo de código fuente 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ú de Compilación seleccione Generar solución.Si la aplicación se compila correctamente, ejecútela seleccionando Iniciar depuración de menú de Depurar .

    Debe ver los detalles del elemento seleccionado en CMFCShellTreeCtrl en el panel de la vista.Al hacer clic en un nodo de CMFCShellTreeCtrl, CMFCShellListCtrl automáticamente se actualizará.Igualmente, si hace doble clic en una carpeta en CMFCShellListCtrl, CMFCShellTreeCtrl debe automáticamente actualizarse.

    Haga clic con el botón secundario en cualquier elemento del control de árbol o en el control de lista.Observe que se obtiene el mismo menú contextual como si se utiliza el Explorador real del archivo.

Pasos siguientes

  • El asistente creó una barra de Outlook con un panel de Carpetas y un panel de Calendario .No tiene probablemente sentido de tener un panel de Calendario en una ventana del Explorador.Por consiguiente, ahora quitar ese panel.

  • CMFCShellListCtrl admite archivos de distintos modos, como Iconos grandes, Iconos pequeños, Lista, y Detalles.Actualice la aplicación para implementar esta funcionalidad.Sugerencia: vea Ejemplos de Visual C++.

Vea también

Otros recursos

Tutoriales (MFC)