관리 메뉴

ComputerVision Jack

[MFC - 사용자 인터페이스] 본문

Image Processing/MFC Programming

[MFC - 사용자 인터페이스]

JackYoon 2020. 10. 28. 00:25
반응형

메뉴 (Menu)

메뉴(Menu)란 응용프로그램에서 선택할 수 있는 명령의 집합, 계층 구조로 이루어진 사용자 인터페이스 요소입니다.

 

메뉴 기초

  • 최상위 메뉴 = 메뉴바
  • 드랍 다운 메뉴
  • 컨텍스트 메뉴 = 단축 메뉴
  • 팝업 메뉴
  • 시스템 메뉴 = 윈도우 메뉴 = 컨트롤 메뉴
  • 메뉴 항목 (명령 항목 / 팝업 항목)
  • 엑세스키와 단축키

메뉴 생성 방법

  • 리소스를 이용한 메뉴 생성 : 메뉴 리소르를 정의하여 실행 파일에 포함시킨 후 프로그램 실행 중에 로드.
  • 코드를 이용한 메뉴 생성 : 코드를 실행하여 메뉴를 생성한 후 윈도우에 붙여서 사용한다.

리소스를 이용한 메뉴 생성

메뉴 항목 속성

속성 의미
Help 최상위 메뉴 항목에만 설정가능, 윈도우의 오른쪽 끝에 메뉴 항목이 표시된다.
ID 메뉴 항목을 구분하는 번호
Prompt MFC로 작성한 프로그램에서만 사용가능
현재 선택된 메뉴 항목에 관한 설명을 상태바나 툴바에 표시하기 위한 속성
Separator 메뉴 항목을 구분하는 가로줄 표시
Break 일반적으로 메뉴 항목은 하나의 열에 표시되지만 항목 수가 많으면 두 개 이상의 열에 표시되게 할 수 있다.
Right Justify Help 속성과 기능이 동일하다.
Right Order Caption 문자열이 오른쪽에서 왼쪽 방향으로 표시된다.
아랍어나 히브리어를 위한 기능
Caption 화면에 표시되는 문자열 (액세스키를 지정하려면 해당 문자앞에 '&' 기호 사용)
Checked 메뉴 항목의 왼쪽에 체크 표시를 한다
Enabled 이 값이 False이면 메뉴 항목이 표시되지만 사용 못한다.
Grayed 메뉴 항목이 흐리게 표시되어 현재 사용할 수 없음을 나타낸다.
Pop-up 명령항목이 아닌 팝업 항목이된다.

실습 - 리소스를 이용하여 메뉴 만들기

리소스를 이용하여 메뉴 만들기

'리소스 뷰'로 전환하여 IDR_MAINFRAME 메뉴 리소스를 연다.

테스트 메뉴 추가와 속성을 설정한다.

 

실습 - 코드를 이용하여 메뉴 만들기

코드를 이용한 메뉴 만들기

윈도우가 생성될 때 메뉴를 만드는 것이 자연스러우므로 WM_CREATE 메세지를 처리하는 OnCreate() 함수에 코드를 추가한다. 따라서 CMainFrame::OnCreate() 함수에 코드를 작성한다.

  • CMenu::CreateMenu() : 비어 있는 최상위 메뉴를 만들고 메뉴 객체와 연결한다.
  • CMenu::CreatePopupMenu() : 비어있는 팝업 메뉴를 만들고 메뉴 객체와 연결한다.
  • CMenu::AppendMenu() : 새로운 메뉴 항목을 메뉴에 추가한다.

BOOL AppendMenu( ) 함수 인자

nFalgs nIDNewItem IpszNewItem
MF_STRING 메뉴항목이 문자열 새로운 메뉴 항목의 ID 메뉴 항목의 캡션 문자열
MF_POPUP 메뉴 항목이 팝업 메뉴를 갖는다 팝업 메뉴를 가리키는 핸들 메뉴 항목의 캡션 문자열
MF_CHECKED 메뉴 항목의 속성을 나타내는 값    
MF_UNCHECKED
MF_ENABLED
MF_DIABLED
MF_GRAYED
MF_SEPARATOR Separator 속성 설정과 의미 동일 사용되지 않음 사용되지 않음

메뉴 명령 처리하기

메뉴를 사용하는 목적은 사용자가 선택한 메뉴 항목에 지정된 명령을 수행하는 것이다.

  • 메뉴 항목 : WM_COMMAND 메시지 발생 - 메시지 핸들러 필요
  • 팝업 항목

