- CVI 정보나눔(www.cvi.kr)
- 스터디
- 강좌,팁,유용한것
강좌,팁
오늘은 작지만 두 개의 강좌를 올립니다. 두 번째 강좌입니다.
---------------------------------------------------------------------------------------
[강좌:37] 테이블 셀로 파일을 드래그앤드롭하기
이용된 버전: LabWindows/CVI 8.1.0
강좌분류: 테이블(Table) 활용팁 따라하기
등급: 초급
차례
서론
1. 이번 예제 프로그램의 개요
2. 작업준비
3. 코딩
3.1 선언과 main() 함수
3.2 Panel 콜백 함수
3.3 cmdReset 명령 콜백 함수
4. 실행
마무리
서론
드래그앤드롭(Drag & Drop) 기능은 윈도 탐색기로부터 파일정보를 쉽게 전달할 수 있는 편리한 기능입니다. 이러한 기능을 테이블의 특정 셀에 적용할 수 있다면, 응용 프로그램 개발 시에 편리하게 이용할 수 있을 것입니다.
저는 어떤 프로그램에서 상황에 따라 음성안내를 해주는 기능을 구현하면서, 각 상황에서 재생되어야할 미디어 파일들의 경로를 테이블을 이용하여 설정해두기 위해 이러한 인터페이스를 만들게 되었습니다. 평소에도 이러한 조그만 기능들이 있으면 좋겠다는 생각을 가끔 했어도, 실제 일에 부딪치지 않으면 구현하기 위한 별도의 시간을 내기가 쉽지 않죠!
하지만, 이런 계기로 한번 작업해두면 다음에는 훨씬 더 빨리 이런 기능을 응용할 수 있으므로, 미래를 위한 기술 투자이며, 이런 것이 쌓여갈 때 기술 축적이 되는 것이 아니겠습니까?
라이브러리로 만드는 함수는 신중하게 잘 만들어 두면, 나중에 훨씬 편리합니다. 그죠?
그럴려면 너무 시간에 쫒기는 개발이 되어서는 곤란하죠! 그런 계약은 쎄게 불러야합니다.ㅎㅎ
1. 이번 예제 프로그램의 개요
이번 따라하기 예제의 결과 프로그램 실행화면을 그림 1.1에 보였습니다.
열은 하나밖에 표시하지 않았지만, 여러개의 열, 행이 있어도 문제없습니다. 그림에는 윈도 탐색기로부터 파일을 하나씩 드래그하여 놓은 화면을 보였습니다.
그림 1.1 테이블 셀로 파일을 드래그하여 놓기 예제 프로그램의 최종 실행화면 미리보기
2. 작업준비
작업 준비 과정은 "[강좌:21] CVI 프로그래밍 시작단계 정의(2)" 강좌 글의
"2. LabWindows/CVI의 프로그래밍 작업 시작단계" 부분에 따라 아래와 같이 간단히 정리합니다.
프로젝트 파일명: DragIntoTableCell.prj
화면구성은 그림 2.1에 보였습니다. 테이블 컨트롤과 명령버튼이 있습니다. 콜백함수는 Panel 콜백과 Reset 명령버튼의 콜백함수만 이용됩니다.
그림 2.1 DragIntoTableCell 프로젝트의 화면구성
uir 파일 내의 각 컨트롤의 속성은 표 2.1과 같이 설정하였습니다.
표 2.1 컨트롤의 속성값
컨트롤 종류 | Constant Name | Callback Function | Label | Default Value |
비고 |
Text Message |
TEXTMSG |
해당없음 |
탐색기로부터 파일을 드래그하여 원하는 셀에 놓아보세요. |
|
|
Table |
TABLE |
|
|
|
Column을 한 개 추가하고, String Type으로 설정. |
Command Button |
cmdReset |
cmdReset |
Reset |
|
|
Panel의 속성은 표2.2와 같이 설정합니다.
표 2.2 Panel의 속성설정
Panel 속성설정 |
|
Constant Name |
PANEL |
Callback Function |
PanelCB |
Panel Title |
DragIntoTableCell |
Other Attributes |
그리고, 기본 소스를 생성합니다. 기본으로 생성된 함수는 main() 함수와 PanelCB(), cmdReset() 콜백함수들입니다. 그림 2.2에 프로젝트 창을 보였습니다.
그림 2.2 DragIntoTableCell의 프로젝트 창
3. 코딩
이제 코딩 작업으로 들어갑니다. 먼저, 헤더파일을 잠깐 보겠습니다. 그림 3.1을 보시면 자동으로 생성된 파일 그대로입니다. 이런 헤더파일(UIR 파일을 저장할 때 자동생성되는)은 손을 댈 필요가 없으며, 손을 대지 않는 것이 좋으며, 어떨 때는 손을 대지 말아야 합니다. (세 번 언급하는 강조 표현의 일종이라 보세요.ㅎㅎ)
그림 3.1 UIR 파일 저장시에 자동 생성되는 헤더파일(DragIntoTableCell.h 파일)
(소스코드 이미지를 클릭하면 소스 텍스트 창이 나타난다는 거 아시죠?)
3.1 선언과 main() 함수
그림 3.2에 헤더파일 include 부분과 main() 함수를 보였습니다.
그림 3.2 헤더파일 include 부분과 main()함수 (DragIntoTableCell.c 파일)
소스코드 윗부분의 저작권 표시 부분에 있는 문구, 특히 "하나님의 은총이 가득하시기를..." 이라는 문구는 제가 의도적으로 노출시킵니다. 이 글을 읽는 분들에게 진심으로 신(God)의 가호가 있기를 바라는 마음일 뿐 아니라, 이 글을 통하여 제가 믿는 하나님께 영광을 돌리려는 목적입니다. 이런 목적이 있기 때문에, 시간과 노력이 많이 들어가는 이런 강좌를 기꺼이 만들어 나갈 수 있는 것입니다. 이점, 독자 여러분의 이해를 바랍니다.
3.2 Panel 콜백 함수
그림 3.3에는 Panel의 콜백함수를 보였습니다. 이 강좌에서 핵심 부분이 여기에 있습니다.
간단히 설명하면, 드래그앤드롭 이벤트가 발생했을 때, 먼저 드롭된 위치를 알아내고, 그 위치에 테이블이 있는지 여부를 체크하고, 만약 있다면, 드롭된 좌표에 있는 테이블 셀의 위치를 알아내어 그 셀에 파일의 경로를 기록합니다.
그리고, 그 셀의 행을 Active Cell로 지정합니다. 마지막의 Active Cell 지정하는 절차는 필수 과정은 아닙니다만, 이렇게 하면 프로그램의 동작이 좀더 자연스럽게 보입니다.
그림 3.3 Panel 콜백 함수부분(DragIntoTableCell.c 파일)
3.3 cmdReset 명령 콜백 함수
그림 3.3에는 Reset 명령버튼에 대한 콜백 함수를 보였습니다. 전체 행의 수를 구하여, 그 수만큼 루프문을 돌려서 해당 셀의 값을 초기화하도록 하였습니다. 실전에서는 테이블의 행의 수가 유동적인 경우가 많기 때문입니다.
그림 3.4 cmdReset 콜백 함수부분(DragIntoTableCell.c 파일)
4. 실행
이제 프로그램을 빌드하여 실행해 보겠습니다. 그림 4.1에 실행된 화면을 보였습니다.
윈도 탐색기로부터 파일을 하나씩 테이블의 셀에다 드래그하여 놓아 보십시오.
그림 4.1 실행화면
마무리
이렇게 해서 테이블의 각 셀에 파일을 드래그하여 놓는 예를 보았습니다. 여러분의 프로그램에 보다 더 직관적인 UI(User Interface) 구현에 도움이 되기를 바랍니다.
"일자리를 많이 창출하기 위한 기반을 마련하는 일에 프로그래머가 할 수 있는 일 중의 하나가 공개 소프트웨어를 많이 만들어 내는 것이라고 생각합니다"
감사합니다.
예제 프로그램 구상 및 작성: 1시간 22분 47초
강좌 문서 작성: 1시간 22분 4초
(총 2시간 45분)
극동테크(www.kdtechno.com) 허창원 드림