영어로 읽기

다음을 통해 공유


CMDIChildWnd 클래스

창 관리 멤버와 함께 Windows MDI(다중 문서 인터페이스) 자식 창 기능을 제공합니다.

구문

class CMDIChildWnd : public CFrameWnd

멤버

공용 생성자

속성 설명
CMDIChildWnd::CMDIChildWnd CMDIChildWnd 개체를 생성합니다.

공용 메서드

이름 설명
CMDIChildWnd::Create 개체와 CMDIChildWnd 연결된 Windows MDI 자식 창을 만듭니다.
CMDIChildWnd::GetMDIFrame MDI 클라이언트 창의 부모 MDI 프레임을 반환합니다.
CMDIChildWnd::MDIActivate 이 MDI 자식 창을 활성화합니다.
CMDIChildWnd::MDIDestroy 이 MDI 자식 창을 삭제합니다.
CMDIChildWnd::MDIMaximize 이 MDI 자식 창을 최대화합니다.
CMDIChildWnd::MDIRestore 이 MDI 자식 창을 최대화 또는 최소화된 크기에서 복원합니다.
CMDIChildWnd::SetHandles 메뉴 및 액셀러레이터 리소스에 대한 핸들을 설정합니다.

설명

MDI 자식 창은 MDI 자식 창이 바탕 화면이 아닌 MDI 프레임 창 내에 표시된다는 점을 제외하면 일반적인 프레임 창과 비슷합니다. MDI 자식 창에는 자체 메뉴 모음이 없지만 대신 MDI 프레임 창의 메뉴를 공유합니다. 프레임워크는 MDI 프레임 메뉴를 자동으로 변경하여 현재 활성 MDI 자식 창을 나타냅니다.

애플리케이션에 유용한 MDI 자식 창을 만들려면 클래스 CMDIChildWnd를 파생합니다. 파생 클래스에 멤버 변수를 추가하여 애플리케이션과 관련된 데이터를 저장합니다. 파생 클래스에서 메시지 처리기 멤버 함수 및 메시지 맵을 구현하여 메시지가 창에 전달될 때 수행되는 작업을 지정합니다.

MDI 자식 창을 생성하는 방법에는 세 가지가 있습니다.

  • 를 사용하여 Create직접 생성합니다.

  • 를 사용하여 LoadFrame직접 생성합니다.

  • 문서 서식 파일을 통해 간접적으로 구성합니다.

호출하거나 LoadFrameCCreate++ new 연산자를 사용하여 힙에서 프레임 창 개체를 생성해야 합니다. 호출 Create 하기 전에 AfxRegisterWndClass 전역 함수를 사용하여 창 클래스를 등록하여 프레임의 아이콘 및 클래스 스타일을 설정할 수도 있습니다.

멤버 함수를 Create 사용하여 프레임의 생성 매개 변수를 즉각적인 인수로 전달합니다.

LoadFrame 에는 보다 Create적은 인수가 필요하고 대신 프레임의 캡션, 아이콘, 액셀러레이터 테이블 및 메뉴를 포함하여 리소스에서 대부분의 기본값을 검색합니다. 액세스 LoadFrame하려면 이러한 모든 리소스에 동일한 리소스 ID(예: IDR_MAINFRAME)가 있어야 합니다.

개체에 CMDIChildWnd 뷰와 문서가 포함된 경우 프로그래머가 직접 만드는 대신 프레임워크에 의해 간접적으로 만들어집니다. 개체는 CDocTemplate 프레임 만들기, 포함된 뷰 만들기 및 뷰를 적절한 문서에 연결하도록 오케스트레이션합니다. 생성자의 매개 변수 CDocTemplate 는 관련된 세 가지 클래스(문서, 프레임 및 뷰)를 지정 CRuntimeClass 합니다. CRuntimeClass 개체는 사용자가 지정한 경우(예: 파일 새로 만들기 명령 또는 MDI 창 새로 만들기 명령을 사용하여) 프레임워크에서 새 프레임을 동적으로 만드는 데 사용됩니다.

위의 RUNTIME_CLASS 메커니즘이 제대로 작동하려면 파생된 CMDIChildWnd 프레임 창 클래스를 DECLARE_DYNCREATE 사용하여 선언해야 합니다.

클래스에서 CMDIChildWnd 기본 구현 CFrameWnd의 대부분을 상속 합니다. 이러한 기능에 대한 자세한 목록은 CFrameWnd 클래스 설명을 참조하세요. 클래스에는 CMDIChildWnd 다음과 같은 추가 기능이 있습니다.

  • 클래스와 함께 CMultiDocTemplate 동일한 문서 서식 파일의 여러 CMDIChildWnd 개체가 동일한 메뉴를 공유하여 Windows 시스템 리소스를 저장합니다.

  • 현재 활성 MDI 자식 창 메뉴는 MDI 프레임 창의 메뉴를 완전히 대체하며 현재 활성 MDI 자식 창의 캡션이 MDI 프레임 창의 캡션에 추가됩니다. MDI 프레임 창과 함께 구현되는 MDI 자식 창 함수의 추가 예제는 클래스 설명을 참조 CMDIFrameWnd 하세요.

