Program Language/API | MFC

[MFC] 시스템 메뉴 삭제

야곰야곰+책벌레 2021. 9. 27. 09:29
728x90
반응형

Application에서 시스템 메뉴를 삭제하는 방법은 가장 쉽게는 아래와 같다.

BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
	if( !CFrameWnd::PreCreateWindow(cs) )
		return FALSE;
	// TODO: Modify the Window class or styles here by modifying
	//  the CREATESTRUCT cs

	cs.style &= ~WS_SYSMENU; // 시스템 메뉴 삭제

	return TRUE;
}

윈도우 스타일에서 SYSMENU를 제거하는 방법이다.

이것은 메뉴 및 버튼 그리고 아이콘까지 모두 삭제하기 때문에 디자인 면에서 좋지 않다.

 

GetSystemMenu(FALSE)->EnableMenuItem() : 활성화/비활성화
GetSystemMenu(FALSE)->DeleteMenu() : 메뉴 삭제

 

우선 '닫기' 메뉴와 버튼은 GetSystemMenu(FALSE)->EnableMenuItem()으로 삭제가 가능한다.

GetSystemMenu(FALSE)->EnableMenuItem(SC_CLOSE, MF_BYCOMMAND | MF_GRAYED);

최소화/최대화/복귀의 경우에는 해당 명령어로 메뉴는 비활성화되지만 버튼이 비활성화되지 않는다.

그래서 DeleteMenu를 사용하는 것이 좋다.

GetSystemMenu(FALSE)->DeleteMenu(SC_MINIMIZE, MF_BYCOMMAND);
GetSystemMenu(FALSE)->DeleteMenu(SC_MAXIMIZE, MF_BYCOMMAND);
GetSystemMenu(FALSE)->DeleteMenu(SC_RESTORE, MF_BYCOMMAND);

해상 코드는 CMainFrame Class에서 작성되는 것이 좋다.

728x90
반응형