MFC에서 만든 창 스타일 변경
함수 버전 WinMain
에서 MFC는 몇 가지 표준 창 클래스를 등록합니다. 일반적으로 MFC WinMain
를 편집하지 않으므로 해당 함수를 사용하면 MFC 기본 창 스타일을 변경할 수 없습니다. 이 문서에서는 기존 애플리케이션에서 이러한 미리 등록된 창 클래스의 스타일을 변경하는 방법을 설명합니다.
새 MFC 애플리케이션에서 스타일 변경
Visual C++ 2.0 이상을 사용하는 경우 애플리케이션을 만들 때 애플리케이션 마법사에서 기본 창 스타일을 변경할 수 있습니다. 애플리케이션 마법사의 사용자 인터페이스 기능 페이지에서 기본 프레임 창 및 MDI 자식 창에 대한 스타일을 변경할 수 있습니다. 두 창 유형 중 하나에 대해 프레임 두께(두께 또는 얇음)와 다음 중 하나를 지정할 수 있습니다.
창에 최소화 또는 최대화 컨트롤이 있는지 여부입니다.
창이 처음에 최소화, 최대화 또는 둘 다 표시되지 않는지 여부입니다.
기본 프레임 창의 경우 창에 시스템 메뉴가 있는지 여부를 지정할 수도 있습니다. MDI 자식 창의 경우 창에서 분할자 창을 지원하는지 여부를 지정할 수 있습니다.
기존 애플리케이션에서 스타일 변경
기존 애플리케이션에서 창 특성을 변경하는 경우 이 문서의 나머지 부분에 있는 지침을 따르세요.
애플리케이션 마법사를 사용하여 만든 프레임워크 애플리케이션에서 사용하는 기본 창 특성을 변경하려면 창의 PreCreateWindow 가상 멤버 함수를 재정의합니다. PreCreateWindow
를 사용하면 애플리케이션이 CDocTemplate 클래스에서 일반적으로 내부적으로 관리되는 생성 프로세스에 액세스할 수 있습니다. 프레임워크는 창을 만들기 직전에 호출 PreCreateWindow
합니다. 전달된 PreCreateWindow
CREATETRUCT 구조를 수정하면 애플리케이션에서 창을 만드는 데 사용되는 특성을 변경할 수 있습니다. 예를 들어 창에서 캡션 사용하지 않도록 하려면 다음 비트 연산을 사용합니다.
// 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_OVERLAPPEDWINDOW 및 FWS_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 자식 창을 만듭니다.