Instruções passo a passo: usando os novos controles de shell MFC
Neste passo a passo, você criará um aplicativo semelhante ao Explorador de Arquivos. Você criará uma janela com dois painéis. O painel esquerdo terá um objeto CMFCShellTreeCtrl que exibe sua Área de Trabalho com uma exibição hierárquica. O painel direito terá um CMFCShellListCtrl que mostra os arquivos na pasta selecionada no painel esquerdo.
Pré-requisitos
No Visual Studio 2017 e posteriores, o suporte para o MFC é um componente opcional. Para instalá-lo, abra o Instalador do Visual Studio no menu Iniciar do Windows. Localize a versão do Visual Studio que você está usando e escolha o botão Modificar. Verifique se o bloco Desenvolvimento de Área de Trabalho com C++ está marcado. Em Componentes Opcionais, verifique o botão Suporte ao MFC.
Este passo a passo pressupõe que você tenha configurado o Visual Studio para usar as Configurações Gerais de Desenvolvimento. Se você estiver usando uma configuração de desenvolvimento diferente, algumas janelas do Visual Studio que usamos neste passo a passo poderão não ser exibidas por padrão.
Para criar um aplicativo MFC usando o Assistente de Aplicativo MFC
Estas etapas variam dependendo da versão do Visual Studio que você está usando. Para ver a documentação da sua versão preferencial do Visual Studio, use o controle seletor de Versão. Ele é encontrado na parte superior da tabela de conteúdo nesta página.
Para criar um projeto do MFC no Visual Studio
No menu principal, escolha Arquivo>Novo>Projeto para abrir a caixa de diálogo Criar um projeto.
Na caixa de diálogo na parte superior, digite MFC e escolha Aplicativo MFC na lista de resultados.
Clique em Avançar. Na próxima página, insira um nome para o projeto e especifique o local do projeto, se desejar.
Escolha o botão Criar para criar o projeto.
Após o Assistente de Aplicativo MFC ser exibido, use as seguintes opções:
Escolha o Tipo de Aplicativo à esquerda. Em seguida, selecione Documento único e selecione Suporte à arquitetura de documento/exibição. Em Estilo do projeto, selecione Visual Studio e, na lista suspensa Estilo visual e cores, selecione Office 2007 (tema azul).
No painel Suporte para Documento Composto, selecione Nenhum.
Não faça nenhuma alteração no painel Propriedades do Modelo de Documento.
No painel Recursos da Interface do Usuário, verifique se a opção Usar uma barra de menus e barra de ferramentas está selecionada. Deixe todas as outras opções como estão.
No painel Recursos Avançados, selecione as opções Controles ActiveX, Manifesto de Controle Comum e Painel de Navegação. Deixe todo o resto inalterado. A opção Painel de Navegação fará com que o assistente crie o painel à esquerda da janela com um
CMFCShellTreeCtrl
já inserido.Não faremos nenhuma alteração no painel Classes Geradas, portanto, clique em Concluir para criar o projeto do MFC.
Para criar um projeto do MFC no Visual Studio 2017 ou anterior
Use o Assistente de Aplicativo MFC para criar um aplicativo MFC. Para executar o assistente, no menu Arquivo, selecione Novo e, em seguida, Projeto. A caixa de diálogo Novo Projeto será exibida.
Na caixa de diálogo Novo Projeto, expanda o nó Visual C++ no painel Tipos de projeto e selecione MFC. Em seguida, no painel Modelos, selecione Aplicativo do MFC. Digite um nome para o projeto, como
MFCShellControls
e clique em OK.Após o Assistente de Aplicativo MFC ser exibido, use as seguintes opções:
No painel Tipo de Aplicativo, no Tipo de aplicativo, desmarque a opção Documentos com guias. Em seguida, selecione Documento único e selecione Suporte à arquitetura de documento/exibição. Em Estilo do projeto, selecione Visual Studio e, na lista suspensa Estilo visual e cores, selecione Office 2007 (tema azul).
No painel Suporte para Documento Composto, selecione Nenhum.
Não faça nenhuma alteração no painel Cadeias de Caracteres do Modelo de Documento.
No painel Suporte ao Banco de Dados (Visual Studio 2015 e anteriores), selecione Nenhum porque o aplicativo não usa um banco de dados.
No painel Recursos da Interface do Usuário, verifique se a opção Usar uma barra de menus e barra de ferramentas está selecionada. Deixe todas as outras opções como estão.
No painel Recursos Avançados, em Recursos avançados, selecione apenas Controles ActiveX e Manifesto de Controle Comum. Em Painéis de quadro avançados, selecione apenas a opção Painel de navegação. Isso fará com que o assistente crie o painel à esquerda da janela com um
CMFCShellTreeCtrl
já inserido.Não faremos nenhuma alteração no painel Classes Geradas, portanto, clique em Concluir para criar o projeto do MFC.
Verifique se o aplicativo foi criado com êxito compilando e executando-o. Para compilar o aplicativo, no menu Compilar, selecione Compilar Solução. Se o aplicativo for compilado com êxito, execute-o selecionando Iniciar depuração no menu Depurar.
O assistente cria automaticamente um aplicativo que tem uma barra de menus padrão, uma barra de ferramentas padrão, uma barra de status padrão e uma barra do Outlook à esquerda da janela, com uma exibição de Pastas e uma exibição de Calendário.
Para adicionar o controle de lista de shells à exibição do documento
Nesta seção, você adicionará uma instância de
CMFCShellListCtrl
à exibição que o assistente criou. Abra o arquivo de cabeçalho da exibição clicando duas vezes em MFCShellControlsView.h no Gerenciador de Soluções.Localize a diretiva
#pragma once
próximo da parte superior do arquivo de cabeçalho. Logo abaixo dele, adicione este código para incluir o arquivo de cabeçalho paraCMFCShellListCtrl
:#include <afxShellListCtrl.h>
Agora, adicione uma variável de membro do tipo
CMFCShellListCtrl
. Primeiro, localize o seguinte comentário no arquivo de cabeçalho:// Generated message map functions
Logo acima desse comentário, adicione este código:
private: CMFCShellListCtrl m_wndList;
O Assistente de Aplicativo MFC já criou um objeto
CMFCShellTreeCtrl
na classeCMainFrame
, mas trata-se de um membro protegido. Acessaremos o objeto mais tarde, portanto, crie um acessador para ele agora. Abra o arquivo de cabeçalho Main.Frm.h clicando duas vezes nele no Gerenciador de Soluções. Localize o seguinte comentário:// Attributes
Logo abaixo dele, adicione a seguinte declaração de método:
public: CMFCShellTreeCtrl& GetShellTreeCtrl();
Em seguida, abra o arquivo de origem MainFrm.cpp clicando duas vezes nele no Gerenciador de Soluções. Na parte inferior do arquivo, adicione a seguinte definição de método:
CMFCShellTreeCtrl& CMainFrame::GetShellTreeCtrl() { return m_wndTree; }
Agora, atualizamos a classe
CMFCShellControlsView
para manipular a mensagem de janelaWM_CREATE
. Abra a janela Modo de Exibição de Classe e selecione a classeCMFCShellControlsView
. Clique com o botão direito do mouse e selecione Propriedades.Em seguida, no Assistente de Classe, clique na guia Mensagens. Role para baixo até encontrar a mensagem
WM_CREATE
. Na lista suspensa ao lado deWM_CREATE
, selecione <Adicionar> OnCreate. O comando cria um manipulador de mensagens e atualiza automaticamente o mapa de mensagens do MFC.No método
OnCreate
, agora criaremos nosso objetoCMFCShellListCtrl
. Localize a definição do métodoOnCreate
no arquivo de origem MFCShellControlsView.cpp e substitua sua implementação pelo seguinte código: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 a etapa anterior para a mensagem
WM_SIZE
. Isso fará com que a exibição do aplicativo seja redesenhada sempre que um usuário alterar o tamanho da janela do aplicativo. Substitua a definição do métodoOnSize
pelo seguinte código: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); }
A última etapa é conectar os objetos
CMFCShellTreeCtrl
eCMFCShellListCtrl
usando o método CMFCShellTreeCtrl::SetRelatedList. Depois de chamarCMFCShellTreeCtrl::SetRelatedList
, oCMFCShellListCtrl
exibirá automaticamente o conteúdo do item selecionado noCMFCShellTreeCtrl
. Conectamos os objetos no métodoOnActivateView
, que é substituído de CView::OnActivateView.No arquivo de cabeçalho MFCShellControlsView.h, dentro da declaração de classe
CMFCShellControlsView
, adicione a seguinte declaração de método:protected: virtual void OnActivateView(BOOL bActivate, CView* pActivateView, CView* pDeactiveView);
Em seguida, adicione a definição do método ao arquivo de origem 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); }
Como estamos chamando métodos da classe
CMainFrame
, devemos adicionar uma diretiva#include
na parte superior do arquivo de origem MFCShellControlsView.cpp:#include "MainFrm.h"
Verifique se o aplicativo foi criado com êxito compilando e executando-o. Para compilar o aplicativo, no menu Compilar, selecione Compilar Solução. Se o aplicativo for compilado com êxito, execute-o selecionando Iniciar depuração no menu Depurar.
Agora, você deve ver os detalhes do item selecionado em
CMFCShellTreeCtrl
no painel de exibição. Quando você clicar em um nó noCMFCShellTreeCtrl
, oCMFCShellListCtrl
será atualizado automaticamente. Da mesma forma, se você clicar duas vezes em uma pasta noCMFCShellListCtrl
, oCMFCShellTreeCtrl
deverá ser atualizado automaticamente.Clique com o botão direito do mouse em qualquer item no controle de árvore ou no controle de lista. Você obtém o mesmo menu de contexto que se estivesse usando o Explorador de Arquivos real.
Próximas etapas
O assistente criou uma barra do Outlook com um painel Pastas e um painel Calendário. Provavelmente, não faz sentido ter um painel Calendário em uma janela do Explorador, então remova esse painel.
O
CMFCShellListCtrl
dá suporte para exibir arquivos em modos diferentes, como Ícones Grandes, Ícones Pequenos, Lista e Detalhes. Atualize seu aplicativo para implementar essa funcionalidade. Dica: consulte os Exemplos do Visual C++.