Win32 API. Буфер обмена - Отсроченная запись

ОГЛАВЛЕНИЕ

Отсроченная запись

При размещении формата в буфере обмена, окно может задержать запись данных в этом формате, пока данные не нужны. Чтобы сделать это, прикладная программа может для параметра hData функции SetClipboardData установить НОЛЬ (NULL). Это полезно, если прикладная программа поддерживает несколько форматов буфера обмена, некоторые или все из которых занимают много времени для записи. Передавая дескриптор НОЛЬ (NULL), окно предоставляет сложные форматы буфера обмена только тогда, если и когда они необходимы.

Если окно задерживает запись формата буфера обмена, оно должно быть подготовлено предоставлять формат после запроса до тех пор, пока оно - владелец буфера обмена. Система посылает владельцу буфера обмена сообщение WM_RENDERFORMAT, когда запрос получен для специфического формата, который не был представлен. После приема этого сообщения, окно должно вызвать функцию SetClipboardData, чтобы поместить глобальный дескриптор памяти буфера обмена в запрошенный формат.

Если владелец буфера обмена разрушен и задержал запись некоторых или всех форматов буфера обмена, он принимает сообщение WM_RENDERALLFORMATS. После приема этого сообщения, окно должно поместить правильные дескрипторы памяти в буфер обмена, для всех форматов буфера обмена, которые он обеспечивает. Это гарантирует, что эти оставшиеся форматы будут доступны, после того как владелец буфера обмена будет разрушен.

Прикладная программа не должна открывать буфер обмена перед вызовом SetClipboardData в ответ на сообщение WM_RENDERFORMAT или WM_RENDERALLFORMATS.

Любые форматы буфера обмена, которые не записаны в ответ на сообщение WM_RENDERALLFORMATS, перестают быть доступными для других прикладных программ и больше не перечисляются функциями буфера обмена.