2009년 9월 17일 목요일

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 메시지를 처리하도록 지정하면 된다.

사용자 삽입 이미지


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

댓글 8개:

  1. 다이얼로그 전체에 Drag&Drop을 구현해봤는데 꽤나 귀찮던데요 ㅋㅋ

    답글삭제
  2. @구차니 - 2009/09/14 10:44
    포스팅이나 한번 하심이... ㅎㅎ

    답글삭제
  3. ㄷㄷㄷ 아이콘에 드레그엔 드롭 포스팅은 안해주실라나? [emo=082]

    그나저나 이 포스트가 왜 메인으로 왔죠? 어제까지만해도 저 뒤편에 있었는데...

    답글삭제
  4. @JAFO - 2009/09/17 22:19
    아이콘에 드래그 앤 드롭이 어떤 건가요?

    정확하게 이해를 못했습니다.



    그리고, 뭔가 만들고 있는데 티스토리의 기능을 확인하기 위해서 날짜를 좀 수정했습니다. ^^;

    답글삭제
  5. @BLUEnLIVE - 2009/09/17 22:27
    프로그램 실행파일 또는 실행파일 아이콘에 원하는 이미지를 드레그 앤 드롭으로 올려 놓으면 자동으로 프로그램이 시작되고 주소창에 이미지 주소가 바로 쏙 들어가는 기능이라든...

    답글삭제
  6. @JAFO - 2009/09/17 22:19
    그러니까... 실행파일에 다른 파일을 드롭하면 자동으로 드롭된 파일명을 인식하는 방법을 말씀하시는 거군요.

    그건 별로 어려운 게 아닌 것 같은데요...

    JAFO님 말씀이라면(엉?) 찾아보겠습니다.



    참, 내일부터 파리 여행가요... [emo=051] 갔다 와서...

    답글삭제
  7. 파리 [emo=060]

    이건 반칙이라는......이게 무슨 출장이냐는.........

    돌아 오실때 선물없으면[emo=067] 레드카드 임. ㅋㅋㅋㅋㅋ

    답글삭제
  8. @JAFO - 2009/09/18 22:16
    제 돈 내고 여행 가는데, 반칙이라뇨... [emo=097]

    답글삭제