다음을 통해 공유


MFC에서 만든 창의 스타일 변경

비고

MFC(Microsoft Foundation Classs) 라이브러리는 계속 지원됩니다. 그러나 더 이상 기능을 추가하거나 설명서를 업데이트하지 않습니다.

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

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

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

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

  • 창이 처음에 최소화되어 있는지, 최대화되어 있는지, 또는 아무 것도 표시되지 않는지 여부입니다.

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

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

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

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

// 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 애플리케이션에서 창 특성을 변경하려면 애플리케이션 마법사가 PreCreateWindow라는 이름을 지정한 파생된 CFrameWnd 클래스의 CMainFrame 함수를 재정의합니다. 다음은 그 예입니다.

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 함수를 재정의합니다. 다음은 그 예입니다.

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

   return CMDIChildWnd::PreCreateWindow(cs);
}

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

무엇을 더 알고 싶으세요?

참고하십시오

Frame-Window 스타일