클립보드 형식
창은 각각 다른 클립보드 형식으로 동일한 정보를 나타내는 둘 이상의 개체를 클립보드에 배치할 수 있습니다. 사용자는 클립보드의 개체에 사용되는 클립보드 형식을 인식할 필요가 없습니다.
다음 topics 클립보드 형식에 대해 설명합니다.
표준 클립보드 형식
시스템에서 정의한 클립보드 형식을 표준 클립보드 형식이라고 합니다. 이러한 클립보드 형식은 표준 클립보드 형식으로 설명됩니다.
등록된 클립보드 형식
대부분의 애플리케이션은 정보 손실 없이 표준 클립보드 형식으로 변환할 수 없는 데이터로 작동합니다. 이러한 애플리케이션은 자체 클립보드 형식을 만들 수 있습니다. 애플리케이션에서 정의한 클립보드 형식을 등록된 클립보드 형식이라고 합니다. 예를 들어, 워드 프로세싱 애플리케이션이 표준 텍스트 형식을 사용하여 서식이 지정된 텍스트를 클립보드에 복사하면 서식 정보가 손실됩니다. 해결 방법은 RTF(서식 있는 텍스트 형식)와 같은 새 클립보드 형식을 등록하는 것입니다.
새 클립보드 형식을 등록하려면 RegisterClipboardFormat 함수를 사용합니다. 이 함수는 형식의 이름을 사용하고 등록된 클립보드 형식을 나타내는 부호 없는 정수 값을 반환합니다. 등록된 클립보드 형식의 이름을 검색하려면 부호 없는 정수 값을 GetClipboardFormatName 함수에 전달합니다.
둘 이상의 애플리케이션이 정확히 동일한 이름의 클립보드 형식을 등록하는 경우 클립보드 형식은 한 번만 등록됩니다. RegisterClipboardFormat 함수에 대한 두 호출 모두 동일한 값을 반환합니다. 이러한 방식으로 두 애플리케이션은 등록된 클립보드 형식을 사용하여 데이터를 공유할 수 있습니다.
프라이빗 클립보드 형식
애플리케이션은 CF_PRIVATELAST 통해CF_PRIVATEFIRST 범위의 값을 정의하여 프라이빗 클립보드 형식을 식별할 수 있습니다. 애플리케이션은 시스템에 등록할 필요가 없는 애플리케이션 정의 데이터 형식에 프라이빗 클립보드 형식을 사용할 수 있습니다.
프라이빗 클립보드 형식과 연결된 데이터 핸들은 시스템에서 자동으로 해제되지 않습니다. 창에서 프라이빗 클립보드 형식을 사용하는 경우 WM_DESTROYCLIPBOARD 메시지를 사용하여 더 이상 필요하지 않은 관련 리소스를 해제할 수 있습니다.
WM_DESTROYCLIPBOARD 메시지에 대한 자세한 내용은 클립보드 소유권을 참조하세요.
애플리케이션은 CF_GDIOBJLAST 통해CF_GDIOBJFIRST 범위에서 프라이빗 형식을 정의하여 데이터 핸들을 클립보드에 배치할 수 있습니다. 이 범위의 값을 사용하는 경우 데이터 핸들은 GDI(Windows Graphics Device Interface) 개체에 대한 핸들이 아니라 GMEM_MOVEABLE 플래그를 사용하여 GlobalAlloc 함수에서 할당한 핸들입니다. 클립보드가 비워지면 시스템은 GlobalFree 함수를 사용하여 개체를 자동으로 삭제합니다.
여러 클립보드 형식
창은 클립보드에 둘 이상의 클립보드 개체를 배치할 수 있으며, 각 개체는 서로 다른 클립보드 형식으로 동일한 정보를 나타냅니다. 클립보드에 정보를 배치할 때 창은 가능한 한 많은 형식으로 데이터를 제공해야 합니다. 현재 클립보드에서 사용되는 형식 수를 확인하려면 CountClipboardFormats 함수를 호출합니다 .
가장 많은 정보를 포함하는 클립보드 형식을 먼저 클립보드에 배치한 다음 덜 설명적인 형식을 지정해야 합니다. 클립보드에서 정보를 붙여넣는 창은 일반적으로 인식되는 첫 번째 형식으로 클립보드 개체를 검색합니다. 클립보드 형식은 클립보드에 배치되는 순서대로 열거되므로 인식된 첫 번째 형식도 가장 설명적입니다.
예를 들어 사용자가 워드 프로세싱 문서에서 스타일이 지정된 텍스트를 복사한다고 가정해 보겠습니다. 문서가 포함된 창은 먼저 RTF와 같은 등록된 형식으로 클립보드에 데이터를 배치할 수 있습니다. 그 후 창은 텍스트(CF_TEXT)와 같이 덜 설명적인 형식으로 클립보드에 데이터를 배치합니다.
클립보드의 내용을 다른 창에 붙여넣으면 창에서 인식되는 가장 설명이 많은 형식으로 데이터를 검색합니다. 창에서 RTF를 인식하면 해당 데이터가 문서에 붙여넣습니다. 그렇지 않으면 텍스트 데이터가 문서에 붙여넣고 서식 정보가 손실됩니다.
합성된 클립보드 형식
시스템은 특정 클립보드 형식 간에 데이터를 암시적으로 변환합니다. 창이 클립보드에 없는 형식으로 데이터를 요청하는 경우 시스템은 사용 가능한 형식을 요청된 형식으로 변환합니다. 시스템은 다음 표에 표시된 대로 데이터를 변환할 수 있습니다.
클립보드 형식 | 변환 형식 |
---|---|
CF_BITMAP | CF_DIB |
CF_BITMAP | CF_DIBV5 |
CF_DIB | CF_BITMAP |
CF_DIB | CF_PALETTE |
CF_DIB | CF_DIBV5 |
CF_DIBV5 | CF_BITMAP |
CF_DIBV5 | CF_DIB |
CF_DIBV5 | CF_PALETTE |
CF_ENHMETAFILE | CF_METAFILEPICT |
CF_METAFILEPICT | CF_ENHMETAFILE |
CF_OEMTEXT | CF_TEXT |
CF_OEMTEXT | CF_UNICODETEXT |
CF_TEXT | CF_OEMTEXT |
CF_TEXT | CF_UNICODETEXT |
CF_UNICODETEXT | CF_OEMTEXT |
CF_UNICODETEXT | CF_TEXT |
시스템에서 특정 클립보드 형식에 대한 자동 형식 변환을 제공하는 경우 변환 형식을 클립보드에 배치하는 것은 이점이 없습니다.
시스템에서 특정 클립보드 형식에 대한 자동 형식 변환을 제공하고 EnumClipboardFormats 를 호출하여 클립보드 데이터 형식을 열거하는 경우 시스템은 먼저 클립보드에 있는 형식을 열거한 다음 변환할 수 있는 형식을 열거합니다.
비트맵을 복사할 때 클립보드에 CF_DIB 또는 CF_DIBV5 형식을 배치하는 것이 가장 좋습니다. 이는 디바이스 종속 비트맵(CF_BITMAP)의 색이 시스템 팔레트를 기준으로 하므로 비트맵을 붙여넣기 전에 변경될 수 있습니다. CF_DIB 또는 CF_DIBV5 형식이 클립보드에 있고 창이 CF_BITMAP 형식을 요청하는 경우 시스템은 현재 색상표를 사용하여 디바이스 독립적 비트맵(DIB)을 렌더링합니다.
CF_DIB 않고 클립보드에 CF_BITMAP 형식을 배치하면 클립보드가 닫히자마자 시스템에서 CF_DIB 또는 CF_DIBV5 클립보드 형식을 렌더링합니다. 이렇게 하면 올바른 색상표가 DIB를 생성하는 데 사용됩니다. 클립보드에 비트맵 색 공간 정보를 사용하여 CF_DIBV5 형식을 배치하면 시스템에서 CF_DIB 또는 CF_DIBV5 요청될 때 비트맵 색 공간에서 sRGB 색 공간으로 비트맵 비트를 변환합니다. 클립보드에 색 공간 정보가 없을 때 CF_DIBV5 요청된 경우 시스템은 BITMAPV5HEADER 구조체에 sRGB 색 공간 정보를 반환합니다. 다른 클립보드 형식 간의 변환은 요청 시 발생합니다.
클립보드에 CF_PALETTE 형식의 데이터가 포함된 경우 애플리케이션은 SelectPalette 및 RealizePalette 함수를 사용하여 해당 논리 팔레트에 대해 클립보드의 다른 데이터를 인식해야 합니다.
메타파일에는 CF_ENHMETAFILE 및CF_METAFILEPICT 두 가지 클립보드 형식이 있습니다. Windows 메타파 일의 향상된 메타파일 및 CF_METAFILEPICT CF_ENHMETAFILE 지정합니다.
클라우드 클립보드 및 클립보드 기록 형식
일부 버전의 Windows에는 최근 클립보드 데이터 항목의 기록을 유지하고 사용자의 디바이스 간에 동기화할 수 있는 클라우드 클립보드가 포함되어 있습니다. 애플리케이션이 클립보드에 배치하는 데이터를 클립보드 기록에 포함하거나 다른 장치와 동기화하지 않으려면 애플리케이션에서 Windows 시스템에 이름이 알려진 등록된 특정 클립보드 형식 으로 데이터를 배치하여 이 동작을 제어할 수 있습니다.
- ExcludeClipboardContentFromMonitorProcessing : 모든 클립보드 형식이 클립보드 기록에 포함되거나 사용자의 다른 디바이스와 동기화되지 않도록 클립보드에 데이터를 이 형식으로 배치합니다.
- CanIncludeInClipboardHistory : 모든 클립보드 형식이 클립보드 기록에 포함되지 않도록 클립보드에 직렬화된 DWORD 값 0을 배치하거나 클립보드 기록에 클립보드 항목이 포함되도록 명시적으로 요청하기 위해 하나의 값을 배치합니다. 사용자의 다른 디바이스에 대한 동기화에는 영향을 주지 않습니다.
- CanUploadToCloudClipboard : 모든 클립보드 형식이 사용자의 다른 디바이스와 동기화되지 않도록 클립보드에 직렬화된 DWORD 값을 0으로 배치하거나 대신 값을 배치하여 클립보드 항목을 다른 디바이스에 동기화하도록 명시적으로 요청합니다. 로컬 디바이스의 클립보드 기록에는 영향을 주지 않습니다.
등록된 다른 클립보드 형식과 마찬가지로 RegisterClipboardFormat 함수를 사용하여 위의 3개 형식을 각각 식별하는 부호 없는 정수 값을 가져와야 합니다.