다음을 통해 공유


연습: 새 MFC 셸 컨트롤 사용

이 연습에서는 파일 탐색기 유사한 애플리케이션을 만듭니다. 두 개의 창이 있는 창을 만듭니다. 왼쪽 창에는 데스크톱을 계층적 보기로 표시하는 CMFCShellTreeCtrl 개체가 있습니다. 오른쪽 창에는 왼쪽 창에서 선택한 폴더의 파일을 표시하는 CMFCShellListCtrl 이 있습니다.

필수 조건

  • Visual Studio 2017 이상에서 MFC 지원은 선택적 구성 요소입니다. 설치하려면 Windows 시작 메뉴 Visual Studio 설치 관리자 엽니다. 사용 중인 Visual Studio 버전을 찾아 수정 단추를 선택합니다. C++ 타일을 사용한 데스크톱 개발이 검사 있는지 확인합니다. 선택적 구성 요소에서 MFC 지원 단추를 검사.

  • 이 연습에서는 일반 개발 설정 사용하도록 Visual Studio를 설정한다고 가정합니다. 다른 개발 설정을 사용하는 경우 이 연습에서 사용하는 일부 Visual Studio 창은 기본적으로 표시되지 않을 수 있습니다.

MFC 애플리케이션 마법사를 사용하여 새 MFC 애플리케이션을 만들려면

이러한 단계는 사용 중인 Visual Studio 버전에 따라 달라집니다. 기본 설정된 버전의 Visual Studio에 대한 설명서를 보려면 버전 선택기 컨트롤을 사용하세요. 이 페이지의 목차 맨 위에 있습니다.

Visual Studio에서 MFC 프로젝트를 만들려면

  1. 주 메뉴에서 파일>새로 만들기>프로젝트를 선택하여 새 프로젝트 만들기 대화 상자를 엽니다.

  2. 맨 위에 있는 검색 상자에 MFC를 입력한 다음 결과 목록에서 MFC 앱을 선택합니다.

  3. 다음을 클릭합니다. 다음 페이지에서 프로젝트의 이름을 입력하고 원하는 경우 프로젝트 위치를 지정합니다.

  4. 만들기 단추를 선택하여 프로젝트를 만듭니다.

    MFC 애플리케이션 마법사가 표시되면 다음 옵션을 사용합니다.

    1. 왼쪽에서 애플리케이션 유형을 선택합니다. 그런 다음, 단일 문서를 선택하고 문서/보기 아키텍처 지원을 선택합니다. 프로젝트 스타일에서 Visual Studio를 선택하고 비주얼 스타일 및 색 드롭다운 목록에서 Office 2007(파란색 테마)을 선택합니다.

    2. 복합 문서 지원 창에서 없음을 선택합니다.

    3. 문서 서식 파일 속성 창을 변경하지 마세요.

    4. 사용자 인터페이스 기능 창에서 메뉴 모음 및 도구 모음 사용 옵션이 선택되어 있는지 확인 합니다. 다른 모든 옵션은 그대로 둡니다.

    5. 고급 기능 창에서 ActiveX 컨트롤, 공용 컨트롤 매니페스트탐색 창 옵션을 선택합니다. 다른 모든 것은 그대로 두십시오. 탐색 창 옵션을 사용하면 마법사가 이미 포함된 창 왼쪽에 창을 CMFCShellTreeCtrl 만듭니다.

    6. 생성된 클래스 창을 변경하지 않으므로 마침을 클릭하여 새 MFC 프로젝트를 만듭니다.

