다음을 통해 공유


OLE 끌어서 놓기

OLE의 끌어서 놓기 기능은 주로 데이터를 복사하고 붙여넣기 위한 바로 가기입니다. 클립보드를 사용하여 데이터를 복사하거나 붙여넣는 경우 여러 단계가 필요합니다. 데이터를 선택하고 편집 메뉴에서 잘라내기 또는 복사선택합니다. 그런 다음 대상 앱 또는 창으로 이동하여 대상 위치에 커서를 놓습니다. 마지막으로 메뉴에서 붙여넣기 편집>을 선택합니다.

OLE 끌어서 놓기 기능은 파일 관리자 끌어서 놓기 메커니즘과 다릅니다. 파일 관리자는 파일 이름만 처리할 수 있으며 애플리케이션에 파일 이름을 전달하도록 특별히 설계되었습니다. OLE에서 끌어서 놓는 것이 훨씬 더 일반적입니다. 클립보드에 배치할 수 있는 모든 데이터를 끌어서 놓을 수 있습니다.

OLE 끌어서 놓기를 사용하면 프로세스에서 두 단계를 제거합니다. 원본 창("원본 삭제")에서 데이터를 선택한 다음 대상("놓기 대상")으로 끕니다. 마우스 단추를 놓아 놓습니다. 이 작업을 수행하면 메뉴가 필요하지 않으며 복사/붙여넣기 시퀀스보다 빠릅니다. 단 하나의 요구 사항이 있습니다. 드롭 소스 및 놓기 대상은 모두 열려 있어야 하며 적어도 화면에 부분적으로 표시되어야 합니다.

OLE 끌어서 놓기를 사용하면 문서 내, 다른 문서 간 또는 응용 프로그램 간에 데이터를 한 위치에서 다른 위치로 쉽게 전송할 수 있습니다. 컨테이너 또는 서버 애플리케이션에서 구현될 수 있습니다. 모든 애플리케이션은 드롭 소스, 놓기 대상 또는 둘 다일 수 있습니다. 애플리케이션에서 드롭 소스 및 드롭 대상 지원을 모두 구현하는 경우 자식 창 사이 또는 한 창 내에서 끌어서 놓을 수 있습니다. 이 기능을 사용하면 애플리케이션을 훨씬 쉽게 사용할 수 있습니다.

OLE(데이터 개체 및 데이터 원본) 문서에서는 애플리케이션에서 데이터 전송을 구현하는 방법을 설명합니다. 또한 MFC OLE 샘플 OCLIENTHIERSVR을 검사하는 것도 유용합니다.

드롭 소스 구현

끌어서 놓기 작업에 데이터를 제공하도록 애플리케이션을 가져오기 위해 드롭 소스를 구현합니다. 드롭 소스의 기본 구현은 비교적 간단합니다. 첫 번째 단계는 끌기 작업을 시작하는 이벤트를 결정하는 것입니다. 권장되는 사용자 인터페이스 지침은 선택한 일부 데이터 내의 지점에서 WM_LBUTTONDOWN 이벤트가 발생할 때와 같이 끌기 작업의 시작을 정의합니다. MFC OLE 샘플 OCLIENTHIERSVR 은 다음 지침을 따릅니다.

애플리케이션이 컨테이너이고 선택한 데이터가 연결된 개체이거나 형식 COleClientItem이 포함된 개체인 경우 해당 멤버 함수를 호출합니다 DoDragDrop . 그렇지 않으면 개체를 COleDataSource 생성하고, 선택 영역으로 초기화하고, 데이터 원본 개체의 DoDragDrop 멤버 함수를 호출합니다. 애플리케이션이 서버 COleServerItem::DoDragDrop인 경우 . 표준 끌어서 놓기 동작을 사용자 지정하는 방법에 대한 자세한 내용은 끌어서 놓기 사용자 지정 섹션 을 참조하세요.

DROPEFFECT_MOVE 반환하는 경우 DoDragDrop 원본 문서에서 원본 데이터를 즉시 삭제합니다. 다른 반환 값 DoDragDrop 은 드롭 소스에 영향을 주지 않습니다.

자세한 내용은 OLE 데이터 개체 및 데이터 원본: 만들기 및 소멸, OLE 데이터 개체 및 데이터 원본: 조작을 참조하세요.

삭제 대상 구현

드롭 원본보다 놓기 대상을 구현하는 데 약간 더 많은 작업이 필요하지만 여전히 비교적 간단합니다.

