다음을 통해 공유


MFC에서 만든 창 스타일 변경

함수 버전 WinMain 에서 MFC는 몇 가지 표준 창 클래스를 등록합니다. 일반적으로 MFC WinMain를 편집하지 않으므로 해당 함수를 사용하면 MFC 기본 창 스타일을 변경할 수 없습니다. 이 문서에서는 기존 애플리케이션에서 이러한 미리 등록된 창 클래스의 스타일을 변경하는 방법을 설명합니다.

새 MFC 애플리케이션에서 스타일 변경

Visual C++ 2.0 이상을 사용하는 경우 애플리케이션을 만들 때 애플리케이션 마법사에서 기본 창 스타일을 변경할 수 있습니다. 애플리케이션 마법사의 사용자 인터페이스 기능 페이지에서 기본 프레임 창 및 MDI 자식 창에 대한 스타일을 변경할 수 있습니다. 두 창 유형 중 하나에 대해 프레임 두께(두께 또는 얇음)와 다음 중 하나를 지정할 수 있습니다.

  • 창에 최소화 또는 최대화 컨트롤이 있는지 여부입니다.

  • 창이 처음에 최소화, 최대화 또는 둘 다 표시되지 않는지 여부입니다.

기본 프레임 창의 경우 창에 시스템 메뉴가 있는지 여부를 지정할 수도 있습니다. MDI 자식 창의 경우 창에서 분할자 창을 지원하는지 여부를 지정할 수 있습니다.

기존 애플리케이션에서 스타일 변경

기존 애플리케이션에서 창 특성을 변경하는 경우 이 문서의 나머지 부분에 있는 지침을 따르세요.

애플리케이션 마법사를 사용하여 만든 프레임워크 애플리케이션에서 사용하는 기본 창 특성을 변경하려면 창의 PreCreateWindow 가상 멤버 함수를 재정의합니다. PreCreateWindow를 사용하면 애플리케이션이 CDocTemplate 클래스에서 일반적으로 내부적으로 관리되는 생성 프로세스에 액세스할 수 있습니다. 프레임워크는 창을 만들기 직전에 호출 PreCreateWindow 합니다. 전달된 PreCreateWindowCREATETRUCT 구조를 수정하면 애플리케이션에서 창을 만드는 데 사용되는 특성을 변경할 수 있습니다. 예를 들어 창에서 캡션 사용하지 않도록 하려면 다음 비트 연산을 사용합니다.

// cs has been declared as CREATESTRUCT& cs;
cs.style &= ~WS_CAPTION;

CTRLBARS 샘플 애플리케이션은 창 특성을 변경하는 이 기술을 보여 줍니다. 애플리케이션의 변경 내용 PreCreateWindow에 따라 함수의 기본 클래스 구현을 호출해야 할 수 있습니다.

다음 설명에서는 SDI 사례 및 MDI 사례에 대해 설명합니다.

SDI 사례

단일 SDI(문서 인터페이스) 애플리케이션에서 프레임워크의 기본 창 스타일은 WS_OVERLAPPEDWINDOW 스타일과 FWS_ADDTOTITLE 스타일의 조합입니다. FWS_ADDTOTITLE 창의 캡션 문서 제목을 추가하도록 프레임워크에 지시하는 MFC 관련 스타일입니다. SDI 애플리케이션에서 창 특성을 변경하려면 파생된 CFrameWnd 클래스의 함수(애플리케이션 마법사 이름CMainFrame)를 재정 PreCreateWindow 의합니다. 예시:

BOOL CMainFrame::PreCreateWindow(CREATESTRUCT &cs)
{
   // Call the base-class version
   if (!CFrameWnd::PreCreateWindow(cs))
      return FALSE;

   // Create a window without min/max buttons or sizable border
   cs.style = WS_OVERLAPPED | WS_SYSMENU | WS_BORDER;

   // Size the window to 1/3 screen size and center it
   cs.cy = ::GetSystemMetrics(SM_CYSCREEN) / 3;
   cs.cx = ::GetSystemMetrics(SM_CXSCREEN) / 3;
   cs.y = ((cs.cy * 3) - cs.cy) / 2;
   cs.x = ((cs.cx * 3) - cs.cx) / 2;

   return TRUE;
}

이 코드는 최소화 및 최대화 단추가 없고 크기가 큰 테두리가 없는 기본 프레임 창을 만듭니다. 창은 처음에 화면 가운데에 배치됩니다.

MDI 사례

MDI(다중 문서 인터페이스) 애플리케이션에서 자식 창의 창 스타일을 변경하려면 좀 더 많은 작업이 필요합니다. 기본적으로 애플리케이션 마법사를 사용하여 만든 MDI 애플리케이션은 MFC에 정의된 기본 CMDIChildWnd 클래스를 사용합니다. MDI 자식 창의 창 스타일을 변경하려면 새 클래스를 파생시키고 프로젝트의 모든 참조를 CMDIChildWnd 새 클래스 CMDIChildWnd 에 대한 참조로 바꿔야 합니다. 대부분의 경우 애플리케이션에서 유일한 참조 CMDIChildWnd 는 애플리케이션의 InitInstance 멤버 함수에 있습니다.

MDI 애플리케이션에서 사용되는 기본 창 스타일은 WS_CHILD, WS_OVERLAPPEDWINDOWFWS_ADDTOTITLE 스타일의 조합입니다. MDI 애플리케이션의 자식 창의 창 특성을 변경하려면 파생된 CMDIChildWnd클래스에서 PreCreateWindow 함수를 재정의합니다. 예시:

BOOL CChildFrame::PreCreateWindow(CREATESTRUCT &cs)
{
   // Create a child window without the maximize button
   cs.style &= ~WS_MAXIMIZEBOX;

   return CMDIChildWnd::PreCreateWindow(cs);
}

이 코드는 최대화 단추 없이 MDI 자식 창을 만듭니다.

다음에 대해 자세히 알고 싶은 사항

참고 항목

프레임 창 스타일