Visual Studio 2017 이하에서 MFC 프로젝트를 만들려면

  1. MFC 애플리케이션 마법사사용하여 새 MFC 애플리케이션을 만듭니다. 마법사를 실행하려면 파일 메뉴에서 새로 만들기를 선택한 다음 프로젝트를 선택합니다. 새 프로젝트 대화 상자가 표시됩니다.

  2. 새 프로젝트 대화 상자의 프로젝트 형식 창에서 Visual C++ 노드를 확장하고 MFC를 선택합니다. 그런 다음 템플릿 창에서 MFC 애플리케이션을 선택합니다. 프로젝트의 MFCShellControls 이름을 입력하고 확인을 클릭합니다.

    MFC 애플리케이션 마법사가 표시되면 다음 옵션을 사용합니다.

    1. 애플리케이션 유형 창의 애플리케이션 유형에서 탭 문서 옵션을 선택 취소합니다. 다음으로, 단일 문서를 선택하고 문서/보기 아키텍처 지원을 선택합니다. 프로젝트 스타일에서 Visual Studio를 선택하고 비주얼 스타일 및 색 드롭다운 목록에서 Office 2007(파란색 테마)을 선택합니다.

    2. 복합 문서 지원 창에서 없음을 선택합니다.

    3. 문서 서식 파일 문자열 창을 변경하지 마세요.

    4. 데이터베이스 지원 창(Visual Studio 2015 이상)에서 애플리케이션에서 데이터베이스를 사용하지 않으므로 없음을 선택합니다.

    5. 사용자 인터페이스 기능 창에서 메뉴 모음 및 도구 모음 사용 옵션이 선택되어 있는지 확인 합니다. 다른 모든 옵션은 그대로 둡니다.

    6. 고급 기능 창의 고급 기능 아래에서 ActiveX 컨트롤 및 공용 컨트롤 매니페스트선택합니다. 고급 프레임 창에서 탐색 창 옵션만 선택합니다. 그러면 마법사가 창 왼쪽에 이미 포함된 창을 CMFCShellTreeCtrl 만듭니다.

    7. 생성된 클래스 창을 변경하지 않으므로 마침을 클릭하여 새 MFC 프로젝트를 만듭니다.

애플리케이션을 빌드하고 실행하여 성공적으로 생성되었는지 확인합니다. 애플리케이션을 빌드하려면 빌드 메뉴에서 솔루션 빌드를 선택합니다. 애플리케이션이 성공적으로 빌드되면 디버그 메뉴에서 디버깅 시작을 선택하여 애플리케이션을 실행합니다.

마법사는 표준 메뉴 모음, 표준 도구 모음, 표준 상태 표시줄 및 폴더 보기와 일정 보기가 있는 창 왼쪽에 Outlook 표시줄이 있는 애플리케이션을 자동으로 만듭니다.