C++ delete 연산자를 사용하여 프레임 창을 삭제하지 마세요. 대신 CWnd::DestroyWindow를 사용하세요. 이 구현 PostNcDestroyCFrameWnd 창이 제거될 때 C++ 개체를 삭제합니다. 사용자가 프레임 창을 닫으면 기본 OnClose 처리기가 호출 DestroyWindow됩니다.

자세한 내용은 CMDIChildWnd프레임 창을 참조 하세요.

상속 계층 구조

CObject

CCmdTarget

CWnd

CFrameWnd

CMDIChildWnd

요구 사항

헤더: afxwin.h

CMDIChildWnd::CMDIChildWnd

개체를 생성하기 위한 호출입니다 CMDIChildWnd .

CMDIChildWnd();

설명

표시되는 창을 만들려면 호출 Create 합니다.

예시

CMDIChildWnd::Create에 대한 예제를 참조하세요.

CMDIChildWnd::Create

이 멤버 함수를 호출하여 Windows MDI 자식 창을 만들고 개체에 CMDIChildWnd 연결합니다.

virtual BOOL Create(
    LPCTSTR lpszClassName,
    LPCTSTR lpszWindowName,
    DWORD dwStyle = WS_CHILD | WS_VISIBLE | WS_OVERLAPPEDWINDOW,
    const RECT& rect = rectDefault,
    CMDIFrameWnd* pParentWnd = NULL,
    CCreateContext* pContext = NULL);

매개 변수

lpszClassName
Windows 클래스(WNDCLASS 구조체)의 이름을 지정하는 null로 끝나는 문자열을 가리킵니다. 클래스 이름은 AfxRegisterWndClass 전역 함수에 등록된 모든 이름일 수 있습니다. 표준 CMDIChildWnd의 경우 NULL이어야 합니다.

lpszWindowName
창 이름을 나타내는 null로 끝나는 문자열을 가리킵니다. 제목 표시줄의 텍스트로 사용됩니다.

dwStyle
스타일 특성을 지정합니다. WS_CHILD 스타일이 필요합니다.

rect
창의 크기와 위치를 포함합니다. 이 rectDefault 값을 사용하면 Windows에서 새 CMDIChildWnd값의 크기와 위치를 지정할 수 있습니다.

pParentWnd
창의 부모를 지정합니다. NULL이면 주 애플리케이션 창이 사용됩니다.

pContext
CCreateContext 구조를 지정합니다. 이 매개 변수는 NULL일 수 있습니다.

Return Value

성공하면 0이 아니고, 그렇지 않으면 0입니다.

설명

현재 활성 MDI 자식 프레임 창은 부모 프레임 창의 캡션을 결정할 수 있습니다. 이 기능은 자식 프레임 창의 FWS_ADDTOTITLE 스타일 비트를 해제하여 사용하지 않도록 설정됩니다.

프레임워크는 사용자 명령에 대한 응답으로 이 멤버 함수를 호출하여 자식 창을 만들고 프레임워크는 pContext 매개 변수를 사용하여 자식 창을 애플리케이션에 올바르게 연결합니다. 호출Create할 때 pContext는 NULL일 수 있습니다.

예 1

이 예제 메뉴 명령 처리기는 MDI 자식 창을 만들기 위해 호출합니다 Create .

// CMainFrame::OnFileNewCMdiChildWnd() is a menu command handler for the
// CMainFrame class, which in turn is a CMDIFrameWnd-derived class.
// It shows the creation of a standard Windows MDI child window using
// the registered CMDIChildWnd class.
void CMainFrame::OnFileNewMdiChildWnd()
{
   CMDIChildWnd *pMDIChildWnd = new CMDIChildWnd;
   VERIFY(pMDIChildWnd->Create(
       NULL,                                        // standard CMDIChildWnd class
       _T("My MDIChildWnd"),                        // caption of MDI child window
       WS_CHILD | WS_VISIBLE | WS_OVERLAPPEDWINDOW, // window styles
       rectDefault,                                 // default rectangle size
       this));                                      // parent window; can be NULL

   // the default PostNcDestroy handler will delete this object when destroyed
}

예제 2

예제 코드는 다음에서 CMDIChildWnd파생된 클래스의 CHelloWnd메서드를 호출 Create 합니다.

// CMainFrame::OnHello() is a menu command handler for the CMainFrame
// class, which in turn is a CMDIFrameWnd-derived class.
// It shows the creation of a Windows MDI child window using a custom
// window class. The custom window class is registered in
// CHelloWnd::Create(). CHelloWnd is a CMDIChildWnd-derived class.
void CMainFrame::OnHello()
{
   CHelloWnd *pHelloWnd = new CHelloWnd;
   if (!pHelloWnd->Create(_T("Hello"),
                          WS_CHILD | WS_VISIBLE | WS_OVERLAPPEDWINDOW,
                          rectDefault, this))
      return;

   // the default PostNcDestroy handler will delete this object when destroyed
}

