연습: 새 셸 MFC 컨트롤 사용
이 연습에서는 파일 탐색기와 비슷한 응용 프로그램을 만듭니다.두 개의 창이 포함된 창을 만듭니다.왼쪽된 창에서 포함 됩니다는 CMFCShellTreeCtrl 바탕의 계층적 보기에 표시 되는 개체입니다.오른쪽 창에 들어갈는 CMFCShellListCtrl 왼쪽된 창에서 선택 된 폴더에 파일이 표시 됩니다.
사전 요구 사항
이 연습을 설정한 가정 Visual Studio 사용 하도록 일반 개발 설정.다양 한 개발 설정에서 일부 사용 하는 경우 Visual Studio 이 연습에서 사용 하는 windows 기본적으로 표시 될 수 있습니다지 않습니다.
MFC 응용 프로그램 마법사를 사용 하 여 새 MFC 응용 프로그램을 만들려면
사용은 MFC 응용 프로그램 마법사 새 MFC 응용 프로그램을 만들 수 있습니다.마법사를 실행 하는 파일 메뉴 선택 새를 선택한 다음 프로젝트.새 프로젝트 대화 상자가 표시 됩니다.
에 새 프로젝트 대화 상자에서 확장은 Visual C++ 에서 노드는 프로젝트 형식 창 및 선택 MFC.그런 다음에 템플릿 창에서 MFC 응용 프로그램.같은 프로젝트에 대 한 이름을 입력 MFCShellControls 를 클릭 하 고 확인.MFC 응용 프로그램 마법사 표시 됩니다.
에 MFC 응용 프로그램 마법사 대화 상자를 클릭 다음.응용 프로그램 종류 창 표시 됩니다.
에 응용 프로그램 종류 창, 응용 프로그램 종류, 지우기는 탭 문서 옵션.그런 다음 선택 단일 문서 선택 하 고 문서/뷰 아키텍처 지원.아래에서 프로젝트 스타일선택 Visual Studio에서 비주얼 스타일 및 색 드롭 다운 목록을 선택 Office 2007 (파랑 테마).다른 모든 옵션은 그대로.클릭 다음 표시 하는 복합 문서 지원 창.
에 복합 문서 지원 창에서 없음.클릭 다음 표시 하는 문서 템플릿 문자열 창.
변경 하지는 문서 템플릿 문자열 창.클릭 다음 표시 하는 데이터베이스 지원 창.
에 데이터베이스 지원 창에서 없음 이 응용 프로그램에서 데이터베이스를 사용 하지 않기 때문입니다.클릭 다음 표시 하는 사용자 인터페이스 기능 창.
에 사용자 인터페이스 기능 창에서 했는지는 메뉴 모음 및 도구 모음 사용 옵션을 선택한.다른 모든 옵션은 그대로.클릭 다음 표시 하는 고급 기능 창.
에 고급 기능 창, 고급 기능만 선택 ActiveX 컨트롤 및 공용 컨트롤 매니페스트.아래에서 고급 프레임 창만 선택은 탐색 창 옵션.그러면 마법사 창의 왼쪽 창에 CMFCShellTreeCtrl 이미 포함 합니다.클릭 다음 표시 하는 생성 클래스 창.
우리를 변경 하지 않습니다는 생성 클래스 창.따라서 클릭 완료 새 MFC 프로젝트를 만들 수 있습니다.
응용 프로그램을 빌드하고 실행하여 제대로 만들어졌는지 확인합니다.응용 프로그램에서 작성 하는 빌드 메뉴 선택 솔루션 빌드.성공적으로 응용 프로그램을 빌드하는 경우 응용 프로그램을 실행을 선택 하 여 디버깅 시작 에서 디버그 메뉴.
표준 메뉴 모음, 표준 도구 모음, 표준 상태 표시줄 및 Outlook 표시줄 왼쪽 창에 있는 응용 프로그램 마법사를 자동으로 만듭니다를 폴더 보기와 일정 보기.
문서 보기로 셸 목록 컨트롤을 추가 하려면
이 단원에서는 인스턴스를 추가 CMFCShellListCtrl 보기 마법사를 만든.보기 헤더 파일에서 Mfcshellcontrolsview.h를 두 번 클릭 하 여 열을 솔루션 탐색기.
찾아는 #pragma once 지시문의 헤더 파일 위쪽.헤더 파일을 포함 하도록이 코드를 아래 추가 바로 CMFCShellListCtrl:
#include <afxShellListCtrl.h>
이제 형식의 멤버 변수를 추가 합니다. CMFCShellListCtrl.먼저, 헤더 파일에서 다음 메모를 찾습니다.
// Generated message map functions
즉시 해당 주석 위에이 코드를 추가 합니다.
private: CMFCShellListCtrl m_wndList;
MFC 응용 프로그램 마법사 이미 만든는 CMFCShellTreeCtrl 개체에 CMainFrame 클래스를 매우 유사 하지만 보호 된 멤버입니다.나중에이 개체에 액세스할 수 우리.따라서 이제는 접근자를 만듭니다.MainFrm.h 헤더 파일을 두 번 클릭 하 여 열을 솔루션 탐색기.다음 메모를 찾습니다.
// Attributes
바로 그 아래에 다음 메서드 선언을 추가 합니다.
public: CMFCShellTreeCtrl& GetShellTreeCtrl();
그런 다음에 두 번 눌러 MainFrm.cpp 소스 파일을 엽니다는 솔루션 탐색기.파일 맨 아래에 다음 메서드 정의 추가 합니다.
CMFCShellTreeCtrl& CMainFrame::GetShellTreeCtrl() { return m_wndTree; }
우리를 업데이트 하는 이제는 CMFCShellControlsView 를 처리 하는 클래스는 WM_CREATE windows 메시지.MFCShellControlsView.h 헤더 파일을 열고이 코드 줄을 클릭 합니다.
class CMFCShellControlsView : public CView
다음에 속성 창 클릭의 메시지 아이콘.원하는 찾을 때까지 아래로 스크롤하여는 WM_CREATE 메시지입니다.드롭다운 목록 옆에서 WM_CREATE, <Add> OnCreate.이 메시지 처리기를 만들고 자동으로 MFC 메시지 맵을 업데이트 합니다.
에 OnCreate 우리는 이제 create 메서드 우리의 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; }
이전 단계를 반복 하지만 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); }
연결 하는 것이 마지막 단계는 CMFCShellTreeCtrl 및 CMFCShellListCtrl 를 사용 하 여 개체의 CMFCShellTreeCtrl::SetRelatedList 메서드.이 메서드를 호출한 후에 CMFCShellListCtrl 에서 선택한 항목의 내용을 자동으로 표시 됩니다 있는 CMFCShellTreeCtrl.우리가 이렇게 됩니다 OnActivateView 에서 재정의할 메서드를 CView::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 해야 우리 클래스 추가 #include MFCShellControlsView.cpp 소스 파일 맨 위에 있는 지시문:
#include "MainFrm.h"
응용 프로그램을 빌드하고 실행하여 제대로 만들어졌는지 확인합니다.응용 프로그램에서 작성 하는 빌드 메뉴 선택 솔루션 빌드.응용 프로그램을 성공적으로 구축 하는 경우 실행을 선택 하 여 디버깅 시작 에서 디버그 메뉴.
이제 선택한 항목의 세부 사항을 볼 수 있습니다는 CMFCShellTreeCtrl 보기 창에서입니다.노드를 클릭할 때의 CMFCShellTreeCtrl, CMFCShellListCtrl 자동으로 업데이트 됩니다.마찬가지로 폴더를 두 번 클릭 하는 경우는 CMFCShellListCtrl, CMFCShellTreeCtrl 자동으로 업데이트 합니다.
오른쪽 트리 컨트롤에서, 목록 컨트롤에 있는 항목을 클릭 합니다.실제 파일 탐색기를 사용할 때 처럼 동일한 상황에 맞는 메뉴를 얻을 수 있습니다.
다음 단계
마법사와 Outlook 표시줄을 만든는 폴더 창 고는 일정 창.이 것에 의미가 없는 일정 창 탐색기 창에서.따라서 이제 해당 창을 제거 합니다.
CMFCShellListCtrl 지원 같은 다른 모드에서 파일을 보는 큰 아이콘, 작은 아이콘, 목록, 및 정보.이 기능을 구현 하는 응용 프로그램을 업데이트 합니다.Hint: see Visual C++ 샘플.