2016년 8월 13일 토요일

다이알로그 기반의 Drag&Drop 어플 만들기


1. 프로젝트를 생성한다.

프로젝트 형식을 "MFC" -> "MFC 응용 프로그램"으로 지정하고, 프로젝트 이름을 입력한다.


응용 프로그램 종류를 "대화 상자 기반(D)"을 선택한다.

"마침"을 클릭한다.


2. 대화 상자 컨트롤을 디자인 한다.
기본 대화 상자에서 "확인", "취소" 버튼과 "문자열"을 제거하고, 아래와 같이 디자인한다.
위에서 부터 List Control, Button 3개, Edit Control을 배치한다.

리스트 컨트롤에서 ID는 IDC_LIST_FILE로 정의하고, Accept Files를 "True"로 설정한다.
향후 File Drag & Drop을 지원함.

첫번째 버튼의 Caption과 ID는 "파일 선택(S)", IDC_BUTTON_BROWSE로 설정한다.

두번째 버튼의 Caption과 ID는 "파일 처리(C)", IDC_BUTTON_CREATE로 설정한다.

세번째 버튼의 Caption과 ID는 "종료(X)", IDC_BUTTON_CLOSE로 설정한다.

마지막 Edit Control의 ID는 IDC_EDIT_VIEW이고, 속성에서 Multiline, Read Only, Vertical Scroll을 "True"로 설정한다.

Edit Control은 Log Display용으로 사용될 것이다.
생성한 "대화상자"를 Build해서 "대화상자"의 실행 화면을 확인한다.




3. 변수 선언 및 처리 함수 생성하기.
List Control과 Edit Control에 각각 CString변수와 Control 변수를 아래와 같이 추가한다.
Dialog에서 해당 컨트롤을 클릭한 상태에서 오른쪽 마우스를 클릭해서 변수를 추가한다.

List Control에 "CString m_list_str", "CListBox m_list_file"변수를 추가한다.


Edit Control Box에 "CString m_edit_str", "CEdit m_edit_view"변수를 추가한다.


Dialog에서 3개의 버튼을 Double Click해서 처리함수를 생성한다.
즉, "파일 선택(S)"버튼이 클릭되면, OnBnClickedButtonBrowse()함수가 실행되고,
"파일 처리(C)"버튼이 클릭되면, OnBnClickedButtonCreate()함수가 실행되며,
"종료(X)"버튼이 클릭되면, OnBnClickedButtonClose()함수가 실행된다.

메시지(Message)처리함수와 가상 함수를 등록하기 위해서 "클래스 마법사"를 실행한다.
Dialog를 클릭하고, 오른쪽 마우스 클릭으로 아래와 같이 "클래스 마법사(Z)"를 실행한다.


"메시지"탭을 선택하고, "WM_DROPFILES"메시지를 드블클릭하거나, "처리기 추가(A)"를 클릭한다.
이 메시지는 File을 List Control에 "Drag & Drop"할 때 발생한다.

키보드의 "Enter"키와 "ESC"키를 처리하기 위한 가상 함수를 추가한다.
"가상 함수"탭을 선택하고, "PreTranslateMessage"함수를 선택하고, 드블 클릭하거나 "함수 추가(A)"를 클릭한다.

DragNDropDlg.cpp 파일에 앞서 생성한 OnDropFiles()함수와 PreTranslateMessage()함수가 생성된다.


4. 프로그램 작성.
4.1. PreTranslateMessage()함수 구현.
Dialog가 실행된 상태에서 "Enter"키나 "ESC"키를 누르면, Dialog가 종료되므로, 2개의 Key를 처리하도록 한다.

Build후 실행하면, "ESC"키가 입력되더라도 Dialog는 종료되지 않는다.

4.2. "종료(X)"버튼에 대한 처리함수(OnBnClickedButtonClose())를 작성한다.
"종료(X)"버튼에 대해서 실행된 Dialog를 종료하는 기능이므로, OnOK()함수를 Call하면 Dialog는 정상 종료된다.

Build후 Dialog를 실행하고, "종료(X)"버튼을 클릭하면, Dialog가 종료된다.

4.3 "파일 선택(S)"버튼에 대한 처리함수(OnBnClickedButtonBrowse())를 작성한다.
"파일 선택(S)"버튼을 클릭하면, 파일을 선택할 수 있도록 "파일 선택 대화 상자"가 실행되고, 선택된 파일명을 List Control에 출력한다.
1개의 파일만 선택할 수 있고, 확장자가 "*.bin", "*.txt", "*.hex"파일을 먼저 검색할 것이고, Default file은 "binary.bin"을 read한다.

파일을 선택한 후의 실행 화면은 아래와 같다.


4.4 드래그앤드롭(Drag&Drop) 구현하기.
List Control에 파일을 마우스로 "Drag & Drop" 했을 때의 동작을 아래와 같이 구현한다.
Multi-file을 "Drag&Drop"하게되면, 최초의 파일만 선택된다.


4.5 "파일 처리(C)"버튼에 대한 처리 함수(OnBnClickedButtonCreate())를 작성한다.

4.6 CDragNDropDlg 클래스 함수 추가하기.
"클래스 뷰"창에서 오른쪽 마우스 클릭 후 "추가" -> "함수"를 선택한다.

함수의 반환 형식, 이름, 매개 변수를 지정한다. 이 함수는 Edit Control에 문자열을 출력하는 함수 이다.

OnBnClickedButtonBrowse()함수에서 아래와 같이 Call한다.
즉, 선택된 파일의 전체 경로와 이름을 Edit Control에 출력한다.



댓글 없음:

댓글 쓰기