이 예제에서는 클래스의 Create 구현을 보여줍니다.CHelloWnd

BOOL CHelloWnd::Create(
    LPCTSTR szTitle,
    LONG style /* = 0 */,
    const RECT &rect /* = rectDefault */,
    CMDIFrameWnd *parent /* = NULL */)
{
   // Setup the shared menu
   SetHandles(::LoadMenu(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDR_HELLO)),
              NULL);

   // Register a custom WndClass and create a window.
   // This must be done because CHelloWnd has a custom icon.
   LPCTSTR lpszHelloClass =
       AfxRegisterWndClass(CS_HREDRAW | CS_VREDRAW,
                           LoadCursor(NULL, IDC_ARROW),
                           (HBRUSH)(COLOR_WINDOW + 1),
                           LoadIcon(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDI_HELLO)));

   return CMDIChildWnd::Create(lpszHelloClass, szTitle, style, rect, parent);
}

CMDIChildWnd::GetMDIFrame

MDI 부모 프레임을 반환하려면 이 함수를 호출합니다.

CMDIFrameWnd* GetMDIFrame();

Return Value

MDI 부모 프레임 창에 대한 포인터입니다.

설명

반환되는 프레임은 두 부모에서 CMDIChildWnd 제거되며 개체를 관리하는 CMDIChildWnd MDICLIENT 형식 창의 부모입니다. GetParent 멤버 함수를 호출하여 개체의 직접 MDICLIENT 부모를 임시 CWnd 포인터로 반환 CMDIChildWnd 합니다.

예시

CMDIFrameWnd::MDISetMenu에 대한 예제를 참조하세요.

CMDIChildWnd::MDIActivate

MDI 프레임 창과 독립적으로 MDI 자식 창을 활성화하려면 이 멤버 함수를 호출합니다.

void MDIActivate();

설명

프레임이 활성화되면 마지막으로 활성화된 자식 창도 활성화됩니다.

예시

CMDIFrameWnd::GetWindowMenuPopup에 대한 예제를 참조하세요.

CMDIChildWnd::MDIDestroy

이 멤버 함수를 호출하여 MDI 자식 창을 삭제합니다.

void MDIDestroy();

설명

멤버 함수는 프레임 창에서 자식 창의 제목을 제거하고 자식 창을 비활성화합니다.

예시

// CMainFrame::OnCloseWindow() is a menu command handler for
// CMainFrame class, which in turn is a CMDIFrameWnd-derived
// class. It closes and destroys the current active MDI child window.
void CMainFrame::OnCloseWindow()
{
   CMDIChildWnd *child = MDIGetActive();
   if (child)
      child->MDIDestroy();
}

CMDIChildWnd::MDIMaximize

이 멤버 함수를 호출하여 MDI 자식 창을 최대화합니다.

void MDIMaximize();

설명

자식 창이 최대화되면 Windows에서 크기를 조정하여 클라이언트 영역이 프레임 창의 클라이언트 영역을 채우도록 합니다. Windows에서는 사용자가 자식 창을 복원하거나 닫을 수 있도록 프레임 메뉴 모음에 자식 창의 컨트롤 메뉴를 배치하고 자식 창의 제목을 프레임 창 제목에 추가합니다.

예시

// CMainFrame::OnMaximizeWindow() is a menu command handler for
// CMainFrame class, which in turn is a CMDIFrameWnd-derived
// class. It maximizes the current active MDI child window.
void CMainFrame::OnMaximizeWindow()
{
   BOOL maximized;
   CMDIChildWnd *child = MDIGetActive(&maximized);
   if (child && (!maximized))
      child->MDIMaximize(); // or MDIMaximize(child);
}

CMDIChildWnd::MDIRestore

MDI 자식 창을 최대화 또는 최소화된 크기에서 복원하려면 이 멤버 함수를 호출합니다.

void MDIRestore();

예시

// CMainFrame::OnRestoreWindow() is a menu command handler for
// CMainFrame class, which in turn is a CMDIFrameWnd-derived class.
// It restores the current active MDI child window from maximized
// or minimized size.
void CMainFrame::OnRestoreWindow()
{
   BOOL maximized;
   CMDIChildWnd *child = MDIGetActive(&maximized);
   if (child && (maximized || child->IsIconic()))
      child->MDIRestore(); // or MDIRestore(child);
}

CMDIChildWnd::SetHandles

메뉴 및 액셀러레이터 리소스에 대한 핸들을 설정합니다.

void SetHandles(
    HMENU hMenu,
    HACCEL hAccel);

매개 변수

hMenu
메뉴 리소스의 핸들입니다.

hAccel
액셀러레이터 리소스의 핸들입니다.

설명

MDI 자식 창 개체에서 사용하는 메뉴 및 액셀러레이터 리소스를 설정하려면 이 함수를 호출합니다.

참고 항목

MFC 샘플 MDI
MFC 샘플 MDIDOCVW
MFC 샘플 SNAPVW
CFrameWnd 클래스
계층 구조 차트
CWnd 클래스
CMDIFrameWnd 클래스