셸 클립보드 형식
셸 클립보드 형식은 클립보드를 통해 전송되는 셸 데이터의 형식을 식별하는 데 사용됩니다. 대부분의 Shell 클립보드 형식은 파일 이름 목록 또는 PIDL(항목 식별자 목록)에 대한 포인터와 같은 데이터 형식을 식별합니다. 그러나 일부 형식은 원본과 대상 간의 통신에 사용됩니다. 최적화된 이동 및 delete_on_paste같은 셸 작업을 지원하여 데이터 전송 프로세스를 신속하게 처리할 수 있습니다. 셸 데이터는 항상 FORMATETC 구조를 사용하여 데이터의 특성을 지정하는 보다 일반적인 방법으로 사용하는 데이터 개체 포함됩니다. 구조체의 cfFormat 멤버는 데이터의 특정 항목에 대한 클립보드 형식으로 설정됩니다. 다른 멤버는 데이터 전송 메커니즘과 같은 추가 정보를 제공합니다. 데이터는 함께 제공되는 STGMEDIUM 구조에 포함됩니다.
메모
표준 클립보드 형식 식별자에는 XXXCF_형식이 있습니다. 일반적인 예는 ANSI 텍스트 데이터를 전송하는 데 사용되는 CF_TEXT. 이러한 식별자에는 미리 정의된 값이 있으며 FORMATETC 구조와 함께 직접 사용할 수 있습니다. CF_HDROP제외하고 셸 형식 식별자는 미리 정의되지 않습니다. DragWindow를 제외하고 XXXCFSTR_형식이 있습니다. 이러한 값을 미리 정의된 형식과 구분하기 위해 단순히 형식이라고도 합니다. 그러나 미리 정의된 형식과 달리 데이터를 전송하는 데 사용하려면 먼저 원본과 대상 모두에서 등록해야 합니다. 셸 형식을 등록하려면 Shlobj.h 헤더 파일을 포함하고 CFSTR_XXX 형식 식별자를 RegisterClipboardFormat전달합니다. 이 함수는 유효한 클립보드 형식 값을 반환합니다. 이 값은 FORMATETC 구조체의 cfFormat 멤버로 사용할 수 있습니다.
Shell 클립보드 형식은 사용되는 방법에 따라 세 개의 그룹으로 구성됩니다.
파일 시스템 개체 전송 형식
이러한 형식은 하나 이상의 파일 또는 다른 셸 개체를 전송하는 데 사용됩니다.
- CF_HDROP
- CFSTR_FILECONTENTS
- CFSTR_FILEDESCRIPTOR
- CFSTR_FILENAME
- CFSTR_FILENAMEMAP
- CFSTR_MOUNTEDVOLUME
- CFSTR_SHELLIDLIST
- CFSTR_SHELLIDLISTOFFSET
CF_HDROP
이 클립보드 형식은 기존 파일 그룹의 위치를 전송할 때 사용됩니다. 다른 셸 형식과 달리 미리 정의되므로 registerClipboardFormat 호출할 필요가 없습니다. 데이터는 전역 메모리 개체를 포함하는 STGMEDIUM 구조체로 구성됩니다. 구조체의 hGlobal 멤버는 DROPFILES 구조를 hGlobal 멤버로 가리킵니다.
DROPFILES 구조체의 pFiles 멤버에는 파일 이름이 포함된 이중 null종료 문자 배열에 대한 오프셋이 포함됩니다. 데이터 개체에서 CF_HDROP 형식을 추출하는 경우 DragQueryFile 사용하여 전역 메모리 개체에서 개별 파일 이름을 추출할 수 있습니다. 데이터 개체에 배치할 CF_HDROP 형식을 만드는 경우 파일 이름 배열을 생성해야 합니다.
파일 이름 배열은 각각 종료 NULL 문자를 포함하여 하나의 파일의 정규화된 경로를 포함하는 일련의 문자열로 구성됩니다. 배열을 종료하기 위해 추가 null 문자가 최종 문자열에 추가됩니다. 예를 들어 파일 c:\temp1.txt 및 c:\temp2.txt 전송되는 경우 문자 배열은 다음과 같습니다.
c:\temp1.txt'\0'c:\temp2.txt'\0''\0'
메모
이 예제에서 '\0'은 포함해야 하는 리터럴 문자가 아니라 null 문자를 나타내는 데 사용됩니다.
개체가 끌어서 놓기 작업의 일부로 클립보드에 복사된 경우 DROPFILES 구조체의 pt 멤버에는 개체가 삭제된 지점의 좌표가 포함됩니다. DragQueryPoint 사용하여 커서 좌표를 추출할 수 있습니다.
이 형식이 데이터 개체에 있는 경우 OLE 끌기 루프는 OLE가 아닌 놓기 대상이 있는 WM_DROPFILES 기능을 시뮬레이션합니다. 이는 애플리케이션이 Windows 3.1 시스템에서 끌어서 놓기 작업의 원본인 경우 중요합니다.
CFSTR_FILECONTENTS
이 형식 식별자는 CFSTR_FILEDESCRIPTOR 형식과 함께 사용하여 실제로 저장되는 방법에 관계없이 파일을 전송하는 것처럼 데이터를 전송합니다. 데이터는 한 파일의 내용을 나타내는 STGMEDIUM 구조체로 구성됩니다. 파일은 일반적으로 스트림 개체로 표시되므로 파일 내용을 메모리에 배치할 필요가 없습니다. 이 경우 STGMEDIUM 구조체의 멤버가 TYMED_ISTREAM 설정되고 파일은 IStream 인터페이스로 표시됩니다. 파일은 스토리지 또는 전역 메모리 개체(TYMED_ISTORAGE 또는 TYMED_HGLOBAL)일 수도 있습니다. 연결된 CFSTR_FILEDESCRIPTOR 형식에는 파일의 이름과 특성을 지정하는 각 파일에 대한 FILEDESCRIPTOR 구조체가 포함되어 있습니다.
대상은 파일인 것처럼 CFSTR_FILECONTENTS 형식과 연결된 데이터를 처리합니다. 대상은 IDataObject::GetData 호출하여 데이터를 추출할 때 FORMATETC 구조체의 lindex 멤버를 파일 FILEDESCRIPTOR 구조체의 0부터 시작하는 인덱스로 설정하여 특정 파일을 CFSTR_FILEDESCRIPTOR 형식으로 지정합니다. 그런 다음, 대상은 반환된 인터페이스 포인터 또는 전역 메모리 핸들을 사용하여 데이터를 추출합니다.
CFSTR_FILEDESCRIPTOR
이 형식 식별자는 CFSTR_FILECONTENTS 형식과 함께 사용하여 데이터를 파일 그룹으로 전송합니다. 이러한 두 형식은 파일 시스템 파일로 저장되지 않은 Shell 개체를 전송하는 기본 방법입니다. 예를 들어 각 전자 메일이 실제로 데이터베이스의 데이터 블록으로 저장되더라도 이러한 형식을 사용하여 전자 메일 메시지 그룹을 개별 파일로 전송할 수 있습니다. 데이터는 전역 메모리 개체를 포함하는 STGMEDIUM 구조체로 구성됩니다. 구조체의 hGlobal 멤버는 FILEGROUPDESCRIPTOR 구조체를 가리킨 다음 그룹의 각 파일에 대해 하나의 FILEDESCRIPTOR 구조체를 포함하는 배열을 가리킵니다. 각 FILEDESCRIPTOR 구조체에는 파일 내용을 포함하는 별도의 CFSTR_FILECONTENTS 형식이 있습니다. 특정 파일의 CFSTR_FILECONTENTS 형식을 식별하려면 FORMATETC 구조체의 lIndex 값을 파일 FILEDESCRIPTOR 구조체의 0부터 시작하는 인덱스로 설정합니다.
CFSTR_FILEDESCRIPTOR 형식은 실제로 저장되는 방식에 관계없이 파일 그룹인 것처럼 데이터를 전송하는 데 일반적으로 사용됩니다. 대상의 관점에서 각 CFSTR_FILECONTENTS 형식은 단일 파일을 나타내며 그에 따라 처리됩니다. 그러나 원본은 선택한 방식으로 데이터를 저장할 수 있습니다. CSFTR_FILECONTENTS 형식은 단일 파일에 해당할 수 있지만, 예를 들어 데이터베이스 또는 텍스트 문서에서 원본에서 추출한 데이터를 나타낼 수도 있습니다.
CFSTR_FILENAME
이 형식 식별자는 단일 파일을 전송하는 데 사용됩니다. 데이터는 전역 메모리 개체를 포함하는 STGMEDIUM 구조체로 구성됩니다. 구조체의 hGlobal 멤버는 파일의 정규화된 파일 경로를 포함하는 단일 null종료된 문자열을 가리킵니다. 이 형식은 CF_HDROP대체되었지만 Windows 3.1 애플리케이션과의 이전 버전과의 호환성을 위해 지원됩니다.
CFSTR_FILENAMEMAP
이 형식 식별자는 CF_HDROP 형식의 파일 그룹 이름을 변경하고 전송할 때 사용됩니다. 데이터는 전역 메모리 개체를 포함하는 STGMEDIUM 구조체로 구성됩니다. 구조체의 hGlobal 멤버는 이중 null종료 문자 배열을 가리킵니다. 이 배열에는 파일이 함께 제공되는 CF_HDROP 형식으로 나열되는 순서와 동일한 순서로 각 파일에 대한 새 이름이 포함됩니다. 문자 배열의 형식은 CF_HDROP 전송된 파일을 나열하는 데 사용하는 형식과 동일합니다.
CFSTR_MOUNTEDVOLUME
이 형식 식별자는 탑재된 볼륨의 경로를 전송하는 데 사용됩니다. CF_HDROP비슷하지만 단일 경로만 포함하며 볼륨이 폴더에 탑재될 때 경로를 나타내는 데 필요할 수 있는 긴 경로 문자열을 처리할 수 있습니다. 데이터는 전역 메모리 개체를 포함하는 STGMEDIUM 구조체로 구성됩니다. 구조체의 hGlobal 멤버는 정규화된 파일 경로를 포함하는 단일 null종료된 문자열을 가리킵니다. 경로 문자열은 '\' 문자로 끝나야 하며, 그 다음에 NULL 종료.
Windows 2000 이전에는 드라이브 문자에만 볼륨을 탑재할 수 있습니다. NTFS 포맷 드라이브를 사용하는 Windows 2000 이상 시스템의 경우 빈 폴더에 볼륨을 탑재할 수도 있습니다. 이 기능을 사용하면 드라이브 문자를 사용하지 않고 볼륨을 탑재할 수 있습니다. 탑재된 볼륨은 FAT, FAT32, NTFS 및 CDFS를 포함하여 현재 지원되는 모든 형식을 사용할 수 있습니다.
속성 시트 처리기구현하여 드라이브 속성 속성 시트에 페이지를 추가할 수 있습니다. 볼륨이 드라이브 문자에 탑재된 경우 Shell은 경로 정보를 CF_HDROP 형식으로 처리기에 전달합니다. Windows 2000 이상 시스템에서는 이전 시스템과 마찬가지로 볼륨이 드라이브 문자에 탑재될 때 CF_HDROP 형식이 사용됩니다. 그러나 볼륨이 폴더에 탑재된 경우 CFSTR_MOUNTEDVOLUME 형식 식별자는 CF_HDROP 대신 사용됩니다.
드라이브 문자만 볼륨을 탑재하는 데 사용되는 경우 CF_HDROP만 사용되며, 기존 속성 시트 처리기는 이전 시스템에서와 마찬가지로 작동합니다. 그러나 처리기가 드라이브 문자뿐만 아니라 폴더에 탑재된 볼륨의 페이지를 표시하려면 처리기가 CSFTR_MOUNTEDVOLUME 및 CF_HDROP 형식을 모두 이해할 수 있어야 합니다.
CFSTR_SHELLIDLIST
이 형식 식별자는 하나 이상의 기존 네임스페이스 개체의 위치를 전송할 때 사용됩니다. CF_HDROP거의 동일한 방식으로 사용되지만 파일 시스템 경로 대신 PIDL을 포함합니다. PIDL을 사용하면 CFSTR_SHELLIDLIST 형식이 파일 시스템 개체뿐만 아니라 가상 개체를 처리할 수 있습니다. 데이터는 전역 메모리 개체를 포함하는 STGMEDIUM 구조체입니다. 구조체의 hGlobal 멤버는 CIDA 구조를 가리킵니다.
CIDA 구조체의 aoffset 멤버는 전송되는 각 PIDL에 대한 ITEMIDLIST 구조의 시작 부분에 대한 오프셋을 포함하는 배열입니다. 특정 PIDL을 추출하려면 먼저 해당 인덱스 확인 그런 다음 해당 인덱스에 해당하는 오프셋 값을 CIDA 구조체의 주소에 추가합니다.
aoffset 첫 번째 요소는 부모 폴더의 정규화된 PIDL에 대한 오프셋을 포함합니다. 이 PIDL이 비어 있으면 부모 폴더가 바탕 화면입니다. 배열의 나머지 요소 각각에는 전송할 PIDL 중 하나에 대한 오프셋이 포함됩니다. 이러한 모든 PIDL은 부모 폴더의 PIDL을 기준으로 합니다.
다음 두 매크로를 사용하여 CIDA 구조체에서 PIDL을 검색할 수 있습니다. 첫 번째는 구조체에 대한 포인터를 가져와서 부모 폴더의 PIDL을 검색합니다. 두 번째는 구조체에 대한 포인터를 사용하여 0부터 시작하는 인덱스로 식별되는 다른 PIDL 중 하나를 검색합니다.
#define GetPIDLFolder(pida) (LPCITEMIDLIST)(((LPBYTE)pida)+(pida)->aoffset[0])
#define GetPIDLItem(pida, i) (LPCITEMIDLIST)(((LPBYTE)pida)+(pida)->aoffset[i+1])
메모
이러한 매크로에서 반환되는 값은 PIDL의 ITEMIDLIST 구조체에 대한 포인터입니다. 이러한 구조체의 길이는 다양하기 때문에 끝을 표시하는 2 바이트 NULL 도달할 때까지 각 ITEMIDLIST 구조체의 SHITEMID 구조를 탐색하여 구조의 끝을 결정해야 합니다.
CFSTR_SHELLIDLISTOFFSET
이 형식 식별자는 CF_HDROP, CFSTR_SHELLIDLIST및 CFSTR_FILECONTENTS 같은 형식과 함께 전송 후 개체 그룹의 위치를 지정하는 데 사용됩니다. 데이터는 전역 메모리 개체를 포함하는 STGMEDIUM 구조체로 구성됩니다. 구조체의 hGlobal 멤버는 POINT 구조의 배열을 가리킵니다. 첫 번째 구조체는 그룹을 둘러싸는 사각형의 왼쪽 위 모서리에 있는 화면 좌표를 픽셀 단위로 지정합니다. 구조체의 나머지 부분에서는 그룹 위치를 기준으로 개별 개체의 위치를 지정합니다. 개체를 연결된 형식으로 나열하는 데 사용된 순서와 동일한 순서여야 합니다.
가상 개체 전송 형식
CFSTR_SHELLIDLIST 형식을 사용하여 파일 시스템과 가상 개체를 모두 전송할 수 있습니다. 그러나 특정 유형의 가상 개체를 전송하기 위한 몇 가지 특수 형식도 있습니다.
CFSTR_NETRESOURCES
이 형식 식별자는 도메인 또는 서버와 같은 네트워크 리소스를 전송할 때 사용됩니다. 데이터는 전역 메모리 개체를 포함하는 STGMEDIUM 구조체입니다. 구조체의 hGlobal 멤버는 NRESARRAY 구조를 가리킵니다. 해당 구조체의 nr 멤버는 lpRemoteName 멤버가 네트워크 리소스를 식별하는 null종료 문자열을 포함하는 NETRESOURCE 구조를 나타냅니다. 그런 다음 삭제 대상은 WNet(Windows 네트워킹) API 함수(예: WNetAddConnection)와 함께 데이터를 사용하여 개체에 대한 네트워크 작업을 수행할 수 있습니다.
CFSTR_PRINTERGROUP
이 형식 식별자는 프린터의 이름을 전송할 때 사용됩니다. 데이터는 전역 메모리 개체를 포함하는 STGMEDIUM 구조체입니다. 구조체의 hGlobal 멤버는 CF_HDROP사용된 것과 동일한 형식의 문자열을 가리킵니다. 그러나 DROPFILES 구조체의 pFiles 멤버에는 파일 경로 대신 하나 이상의 친숙한 프린터 이름이 포함됩니다.
CFSTR_INETURL
이 형식 식별자는 CFSTR_SHELLURL(사용되지 않음)바꿉니다. 애플리케이션이 클립보드 URL을 조작하도록 하려면 CFSTR_SHELLURL(사용되지 않음) 대신 CFSTR_INETURL 사용합니다. 이 형식은 단일 URL의 최상의 클립보드 표현을 제공합니다. UNICODE가 정의되지 않은 경우 애플리케이션은 URL의 CF_TEXT/CFSTR_SHELLURL 버전을 검색합니다. UNICODE가 정의된 경우 애플리케이션은 CF_UNICODE 버전의 URL을 검색합니다.
CFSTR_SHELLURL(사용되지 않음)
메모
이 형식 식별자는 더 이상 사용되지 않습니다. 대신 CFSTR_INETURL 사용합니다.
원본과 대상 간의 통신 형식
이러한 형식 식별자는 원본과 대상 간의 통신을 허용합니다. 형식은 데이터를 수반하며, 셸 개체와 관련된 이동-복사-붙여넣기 또는 끌어서 놓기 작업에 대해 애플리케이션에 더 높은 수준의 제어를 제공합니다.
- CFSTR_INDRAGLOOP
- CFSTR_LOGICALPERFORMEDDROPEFFECT
- CFSTR_PASTESUCCEEDED
- CFSTR_PERFORMEDDROPEFFECT
- CFSTR_PREFERREDDROPEFFECT
- CFSTR_TARGETCLSID
- CFSTR_UNTRUSTEDDRAGDROP
- dragWindow
CFSTR_INDRAGLOOP
이 형식 식별자는 데이터 개체가 끌어서 놓기 루프에 있는지 여부를 나타내는 데 사용됩니다. 데이터는 전역 메모리 개체를 포함하는 STGMEDIUM 구조체입니다. 구조체의 hGlobal 멤버는 DWORD 값을 가리킵니다. DWORD 값이 0이 아니면 데이터 개체가 끌어서 놓기 루프 내에 있습니다. 값이 0으로 설정된 경우 데이터 개체는 끌어서 놓기 루프 내에 있지 않습니다.
일부 놓기 대상은 IDataObject::GetData 호출하고 개체가 끌어서 놓기 루프 내에 있는 동안 데이터 추출을 시도할 수 있습니다. 이러한 각 항목에 대해 개체를 완전히 렌더링하면 끌기 커서가 중단될 수 있습니다. 데이터 개체가 CFSTR_INDRAGLOOP지원하는 경우 대상은 해당 형식을 사용하여 끌어서 놓기 루프의 상태를 확인하고 실제로 삭제될 때까지 개체의 메모리 집약적 렌더링을 방지할 수 있습니다. 메모리를 많이 렌더링하는 형식은 FORMATETC 열거자 및 IDataObject::QueryGetData호출에 포함되어야 합니다. 데이터 개체가 CFSTR_INDRAGLOOP 설정하지 않으면 값이 0으로 설정된 것처럼 작동해야 합니다.
CFSTR_LOGICALPERFORMEDDROPEFFECT
버전 5.0.이 형식 식별자를 사용하면 드롭 소스가 데이터 개체의 IDataObject::GetData 메서드를 호출하여 셸 데이터 전송의 결과를 확인할 수 있습니다. 데이터는 전역 메모리 개체를 포함하는 STGMEDIUM 구조체입니다. 구조체의 hGlobal 멤버는 DROPEFFECT 값이 포함된 DWORD를 가리킵니다.
CFSTR_PERFORMEDDROPEFFECT 형식 식별자는 대상이 실제로 수행된 작업을 데이터 개체에 나타낼 수 있도록 하기 위한 것입니다. 그러나 셸은 가능하면 파일 시스템 개체에 최적화된 이동을 사용합니다. 이 경우 Shell은 일반적으로 원래 데이터가 삭제되었음을 데이터 개체에 나타내기 위해 CFSTR_PERFORMEDDROPEFFECT 값을 DROPEFFECT_NONE 설정합니다. 따라서 원본은 CFSTR_PERFORMEDDROPEFFECT 값을 사용하여 수행된 작업을 확인할 수 없습니다. 대부분의 원본에는 이 정보가 필요하지 않지만 몇 가지 예외가 있습니다. 예를 들어 최적화된 이동으로 원본이 데이터를 삭제할 필요가 없더라도 원본은 관련 데이터베이스를 업데이트하여 파일이 이동 또는 복사되었음을 나타내야 할 수 있습니다.
원본이 발생한 작업을 알아야 하는 경우 데이터 개체의 IDataObject::GetData 메서드를 호출하고 CFSTR_LOGICALPERFORMEDDROPEFFECT 형식을 요청할 수 있습니다. 이 형식은 기본적으로 작업이 완료된 후 사용자의 관점에서 발생하는 작업을 반영합니다. 새 파일이 만들어지고 원래 파일이 삭제되면 사용자에게 이동 작업이 표시되고 형식의 데이터 값이 DROPEFFECT_MOVE 설정됩니다. 원본 파일이 여전히 있는 경우 사용자에게 복사 작업이 표시되고 형식의 데이터 값이 DROPEFFECT_COPY 설정됩니다. 링크를 만든 경우 형식의 데이터 값이 DROPEFFECT_LINK.
CFSTR_PASTESUCCEEDED
이 형식 식별자는 대상에서 IDataObject::SetData 메서드를 통해 데이터 개체에 붙여넣기 삭제 작업이 성공했음을 알리는 데 사용됩니다. 데이터는 전역 메모리 개체를 포함하는 STGMEDIUM 구조체입니다. 구조체의 hGlobal 멤버는 DROPEFFECT 값이 포함된 DWORD 가리킵니다. 이 형식은 데이터 개체에 잘라내기 작업을 완료하고 필요한 경우 원래 데이터를 삭제해야 임을 알리는 데 사용됩니다. 자세한 내용은 붙여넣기 작업 참조하세요.
CFSTR_PERFORMEDDROPEFFECT
이 형식 식별자는 대상에서 IDataObject::SetData 메서드를 통해 데이터 전송 결과를 알리는 데 사용됩니다. 데이터는 전역 메모리 개체를 포함하는 STGMEDIUM 구조체입니다. 구조체의 hGlobal 멤버는 적절한 DROPEFFECT 값(일반적으로 DROPEFFECT_MOVE 또는 DROPEFFECT_COPY)으로 설정된 DWORD 가리킵니다.
이 형식은 최적화된 이동 또는 붙여넣기 삭제 작업과 같이 작업의 결과를 이동 또는 복사할 수 있는 경우에 일반적으로 사용됩니다. 대상에서 데이터 개체에 실제로 발생한 상황을 알릴 수 있는 신뢰할 수 있는 방법을 제공합니다. DoDragDrop 반환된 pdwEffect 값이 어떤 작업이 발생했는지 안정적으로 나타내지 않았기 때문에 도입되었습니다. CFSTR_PERFORMEDDROPEFFECT 형식은 최적이 아닌 이동이 수행되었음을 나타내는 신뢰할 수 있는 방법입니다.
CFSTR_PREFERREDDROPEFFECT
이 형식 식별자는 원본에서 기본 설정 데이터 전송 방법이 이동 또는 복사인지 여부를 지정하는 데 사용됩니다. 놓기 대상은 데이터 개체의 IDataObject::GetData 메서드를 호출하여 이 형식을 요청합니다. 데이터는 전역 메모리 개체를 포함하는 STGMEDIUM 구조체입니다. 구조체의 hGlobal 멤버는 DWORD 값을 가리킵니다. 이 값은 이동 작업이 선호되는 경우 DROPEFFECT_MOVE 설정되거나 복사 작업이 선호되는 경우 DROPEFFECT_COPY 설정됩니다.
이 기능은 원본에서 이동 또는 복사 작업을 지원할 수 있는 경우에 사용됩니다. CFSTR_PREFERREDDROPEFFECT 형식을 사용하여 대상에 대한 기본 설정을 전달합니다. 대상은 요청을 준수할 의무가 없으므로 대상은 CFSTR_PERFORMEDDROPEFFECT 형식으로 원본의 IDataObject::SetData 메서드를 호출하여 실제로 수행된 작업을 데이터 개체에 알려야 합니다.
붙여넣기 삭제 작업을 사용하면 CFSTR_PREFERREDDROPFORMAT 형식을 사용하여 원본에서 잘라내기 또는 복사를 수행했는지 여부를 대상에 알릴 수 있습니다. 끌어서 놓기 작업을 사용하면 CFSTR_PREFERREDDROPFORMAT 사용하여 셸의 동작을 지정할 수 있습니다. 이 형식이 없으면 셸은 컨텍스트에 따라 기본 작업을 수행합니다. 예를 들어 사용자가 한 볼륨에서 파일을 끌어서 다른 볼륨에 떨어뜨리는 경우 셸의 기본 작업은 파일을 복사하는 것입니다. 데이터 개체에 CFSTR_PREFERREDDROPFORMAT 형식을 포함하면 기본 작업을 재정의하고 셸에 파일을 복사, 이동 또는 연결하도록 명시적으로 지시할 수 있습니다. 사용자가 오른쪽 단추로 끌기를 선택하는 경우 CFSTR_PREFERREDDROPFORMAT 끌어서 놓기 바로 가기 메뉴에서 기본 명령을 지정합니다. 사용자는 여전히 메뉴에서 다른 명령을 자유롭게 선택할 수 있습니다.
Microsoft Internet Explorer 4.0 이전에는 애플리케이션이 FILEDESCRIPTOR 구조의 dwFlags 멤버에 FD_LINKUI 설정하여 바로 가기 파일 형식을 전송하고 있음을 표시했습니다. 그런 다음 대상은 IDataObject::GetData잠재적으로 시간이 많이 걸리는 호출을 사용하여 FD_LINKUI 플래그가 설정되었는지 확인해야 했습니다. 이제 바로 가기가 전송되고 있음을 나타내는 기본 방법은 DROPEFFECT_LINK CFSTR_PREFERREDDROPEFFECT 형식 집합을 사용하는 것입니다. 그러나 이전 시스템과 이전 버전과의 호환성을 위해 원본은 여전히 FD_LINKUI 플래그를 설정해야 합니다.
CFSTR_TARGETCLSID
이 형식 식별자는 대상에서 원본에 CLSID를 제공하는 데 사용됩니다. 데이터는 전역 메모리 개체를 포함하는 STGMEDIUM 구조체입니다. 구조체의 hGlobal 멤버는 놓기 대상의 CLSID GUID를 가리킵니다.
이 형식은 주로 개체를 휴지통으로 끌어 삭제할 수 있도록 하는 데 사용됩니다. 휴지통에서 개체를 삭제하면 원본의 IDataObject::SetData 메서드가 휴지통의 CLSID(CLSID_RecycleBin)로 설정된 CFSTR_TARGETCLSID 형식으로 호출됩니다. 그런 다음 원본에서 원래 개체를 삭제할 수 있습니다.
CFSTR_UNTRUSTEDDRAGDROP
이 형식 식별자는 Windows Internet Explorer 및 Windows Shell에서 internet Explorer에서 시작된 끌어서 놓기 작업을 차단하거나 프롬프트하는 메커니즘을 URLACTION_SHELL_ENHANCED_DRAGDROP_SECURITY 플래그와 함께 제공하는 데 사용됩니다.
데이터 개체에 신뢰할 수 없는 데이터가 포함될 수 있도록 지정하기 위해 끌어서 놓기 작업의 원본에 의해 CFSTR_UNTRUSTEDDRAGDROP 추가됩니다. 데이터는 전역 메모리 개체를 포함하는 STGMEDIUM 구조체로 표시됩니다. 구조체의 hGlobal 멤버는 적절한 URL 작업 플래그로 설정된 DWORD 가리키며 PUAF_ENFORCERESTRICTED 플래그를 사용하여 IInternetSecurityManager::P rocessUrlAction 메서드를 통해 정책 검사를 수행합니다.
DragWindow
이 형식은 끌어서 놓기 작업에서 개체의 끌어서 놓기 이미지(창)를 식별하여 시각적 정보를 동적으로 업데이트할 수 있도록 하는 데 사용됩니다. 개체를 놓기 대상 위로 끌면 애플리케이션은 IDropTarget::D ragOver 또는 IDropSource::GiveFeedback 메서드에 대한 응답으로 DROPDESCRIPTION 구조를 업데이트합니다. DROPDESCRIPTION 끌어서 놓기 창의 시각적 개체에 적용할 장식을 나타내는 새 DROPIMAGETYPE 값으로 업데이트됩니다. 예를 들어 파일이 이동되지 않고 복사 중이거나 개체를 해당 위치로 삭제할 수 없음을 나타냅니다. 그러나 개체가 DDWM_UPDATEWINDOW 메시지를 받을 때까지 시각적 개체는 업데이트되지 않습니다. 이 형식은 받는 사람 끌기 창의 HWNDDDWM_UPDATEWINDOW 메시지의 보낸 사람에게 제공합니다.
클립보드 데이터는 TYMED_HGLOBAL형식입니다. HWNDDWORD 표현입니다. 데이터는 Basetsd.h에 정의된 ULongToHandle 함수에 전달되어 64비트 Windows에서 사용할 64비트 HWND 제공할 수 있습니다.
이 형식은 Shlobj.h를 포함할 필요가 없습니다.