오늘 실습할 프로그램은 Visual Studio 개발 환경에서 MFC 라이브러리를 이용하여 Context 이벤트 처리기가 발생되었을 때 다이얼로그를 띄우는 실습(1), 다이얼로그 내에서 버튼을 클릭했을 때 발생되는 이벤트로 다른 다이얼로그를 띄우는 실습(2), 이렇게 두 가지 실습을 해보겠습니다.
(1) Context메뉴 이벤트 처리기
새 프로젝트를 만들어줍니다. 프로젝트 속성은 MFC 응용 프로그램입니다.
응용 프로그램의 종류를 선택하는 창에서 다중문서, MFC 표준에 체크 하고 [마침]으로 대화상자를 종료시킵니다.
리소스 뷰에서 메뉴를 새로 추가해줍니다.
마우스 오른쪽 버튼을 누르는 동작을 하면 WM_CONTEXTMENU, WM_RBUTTONDOWN, 이렇게두 가지 이벤트가 발생됩니다. 두 이벤트 메시지 중 컨텍스트 메뉴 이벤트에 대한 이벤트 처리기를 만들어 주겠습니다.
방금 새로운 메뉴를 추가해줌으로써 리소스 헤더파일이 변경되었으므로 Resource.h을 열려는 동작을 하면 리소스 뷰에서 추가한 메뉴 창을 닫아야 한다는 메시지가 뜹니다. 변경된 사항을 저장하고 Resource.h파일을 열면 방금 추가한 팝업 메뉴가 헤더파일에 자동으로 추가된 것을 확인 할 수 있습니다.
10-12 라인의 코드가 방금의 메뉴 추가 동작으로 인해 자동 추가된 부분입니다.
이제 메뉴 이벤트가 발생되면 팝업 메뉴를 띄우는 동작을 하도록 이벤트를 메시지 맵에 추가합니다.
ON_WM_CONTEXTMENU이벤트에 대한 이벤트 처리 함수 OnContextMenu에 우클릭 시점에서의 마우스 포인터의 위치를 가져와 팝업 메뉴를 띄우는 코드와 어떤 메뉴를 클릭했는 지 SendMessage로 메뉴 선택 메시지를 발생시키는 코드를 추가시킵니다.
MainFrm.cpp에 추가한 이벤트 처리 함수가 이벤트 발생 시점에 잘 호출될 수 있도록 헤더파일의 함수 선언부에 추가해줍니다.
현재까지의 소스를 컴파일, 빌드 한 뒤 실행하면,
마우스 우 클릭시 마우스위치에 팝업 메뉴가 뜨는 것을 확인할 수 있습니다.
(2) 팝업 메뉴 선택 시 다이얼로그 띄우기
리소스 뷰에서 새로운 다이얼로그를 추가합니다.
다이얼로그의 아이디와 캡션을 편집해줍니다.
도구상자에서 버튼을 추가해줍니다.
버튼에 대해서도 속성창에서 아이디와 캡션을 편집해줍니다.
리소스 편집 후 변경 내역을 저장하고 Resource.h파일을 열어 항목들이 추가됨을 확인합니다.
버튼을 포함한 다이얼로그에 대해서 클래스를 추가해줍니다.
클래스 이름만 설정해주면 됩니다. 클래스 이름을 붙일 때는 앞에 대문자 C를 붙이는 것이 일반적입니다.
마우스 우클릭으로 뜬 팝업 창에서 Open 메뉴를 선택했을 때 SendMessage로 발생된 이벤트를 OnPopupOpen()메서드에서 처리할 수 있도록 메시지 맵에 메시지와 메서드를 연결 시켜줍니다.(24행)
OnPopupOpen()메서드에서 버튼이 있는 다이얼로그 클래스를 객체 선언해주고 DoModal()로 다이얼로그를 생성해 줍니다.(112-117행)
마지막으로 헤더파일에 방금 추가한 이벤트 처리 함수를 선언해줍니다.(43행)
실행했을 때..
마우스 우클릭으로 뜬 팝업 창에서 OPEN 메뉴를 선택하면 부모 다이얼로그가 뜹니다.
(3) 다이얼로그 안의 버튼 클릭 시 다른 다이얼로그를 띄우는 실습
부모 다이얼로그라는 이름의 다이얼로그 안에 추가한 버튼을 더블 클릭해 버튼 클릭 시 발생되는 이벤트 처리 함수를 생성시킵니다.
이벤트 처리함수 안에서 띄울 다이얼로그를 추가해야합니다.
리소스 뷰에서 다이얼로그를 추가합니다.
자식 다이얼로그라고 이름붙이고 이에 맞게 아이디와 캡션을 수정합니다.
추가한 다이얼로그를 이벤트 처리함수 안에서 띄우는 동작을 하려면 다이얼로그의 클래스를 만들어야 합니다.
다이얼로그의 클래스 이름을 붙일 때 이번에도 역시 대문자 C를 앞에 붙입니다.
자식 다이얼로그를 띄우는 부분은 부모 다이얼로그이고 부모 다이얼로그와 자식 다이얼로그의 클래스가 다르므로 자식 다이얼로그 클래스를 객체 선언해주려면 자식 다이얼로그 클래스 헤더파일을 #include해주어야 합니다.
부모 다이얼로그의 버튼 클릭 이벤트 처리 함수에서 자식 다이얼로그를 띄웁니다.
실행화면입니다. 부모 다이얼로그에서 버튼을 누르면 자식 다이얼로그가 뜨는 결과를 얻을 수 있습니다.
댓글 없음:
댓글 쓰기