문서 보기에 셸 목록 컨트롤을 추가하려면

  1. 이 섹션에서는 마법사가 만든 보기에 CMFCShellListCtrl 인스턴스를 추가합니다. 솔루션 탐색기 MFCShellControlsView.h 두 번 클릭하여 보기 헤더 파일을 엽니다.

    #pragma once 헤더 파일의 위쪽 근처에 있는 지시문을 찾습니다. 바로 아래에 다음의 헤더 파일을 CMFCShellListCtrl포함하도록 이 코드를 추가합니다.

    #include <afxShellListCtrl.h>
    

    이제 형식의 멤버 변수를 추가합니다 CMFCShellListCtrl. 먼저 헤더 파일에서 다음 주석을 찾습니다.

    // Generated message map functions
    

    해당 주석 바로 위에 다음 코드를 추가합니다.

    private:
    CMFCShellListCtrl m_wndList;
    
  2. MFC 애플리케이션 마법사클래스에서 개체를 CMFCShellTreeCtrl CMainFrame 이미 만들었지만 보호된 멤버입니다. 나중에 개체에 액세스하므로 이제 개체에 대한 접근자를 만듭니다. 솔루션 탐색기 두 번 클릭하여 MainFrm.h 헤더 파일을 엽니다. 다음 주석을 찾습니다.

    // Attributes
    

    바로 아래에 다음 메서드 선언을 추가합니다.

    public:
        CMFCShellTreeCtrl& GetShellTreeCtrl();
    

    그런 다음, 솔루션 탐색기 두 번 클릭하여 MainFrm.cpp 소스 파일을 엽니다. 해당 파일의 맨 아래에 다음 메서드 정의를 추가합니다.

    CMFCShellTreeCtrl& CMainFrame::GetShellTreeCtrl()
    {
         return m_wndTree;
    }
    
  3. 이제 Windows 메시지를 처리하도록 클래스를 업데이트 CMFCShellControlsView 합니다 WM_CREATE . 클래스 뷰 창을 열고 클래스를 CMFCShellControlsView 선택합니다. 마우스 오른쪽 단추를 클릭하고 속성을 선택합니다.

    그런 다음 수업 마법사에서 메시지 탭을 클릭합니다. 메시지를 찾을 때까지 아래로 스크롤합니다WM_CREATE. 옆에 WM_CREATE있는 드롭다운 목록에서 OnCreate 추가>를 선택합니다<. 이 명령은 메시지 처리기를 만들고 MFC 메시지 맵을 자동으로 업데이트합니다.

    이제 메서드에서 OnCreate 개체를 만듭니다 CMFCShellListCtrl . OnCreate MFCShellControlsView.cpp 소스 파일에서 메서드 정의를 찾고 해당 구현을 다음 코드로 바꿉다.

    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. 이전 단계를 반복하지만 메시지에 대해 반복합니다 WM_SIZE . 그러면 사용자가 애플리케이션 창의 크기를 변경할 때마다 애플리케이션 보기가 다시 그려지게 됩니다. 메서드에 대한 OnSize 정의를 다음 코드로 바꿉다.

    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. 마지막 단계는 CMFCShellTreeCtrl::SetRelatedList 메서드를 사용하여 개체와 CMFCShellListCtrl 연결하는 CMFCShellTreeCtrl 것입니다. 호출 CMFCShellTreeCtrl::SetRelatedList한 후에는 CMFCShellListCtrl 해당 항목에서 선택한 CMFCShellTreeCtrl항목의 내용이 자동으로 표시됩니다. CView::OnActivateView에서 재정의 OnActivateView 되는 메서드의 개체를 연결합니다.

    MFCShellControlsView.h 헤더 파일의 CMFCShellControlsView 클래스 선언 내에 다음 메서드 선언을 추가합니다.

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

    다음으로 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);
    }
    

    클래스에서 메서드를 CMainFrame 호출하기 때문에 MFCShellControlsView.cpp 소스 파일의 맨 위에 지시문을 추가 #include 해야 합니다.

    #include "MainFrm.h"
    
  6. 애플리케이션을 빌드하고 실행하여 성공적으로 생성되었는지 확인합니다. 애플리케이션을 빌드하려면 빌드 메뉴에서 솔루션 빌드를 선택합니다. 애플리케이션이 성공적으로 빌드되면 디버그 메뉴에서 디버깅 시작을 선택하여 실행합니다.

    이제 보기 창에서 선택한 항목에 CMFCShellTreeCtrl 대한 세부 정보가 표시됩니다. 노드 CMFCShellTreeCtrlCMFCShellListCtrl 를 클릭하면 자동으로 업데이트됩니다. 마찬가지로 폴더를 CMFCShellListCtrlCMFCShellTreeCtrl 두 번 클릭하면 자동으로 업데이트됩니다.

    트리 컨트롤 또는 목록 컨트롤에서 항목을 마우스 오른쪽 단추로 클릭합니다. 실제 파일 탐색기 사용하는 것과 동일한 상황에 맞는 메뉴가 표시됩니다.

다음 단계

  • 마법사에서 폴더 창과 일정 창이 모두 있는 Outlook 표시줄을 만들었습니다. 탐색기 창에 일정있는 것은 의미가 없으므로 이제 해당 창을 제거합니다.

  • CMFCShellListCtrl 아이콘, 작은 아이콘, 목록세부 정보와 같은 다양한 모드의 파일 보기를 지원합니다. 이 기능을 구현하도록 애플리케이션을 업데이트합니다. 힌트: Visual C++ 샘플을 참조 하세요.

참고 항목

연습