명령 핸들러는 일반 윈도우 메시지 핸들러와 달리 작성 위치가 중요하지 않다. 어느 클래스에 명령 핸들러를 추가하더라도 처리된다. = 명령 라우팅

 

실습 - 메뉴 명령 처리하기

빨간색, 초록색, 파란색 세가지 색상 중 하나를 메뉴에서 선택하면 클라이언트 영역에 출력된 텍스트 색상이 바뀐다.

메뉴 명령 처리하기

메뉴 항목 ID에서 COMMAND를 선택하여 명령 핸들러를 추가하여 작성한다.

 

메뉴 항목 갱신하기

현재 선택한 메뉴에 따라, 메뉴 항목에 특벼한 표시를 하거나 메뉴 항목을 활성화 또는 비활성화 할 필요가 있다.

이때, 명령 갱신 핸들러를 사용한다.

 

CCmdUI 클래스 멤버 함수

멤버 함수 기능 사용 예
Enable() 활성화 상태 변경 pCmdUI->Enable();
SetCheck()  체크 상태 변경 pCmdUI->SetCheck();
SetRadio() 라디오 표시 상태 변경 pCmdUI->SetRadio();
SetText() 문자열 변경 pCmdUI->SetText(_T(""));

실습 - 메뉴 항목 갱신하기

전 예제를 사용하여, 선택된 색상에 체크 기호를 표시하자.

메뉴 항목 갱신하기

 

컨텍스트 메뉴

컨텍스트 메뉴는 마우스 오른쪽 버튼을 클릭할 때 열린다. 마우스 커서의 위치 또는 현재 작업하는 내용에 따라 서로 다른 메뉴 항목을 표시한다는 특징이 있다.

WM_CONTEXTMENU 메시지 제공

 

실습 - 컨텍스트 메뉴 구현하기

전 예제를 컨텍스트 메뉴로 구현하자.

컨텍스트 메뉴 구현하기

시스템 메뉴

시스템 메뉴는 윈도우의 좌상단에 있는 아이콘을 클릭하거나, 타이틀 바에서 마우스 오른쪽 버튼을 클릭할 때 표시되는 메뉴로, 윈도우 조작과 관련된 몇가지 기능을 기본적으로 제공한다.

CWnd::GetSystemMenu() 함수를 이용하여 시스템 메뉴를 가리키는 CMenu 포인터를 얻은 후 멤버 함수를 사용한다.

 

실습 - 시스템 메뉴 변경하기

기본 시스템 메뉴를 변경하는 프로그램 제작하기

시스템 메뉴 변경하기

툴바 (ToolBar)

툴바(Toolbar)는 일반적으로 메뉴 항목의 기능을 빠르게 수행하는 목적으로 사용되며, 메뉴 항목에 없는 기능을 독립적으로 제공하기도 한다.

 

툴바 생성

툴바를 생성하는 간단한 방법은 툴바 리소스를 활용하는 방법이다.

  • CToolBar::CreateEx() : 툴바를 운영체제 수준에서 생성한 후, C++ 툴바 객체와 연결한다.
  • CToolBar::EnableDocking() : 툴바 리소스를 로드 한다.
  • CFrameWnd::EnableDocking() : 프레임 윈도우가 자신의 클라이언트 영역 어느 위치에 컨트롤바를 붙일 수 있을 지 결정한다.
  • CFrameWnd::DockControlBar() : 컨트롤 바를 윈도우에 실제로 붙인다.

 

실습 - 툴바 구현하기

색상 예제를 툴바를 이용하여 구현하자.

툴바 구현하기

상태바 (Status Bar)

상태바 (status bar)는 윈도우의 맨 아래에 위치하여 프로그램의 현재 상태 정보를 보여준다.

 

실습 - 상태바 구현하기

클라이언트 영역의 마우스 커서 좌표를 상태바에 표시하는 프로그램 작성

상태바 구현하기

 

반응형

'Image Processing > MFC Programming' 카테고리의 다른 글

[MFC - Chapter5 연습 문제]  (1) 2020.09.22
[MFC - 마우스와 키보드]  (1) 2020.09.15
[MFC - Chapter4 연습문제]  (1) 2020.09.14
[MFC - 화면 출력]  (0) 2020.08.18
[MFC - Chapter3 연습 문제]  (0) 2020.08.17
Comments