원본 : http://www.debuglab.com/knowledge/oledragdrop2.html
1. 요약
Ole를 이용하여 간단하게 Window 사이에서 Drag and Drop하여 데이터를 교환하는 방법을 설명합니다.
2. 본문
기본적으로 Ole Drag and Drop를 사용하기 위해서 COleDataSource와 COleDropTarget를 사용하고, 이 두 클래스는 "AfxOle.h"를 Include 해주어야 사용할 수 있습니다.
COleDataSource는 Drag를 시작하는 Window에서 정의해 주어야 하고,
COleDropTarget은 Drop이 이루지는 Window에서 정의해 주어야 한다.
CMy1View라는 곳에서 데이터를 드래그 하기위해서는 COleDataSource를 다음과 같이 사용한다.
3. 예제코드
4. 참조
데이터를 전달할 때 다른 Application Window에도 데이터를 전달해야 할 경우 COleDropSource클래스를 사용해야하는데 저도 아직 여기 까지는 사용해보지 않아서, 예제에서는 같은 Applicatopn에서 데이터를 Drag and Drop하기 위해 데이터를 저장하기 위한 CString 객체를 CMyApp에 선언하여 사용하였습니다.
- 2001.08.19 Smile Seo -
1. 요약
Ole를 이용하여 간단하게 Window 사이에서 Drag and Drop하여 데이터를 교환하는 방법을 설명합니다.
2. 본문
기본적으로 Ole Drag and Drop를 사용하기 위해서 COleDataSource와 COleDropTarget를 사용하고, 이 두 클래스는 "AfxOle.h"를 Include 해주어야 사용할 수 있습니다.
COleDataSource는 Drag를 시작하는 Window에서 정의해 주어야 하고,
COleDropTarget은 Drop이 이루지는 Window에서 정의해 주어야 한다.
CMy1View라는 곳에서 데이터를 드래그 하기위해서는 COleDataSource를 다음과 같이 사용한다.
COleDataSource m_OleDataSource; // CMy1View 의 멤버 변수로 선언
void CMy1View::OnMouseMove(UINT nFlags, CPoint point)
{
// 전달하길 원하는 데이터를 변수에 입력하는 작업을 해준다.
DROPEFFECT dropEffect = m_COleDataSource.DoDragDrop
(DROPEFFECT_COPY|DROPEFFECT_MOVE,NULL);
CMy1View::OnMouseMove(nFlags, point);
}
CMy2View라는 곳에서 드래그 된 데이터를 받기 위해서는 COleDropTarget 클래스를 다음과 같이 사용한다. COleDropTarget m_OleDropTarget; // CMy2View 의 멤버 변수로 선언
// OnInitalUpdate에서 초기화를 해준다.
void CTargetView::OnInitialUpdate()
{
CFormView::OnInitialUpdate();
m_OleDropTarget.Register(this); // Drag and Drop 를 위해 초기화
}
// 다음과 같은 Virtual함수를 재정의 해준다.
virtual BOOL OnDrop(COleDataObject* pDataObject, DROPEFFECT
dropEffect, CPoint point);
virtual DROPEFFECT OnDragEnter(COleDataObject* pDataObject,
DWORD dwKeyState, CPoint point);
virtual DROPEFFECT OnDragOver(COleDataObject* pDataObject,
DWORD dwKeyState, CPoint point);
//Drag된 파일을 받는다.
BOOL CAcsProjectView::OnDrop(COleDataObject* pDataObject,
DROPEFFECT dropEffect, CPoint point)
{
// 여기서 Drop된 데이터를 처리해준다.
return CScrollView::OnDrop(pDataObject, dropEffect, point);
}
// 드래그되는 파일이 View안에 들어 왔을 경우 의 처리
DROPEFFECT CAcsProjectView::OnDragEnter(COleDataObject* DataObject,
DWORD dwKeyState, CPoint point)
{
return DROPEFFECT_COPY; // 이 값을 반환해 주면 마우스 모양이 (+)
// 형태로 바뀌게 된다.
}
// 드래그되어 들어왔던 파일이 Drop작업이 이루지지 않고 다시 View를 빠져나가게 될경우
DROPEFFECT CAcsProjectView::OnDragOver(COleDataObject* pDataObject,
DWORD dwKeyState, CPoint point)
{
return DROPEFFECT_COPY; // 이 값을 리턴하게 되면 View를 빠져나
//간 후 마우스 모양이 적절한 형태로
//다시 바뀌게 된다.
}
3. 예제코드
4. 참조
데이터를 전달할 때 다른 Application Window에도 데이터를 전달해야 할 경우 COleDropSource클래스를 사용해야하는데 저도 아직 여기 까지는 사용해보지 않아서, 예제에서는 같은 Applicatopn에서 데이터를 Drag and Drop하기 위해 데이터를 저장하기 위한 CString 객체를 CMyApp에 선언하여 사용하였습니다.
- 2001.08.19 Smile Seo -
"MFC" 카테고리의 다른 글
- Child윈도를 Popup시키는 방법 (0)2007/03/23
- 향상된 RichEdit control (RICHEDIT20A) (0)2007/03/23
- OLE를 이용한 Drag and Drop (0)2007/03/23
- TLS(Thread Local Storage) (0)2007/03/23
- DECLARE_DYNCREATE()와 IMPLEMENT_DYNCREATE() (0)2007/03/22

수안이의 컴퓨터 연구실



Leave your greetings.