CDropEdit를 활용하여 에디트 컨트롤에 드래그 앤 드롭 기능 적용하기 (수정)

CodeGuruUsing the CEdit Control (Drag-and-Drop)을 다시 설명한 포스팅임

CEdit 컨트롤에 드래그 앤 드롭을 적용하고 싶은 경우가 꽤 있다.
사실, 버튼 클릭해서 일일이 지정하는 것보단 그냥 드래그 앤 드롭 하는 것이 훨씬 편하다.

다음과 같은 순서로 작업하면 간단하게 드래그 앤 드롭 기능을 다이얼로그에 추가할 수 있다.
(작업 기준은 Visual C++ 6.0임)


1. 파일 복사


아래 파일의 압축을 풀어 적용할 프로젝트의 소스 폴더에 복사한다.
물론, Using the CEdit Control (Drag-and-Drop)에서 빌려와서 해당되는 파일 2개만 저장한 것이다.
(DropEdit.h, DropEdit.cpp)


사용자 삽입 이미지

추가된 DropEdit.h 및 DropEdit.cpp




2. 프로젝트에 복사한 파일 추가


위에 복사한 파일 2개를 프로젝트에 추가한다.

사용자 삽입 이미지

DropEdit.h, DropEdit.cpp




3. 메인 다이얼로그에 다음 #include 추가

#include "DropEdit.h"



4. StdAfx.h에 다음 #include 추가

#include <afxole.h>



5. 에디트 컨트롤의 "Accept files" 속성 체크

드래그 앤 드롭 기능을 부여할 에디트 컨트롤의 속성에서 Accept files를 찾아 체크한다.

사용자 삽입 이미지



6. 에디트 컨트롤에 컨트롤 멤버 변수 추가

에디트 컨트롤을 제어하기 위한 것이므로 Value가 아닌 Control 변수를 추가해야 한다.

사용자 삽입 이미지



7. CEdit로 만들어진 멤버변수를 CDropEdit로 변경

6번을 마친 뒤 다이얼로그의 헤더 파일을 보면 추가된 컨트롤 변수는 아래와 같이 CEdit로 만들어져있다.

  CEdit    m_ceTargetFilename;

이 부분을 아래와 같이 CDropEdit로 수정한다.

  CDropEdit    m_ceTargetFilename;



8. 컨트롤 초기화 (수정)

메인 다이얼로그의 OnInitDialog()에서 해당 에디트 컨트롤의 초기화 코드를 추가한다.
이 때 에디트 컨트롤에서 받도록 할 내용이 폴더인가 파일명인가를 명시행야 한다.
수정: 다이얼로그 베이스에서는 .SubclassDlgItem()은 추가하면 안 됨.

  // 이 .SubclassDlgItem()은 다이얼로그 베이스에서는 추가하면 안 됨
m_ceSourceFilename.SubclassDlgItem(IDC_EDIT1, this);
  // 폴더를 받도록 하려면 TRUE, 파일명을 받도록 하려면 FALSE
  m_ceSourceFilename.SetUseDir(TRUE);



9. 파일명/폴더 이름을 드롭했을 때 동작방식 지정 (옵션)

반드시 필요한 것은 아니나 가끔씩은 드롭했을 때 별도의 동작을 지정해야 할 때가 있다.
클래스 위자드에 가서 해당 에디트 컨트롤에서 EN_UPDATE 메시지를 처리하도록 지정하면 된다.

사용자 삽입 이미지


설명은 좀 긴 것 같지만, 사실 해야 하는 작업은 그리 많지 않다.