Wskazówki: używanie nowych formantów powłoki MFC
W tym przewodniku utworzysz aplikację przypominającą Eksplorator plików. Utworzysz okno z dwoma okienkami. Lewe okienko będzie zawierać obiekt CMFCShellTreeCtrl , który wyświetla pulpit w widoku hierarchicznym. W okienku po prawej stronie będzie przechowywany cmFCShellListCtrl, który pokazuje pliki w folderze wybranym w okienku po lewej stronie.
Wymagania wstępne
W programie Visual Studio 2017 lub nowszym obsługa MFC jest składnikiem opcjonalnym. Aby go zainstalować, otwórz Instalator programu Visual Studio z menu Start systemu Windows. Znajdź używaną wersję programu Visual Studio i wybierz przycisk Modyfikuj . Upewnij się, że kafelek Programowanie aplikacji klasycznych w języku C++ jest zaznaczone. W obszarze Składniki opcjonalne sprawdź przycisk Obsługa MFC.
W tym przewodniku założono, że skonfigurowaliśmy program Visual Studio do korzystania z Ustawienia ogólnego programowania. Jeśli używasz innego ustawienia programowania, niektóre okna programu Visual Studio używane w tym przewodniku mogą nie być domyślnie wyświetlane.
Aby utworzyć nową aplikację MFC przy użyciu Kreatora aplikacji MFC
Te kroki różnią się w zależności od używanej wersji programu Visual Studio. Aby zapoznać się z dokumentacją preferowanej wersji programu Visual Studio, użyj kontrolki selektora wersji . Znajduje się on w górnej części spisu treści na tej stronie.
Aby utworzyć projekt MFC w programie Visual Studio
W menu głównym wybierz pozycję Plik>nowy>projekt, aby otworzyć okno dialogowe Tworzenie nowego projektu.
W polu wyszukiwania u góry wpisz MFC, a następnie wybierz aplikację MFC z listy wyników.
Kliknij przycisk Dalej. Na następnej stronie wprowadź nazwę projektu i w razie potrzeby określ lokalizację projektu.
Wybierz przycisk Utwórz, aby utworzyć projekt.
Po wyświetleniu Kreatora aplikacji MFC użyj następujących opcji:
Wybierz pozycję Typ aplikacji po lewej stronie. Następnie wybierz pozycję Pojedynczy dokument i wybierz pozycję Obsługa architektury dokumentu/widoku. W obszarze Styl projektu wybierz pozycję Visual Studio, a z listy rozwijanej Styl wizualizacji i kolory wybierz pozycję Office 2007 (Motyw niebieski).
W okienku Obsługa dokumentów złożonych wybierz pozycję Brak.
Nie wprowadzaj żadnych zmian w okienku Właściwości szablonu dokumentu.
W okienku Funkcje interfejsu użytkownika upewnij się, że jest wybrana opcja Użyj paska menu i paska narzędzi . Pozostaw wszystkie inne opcje, ponieważ są.
W okienku Funkcje zaawansowane wybierz opcję Kontrolki ActiveX, Wspólny manifest kontrolki i Okienko nawigacji. Pozostaw wszystko inne tak, jak jest. Opcja Okienko nawigacji spowoduje, że kreator utworzy okienko po lewej stronie okna z
CMFCShellTreeCtrl
już osadzonym.Nie wprowadzimy żadnych zmian w okienku Wygenerowane klasy , więc kliknij przycisk Zakończ , aby utworzyć nowy projekt MFC.
Aby utworzyć projekt MFC w programie Visual Studio 2017 lub starszym
Użyj Kreatora aplikacji MFC, aby utworzyć nową aplikację MFC. Aby uruchomić kreatora, w menu Plik wybierz pozycję Nowy, a następnie wybierz pozycję Projekt. Zostanie wyświetlone okno dialogowe Nowy projekt .
W oknie dialogowym Nowy projekt rozwiń węzeł Visual C++ w okienku Typy projektów i wybierz pozycję MFC. Następnie w okienku Szablony wybierz pozycję Aplikacja MFC. Wpisz nazwę projektu, na przykład
MFCShellControls
i kliknij przycisk OK.Po wyświetleniu Kreatora aplikacji MFC użyj następujących opcji:
W okienku Typ aplikacji w obszarze Typ aplikacji wyczyść opcję Dokumenty z kartami. Następnie wybierz pozycję Pojedynczy dokument i wybierz pozycję Obsługa architektury dokumentu/widoku. W obszarze Styl projektu wybierz pozycję Visual Studio, a z listy rozwijanej Styl wizualizacji i kolory wybierz pozycję Office 2007 (Motyw niebieski).
W okienku Obsługa dokumentów złożonych wybierz pozycję Brak.
Nie wprowadzaj żadnych zmian w okienku Ciągi szablonu dokumentu.
W okienku Obsługa bazy danych (program Visual Studio 2015 i starsze) wybierz pozycję Brak , ponieważ aplikacja nie używa bazy danych.
W okienku Funkcje interfejsu użytkownika upewnij się, że jest wybrana opcja Użyj paska menu i paska narzędzi . Pozostaw wszystkie inne opcje, ponieważ są.
W okienku Funkcje zaawansowane w obszarze Funkcje zaawansowane wybierz tylko kontrolki ActiveX i wspólny manifest kontrolki. W obszarze Okienka ramki zaawansowane wybierz tylko opcję Okienko nawigacji. Spowoduje to utworzenie okienka po lewej stronie okna z już osadzonym kreatorem
CMFCShellTreeCtrl
.Nie wprowadzimy żadnych zmian w okienku Wygenerowane klasy , więc kliknij przycisk Zakończ , aby utworzyć nowy projekt MFC.
Sprawdź, czy aplikacja została utworzona pomyślnie, kompilując i uruchamiając ją. Aby skompilować aplikację, w menu Kompilacja wybierz pozycję Kompiluj rozwiązanie. Jeśli aplikacja zostanie pomyślnie skompilowany, uruchom aplikację, wybierając pozycję Rozpocznij debugowanie z menu Debugowanie.
Kreator automatycznie tworzy aplikację z standardowym paskiem menu, standardowym paskiem narzędzi, standardowym paskiem stanu i paskiem programu Outlook po lewej stronie okna z widokiem Foldery i widokiem Kalendarz .
Aby dodać kontrolkę listy powłoki do widoku dokumentu
W tej sekcji dodasz wystąpienie
CMFCShellListCtrl
do widoku utworzonego przez kreatora. Otwórz plik nagłówka widoku, klikając dwukrotnie plik MFCShellControlsView.h w Eksplorator rozwiązań.Znajdź dyrektywę
#pragma once
w górnej części pliku nagłówka. Natychmiast pod nim dodaj ten kod, aby uwzględnić plik nagłówka dlaCMFCShellListCtrl
elementu :#include <afxShellListCtrl.h>
Teraz dodaj zmienną składową typu
CMFCShellListCtrl
. Najpierw znajdź następujący komentarz w pliku nagłówka:// Generated message map functions
Bezpośrednio nad tym komentarzem dodaj następujący kod:
private: CMFCShellListCtrl m_wndList;
Kreator aplikacji MFC utworzył
CMFCShellTreeCtrl
już obiekt wCMainFrame
klasie, ale jest to chroniony element członkowski. Uzyskamy dostęp do obiektu później, więc utworzymy dla niego teraz metodę dostępu. Otwórz plik nagłówka MainFrm.h, klikając go dwukrotnie w Eksplorator rozwiązań. Znajdź następujący komentarz:// Attributes
Natychmiast pod nim dodaj następującą deklarację metody:
public: CMFCShellTreeCtrl& GetShellTreeCtrl();
Następnie otwórz plik źródłowy MainFrm.cpp, klikając go dwukrotnie w Eksplorator rozwiązań. W dolnej części tego pliku dodaj następującą definicję metody:
CMFCShellTreeCtrl& CMainFrame::GetShellTreeCtrl() { return m_wndTree; }
Teraz zaktualizujemy klasę do
CMFCShellControlsView
obsługi komunikatuWM_CREATE
systemu Windows. Otwórz okno Widok klasy i wybierz klasęCMFCShellControlsView
. Kliknij prawym przyciskiem myszy i wybierz polecenie Właściwości.Następnie w Kreatorze klas kliknij kartę Komunikaty . Przewiń w dół do momentu znalezienia komunikatu
WM_CREATE
. Z listy rozwijanej obokWM_CREATE
pozycji wybierz pozycję <Dodaj> przyUtwórz. Polecenie tworzy program obsługi komunikatów dla nas i automatycznie aktualizuje mapę komunikatów MFC.W metodzie
OnCreate
utworzymy teraz naszCMFCShellListCtrl
obiekt. Znajdź definicjęOnCreate
metody w pliku źródłowym MFCShellControlsView.cpp i zastąp jego implementację następującym kodem: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; }
Powtórz poprzedni krok, ale dla komunikatu
WM_SIZE
. Spowoduje to ponowne rysowanie widoku aplikacji za każdym razem, gdy użytkownik zmieni rozmiar okna aplikacji. Zastąp definicjęOnSize
metody następującym kodem: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); }
Ostatnim krokiem jest połączenie
CMFCShellTreeCtrl
obiektów iCMFCShellListCtrl
przy użyciu metody CMFCShellTreeCtrl::SetRelatedList . Po wywołaniuCMFCShellTreeCtrl::SetRelatedList
metody elementCMFCShellListCtrl
automatycznie wyświetli zawartość elementu wybranego w elemencieCMFCShellTreeCtrl
. Łączymy obiekty w metodzieOnActivateView
, która jest zastępowana z obiektu CView::OnActivateView.W pliku nagłówka
CMFCShellControlsView
MFCShellControlsView.h wewnątrz deklaracji klasy dodaj następującą deklarację metody:protected: virtual void OnActivateView(BOOL bActivate, CView* pActivateView, CView* pDeactiveView);
Następnie dodaj definicję metody do pliku źródłowego 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); }
Ponieważ wywołujemy metody z
CMainFrame
klasy, musimy dodać dyrektywę#include
w górnej części pliku źródłowego MFCShellControlsView.cpp:#include "MainFrm.h"
Sprawdź, czy aplikacja została utworzona pomyślnie, kompilując i uruchamiając ją. Aby skompilować aplikację, w menu Kompilacja wybierz pozycję Kompiluj rozwiązanie. Jeśli aplikacja zostanie pomyślnie skompilowany, uruchom ją, wybierając pozycję Rozpocznij debugowanie z menu Debugowanie.
Teraz powinny zostać wyświetlone szczegóły elementu wybranego w
CMFCShellTreeCtrl
okienku widoku. Po kliknięciu węzła w obiekcieCMFCShellTreeCtrl
CMFCShellListCtrl
element zostanie automatycznie zaktualizowany. Podobnie, jeśli dwukrotnie klikniesz folder w folderzeCMFCShellListCtrl
,CMFCShellTreeCtrl
element powinien zostać automatycznie zaktualizowany.Kliknij prawym przyciskiem myszy dowolny element w kontrolce drzewa lub w kontrolce listy. Zostanie wyświetlone to samo menu kontekstowe, jak w przypadku korzystania z rzeczywistego Eksplorator plików.
Następne kroki
Kreator utworzył pasek programu Outlook z okienkiem Foldery i okienkiem Kalendarz . Prawdopodobnie nie ma sensu mieć okienka Kalendarz w oknie Eksploratora , więc usuń to okienko teraz.
Program
CMFCShellListCtrl
obsługuje wyświetlanie plików w różnych trybach, takich jak duże ikony, małe ikony, lista i szczegóły. Zaktualizuj aplikację, aby zaimplementować tę funkcję. Wskazówka: zobacz Przykłady języka Visual C++.