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
직접 생성합니다.문서 서식 파일을 통해 간접적으로 구성합니다.
호출하거나 LoadFrame
CCreate
++ 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
를 사용하세요. 이 구현 PostNcDestroy
은 CFrameWnd
창이 제거될 때 C++ 개체를 삭제합니다. 사용자가 프레임 창을 닫으면 기본 OnClose
처리기가 호출 DestroyWindow
됩니다.
자세한 내용은 CMDIChildWnd
프레임 창을 참조 하세요.
CMDIChildWnd
헤더: afxwin.h
개체를 생성하기 위한 호출입니다 CMDIChildWnd
.
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일 수 있습니다.
성공하면 0이 아니고, 그렇지 않으면 0입니다.
현재 활성 MDI 자식 프레임 창은 부모 프레임 창의 캡션을 결정할 수 있습니다. 이 기능은 자식 프레임 창의 FWS_ADDTOTITLE 스타일 비트를 해제하여 사용하지 않도록 설정됩니다.
프레임워크는 사용자 명령에 대한 응답으로 이 멤버 함수를 호출하여 자식 창을 만들고 프레임워크는 pContext 매개 변수를 사용하여 자식 창을 애플리케이션에 올바르게 연결합니다. 호출Create
할 때 pContext는 NULL일 수 있습니다.
이 예제 메뉴 명령 처리기는 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
}
예제 코드는 다음에서 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);
}
MDI 부모 프레임을 반환하려면 이 함수를 호출합니다.
CMDIFrameWnd* GetMDIFrame();
MDI 부모 프레임 창에 대한 포인터입니다.
반환되는 프레임은 두 부모에서 CMDIChildWnd
제거되며 개체를 관리하는 CMDIChildWnd
MDICLIENT 형식 창의 부모입니다. GetParent 멤버 함수를 호출하여 개체의 직접 MDICLIENT 부모를 임시 CWnd
포인터로 반환 CMDIChildWnd
합니다.
CMDIFrameWnd::MDISetMenu에 대한 예제를 참조하세요.
MDI 프레임 창과 독립적으로 MDI 자식 창을 활성화하려면 이 멤버 함수를 호출합니다.
void MDIActivate();
프레임이 활성화되면 마지막으로 활성화된 자식 창도 활성화됩니다.
CMDIFrameWnd::GetWindowMenuPopup에 대한 예제를 참조하세요.
이 멤버 함수를 호출하여 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();
}
이 멤버 함수를 호출하여 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);
}
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);
}
메뉴 및 액셀러레이터 리소스에 대한 핸들을 설정합니다.
void SetHandles(
HMENU hMenu,
HACCEL hAccel);
hMenu
메뉴 리소스의 핸들입니다.
hAccel
액셀러레이터 리소스의 핸들입니다.
MDI 자식 창 개체에서 사용하는 메뉴 및 액셀러레이터 리소스를 설정하려면 이 함수를 호출합니다.
MFC 샘플 MDI
MFC 샘플 MDIDOCVW
MFC 샘플 SNAPVW
CFrameWnd 클래스
계층 구조 차트
CWnd 클래스
CMDIFrameWnd 클래스