OLE 삭제 대상을 구현하려면

  1. 아직 없는 경우 애플리케이션의 InitInstance 멤버 함수에 호출을 AfxOleInit 추가합니다. 이 호출은 OLE 라이브러리를 초기화하는 데 필요합니다.

  2. 삭제 대상이 되려는 애플리케이션의 각 보기에 멤버 변수를 추가합니다. 이 멤버 변수는 형식 COleDropTarget 이거나 파생된 클래스여야 합니다.

  3. WM_CREATE 메시지(일반적으로OnCreate)를 처리하는 뷰 클래스의 함수에서 새 멤버 변수의 Register 멤버 함수를 호출합니다. Revoke 보기가 삭제될 때 자동으로 호출됩니다.

  4. 다음 함수를 재정의합니다. 애플리케이션 전체에서 동일한 동작을 원하는 경우 뷰 클래스에서 이러한 함수를 재정의합니다. 격리된 경우 동작을 수정하거나 창이 아닌CView 경우 삭제를 사용하도록 설정하려면 파생 클래스에서 이러한 함수를 재정의합니다 COleDropTarget.

    다시 정의 허용하려면
    OnDragEnter 창에서 수행되는 삭제 작업입니다. 커서가 창에 처음 들어갈 때 호출됩니다.
    OnDragLeave 끌기 작업이 지정된 창을 떠날 때의 특수 동작입니다.
    OnDragOver 창에서 수행되는 삭제 작업입니다. 창에서 커서를 끌 때 호출됩니다.
    OnDrop 지정된 창에 삭제되는 데이터의 처리입니다.
    OnScrollBy 대상 창에서 스크롤이 필요한 경우에 대한 특수 동작입니다.

MAINVIEW를 참조하세요. 이러한 함수가 함께 작동하는 방법의 예를 들어 MFC OLE 샘플 OCLIENT 의 일부인 CPP 파일입니다.

자세한 내용은 OLE 데이터 개체 및 데이터 원본: 만들기 및 소멸, OLE 데이터 개체 및 데이터 원본: 조작을 참조하세요.

끌어서 놓기 사용자 지정

대부분의 애플리케이션에서는 끌어 놓기 기능의 기본 구현으로도 충분합니다. 그러나 일부 애플리케이션에서는 이 표준 동작을 변경해야 할 수 있습니다. 이 섹션에서는 이러한 기본값을 변경하는 데 필요한 단계를 설명합니다. 이 기술을 사용하여 복합 문서를 지원하지 않는 애플리케이션을 드롭 소스로 만들 수 있습니다.

표준 OLE 끌어서 놓기 동작을 사용자 지정하거나 OLE가 아닌 애플리케이션이 있는 경우 데이터를 포함할 개체를 만들어야 COleDataSource 합니다. 사용자가 끌어 놓기 작업을 시작하면 코드가 끌어 놓기 작업을 지원하는 다른 클래스 대신 이 개체에서 DoDragDrop 함수를 호출해야 합니다.

필요에 따라 COleDropSource 개체를 만들어서 변경하려는 동작 유형에 따라 놓기를 제어하고 일부 함수를 재정의할 수 있습니다. 그런 다음 이러한 함수의 기본 동작을 변경하도록 이 놓기 소스 개체가 COleDataSource::DoDragDrop으로 전달됩니다. 이러한 여러 옵션을 통해 애플리케이션에서 끌어 놓기 작업을 지원하는 데 유연성을 크게 향상시킬 수 있습니다. 데이터 원본에 대한 자세한 내용은 OLE(데이터 개체 및 데이터 원본) 문서를 참조하세요.

다음 함수를 재정의해서 끌어 놓기 작업을 사용자 지정할 수 있습니다.

다시 정의 사용자 지정
OnBeginDrag 를 호출 DoDragDrop한 후 끌기 작업이 시작되는 방법.
GiveFeedback 여러 놓기 결과에 대한 시각적 피드백(예: 커서 모양).
QueryContinueDrag 끌어 놓기 작업의 종료. 이 함수를 사용하면 놓기 작업 중 보조키 상태를 확인할 수 있습니다.

참고 항목

OLE
OLE 데이터 개체 및 데이터 원본
OLE 데이터 개체 및 데이터 원본: 만들기 및 소멸
OLE 데이터 개체 및 데이터 원본: 조작
COleClientItem::DoDragDrop
COleDataSource 클래스
COleDataSource::D oDragDrop
COleDropSource 클래스
COleDropTarget 클래스
CView::OnDragLeave