- CDropEdit를 활용하여 에디트 컨트롤에 드래그 앤 드롭 기능 적용하기 (수정)
- 컴퓨터야그/자작
- 2009. 9. 17. 04:58
CodeGuru의 Using the CEdit Control (Drag-and-Drop)을 다시 설명한 포스팅임
CEdit 컨트롤에 드래그 앤 드롭을 적용하고 싶은 경우가 꽤 있다.
사실, 버튼 클릭해서 일일이 지정하는 것보단 그냥 드래그 앤 드롭 하는 것이 훨씬 편하다.
다음과 같은 순서로 작업하면 간단하게 드래그 앤 드롭 기능을 다이얼로그에 추가할 수 있다.
(작업 기준은 Visual C++ 6.0임)
1. 파일 복사
아래 파일의 압축을 풀어 적용할 프로젝트의 소스 폴더에 복사한다.
물론, Using the CEdit Control (Drag-and-Drop)에서 빌려와서 해당되는 파일 2개만 저장한 것이다.
(DropEdit.h, DropEdit.cpp)
![사용자 삽입 이미지](http://ss.textcube.com/blog/0/8395/attach/XS38lphNOx.png)
물론, Using the CEdit Control (Drag-and-Drop)에서 빌려와서 해당되는 파일 2개만 저장한 것이다.
(DropEdit.h, DropEdit.cpp)
![사용자 삽입 이미지](http://ss.textcube.com/blog/0/8395/attach/XS38lphNOx.png)
추가된 DropEdit.h 및 DropEdit.cpp
2. 프로젝트에 복사한 파일 추가
위에 복사한 파일 2개를 프로젝트에 추가한다.
![사용자 삽입 이미지](http://ss.textcube.com/blog/0/8395/attach/XShqMUGYcT.png)
![사용자 삽입 이미지](http://ss.textcube.com/blog/0/8395/attach/XShqMUGYcT.png)
DropEdit.h, DropEdit.cpp
3. 메인 다이얼로그에 다음 #include 추가
#include "DropEdit.h"
4. StdAfx.h에 다음 #include 추가
#include <afxole.h>
5. 에디트 컨트롤의 "Accept files" 속성 체크
드래그 앤 드롭 기능을 부여할 에디트 컨트롤의 속성에서 Accept files를 찾아 체크한다.
![사용자 삽입 이미지](http://ss.textcube.com/blog/0/8395/attach/XGmR48C5f1.png)
![사용자 삽입 이미지](http://ss.textcube.com/blog/0/8395/attach/XGmR48C5f1.png)
6. 에디트 컨트롤에 컨트롤 멤버 변수 추가
에디트 컨트롤을 제어하기 위한 것이므로 Value가 아닌 Control 변수를 추가해야 한다.
![사용자 삽입 이미지](http://ss.textcube.com/blog/0/8395/attach/XLCfsb18Wo.png)
![사용자 삽입 이미지](http://ss.textcube.com/blog/0/8395/attach/XLCfsb18Wo.png)
7. CEdit로 만들어진 멤버변수를 CDropEdit로 변경
6번을 마친 뒤 다이얼로그의 헤더 파일을 보면 추가된 컨트롤 변수는 아래와 같이 CEdit로 만들어져있다.
이 부분을 아래와 같이 CDropEdit로 수정한다.
CEdit m_ceTargetFilename;
이 부분을 아래와 같이 CDropEdit로 수정한다.
CDropEdit m_ceTargetFilename;
8. 컨트롤 초기화 (수정)
메인 다이얼로그의 OnInitDialog()에서 해당 에디트 컨트롤의 초기화 코드를 추가한다.
이 때 에디트 컨트롤에서 받도록 할 내용이 폴더인가 파일명인가를 명시행야 한다.
수정: 다이얼로그 베이스에서는 .SubclassDlgItem()은 추가하면 안 됨.
이 때 에디트 컨트롤에서 받도록 할 내용이 폴더인가 파일명인가를 명시행야 한다.
수정: 다이얼로그 베이스에서는 .SubclassDlgItem()은 추가하면 안 됨.
// 이 .SubclassDlgItem()은 다이얼로그 베이스에서는 추가하면 안 됨
m_ceSourceFilename.SubclassDlgItem(IDC_EDIT1, this);
// 폴더를 받도록 하려면 TRUE, 파일명을 받도록 하려면 FALSE
m_ceSourceFilename.SetUseDir(TRUE);
9. 파일명/폴더 이름을 드롭했을 때 동작방식 지정 (옵션)
반드시 필요한 것은 아니나 가끔씩은 드롭했을 때 별도의 동작을 지정해야 할 때가 있다.
클래스 위자드에 가서 해당 에디트 컨트롤에서 EN_UPDATE 메시지를 처리하도록 지정하면 된다.
![사용자 삽입 이미지](http://ss.textcube.com/blog/0/8395/attach/XJgLa8AzUk.png)
클래스 위자드에 가서 해당 에디트 컨트롤에서 EN_UPDATE 메시지를 처리하도록 지정하면 된다.
![사용자 삽입 이미지](http://ss.textcube.com/blog/0/8395/attach/XJgLa8AzUk.png)
설명은 좀 긴 것 같지만, 사실 해야 하는 작업은 그리 많지 않다.
'컴퓨터야그 > 자작' 카테고리의 다른 글
C++로 풀어본 아인슈타인의 퍼즐 (19) | 2009.10.09 |
---|---|
디카 사진의 시간대를 변경해주는 프로그램 공개 (업데이트) (10) | 2009.09.28 |
디카 메모리가 부족하다고 풍경을 마음에 담을 순 없다! (최종판 다음버전 OTL) (15) | 2009.09.11 |
디카 메모리가 부족하다고 풍경을 마음에 담을 순 없다! (최종판) (7) | 2009.09.10 |
VS 2003.net에서 jpeglib 컴파일하는 방법 (1) | 2009.09.06 |
Recent comment