Операционная система Microsoft Windows 3.1 для программиста. Дополнительные главы


Выполнение отложенной записи - часть 2


Эта проблема имеет простое решение. Перед завершением работы приложение, объявившее в Clipboard данные, но не предоставившее их, получит от Windows сообщение WM_RENDERALLFORMATS. В ответ на это сообщение оно должно выполнить реальную запись данных.

Вот возможная реализация обработчика сообщения WM_RENDERALLFORMATS:

case WM_RENDERALLFORMATS: { OpenClipboard(hwnd); EmptyClipboard(); SendMessage(hwnd, WM_RENDERFORMAT, CF_TEXT, 0L); SendMessage(hwnd, WM_RENDERFORMAT, CF_BITMAP, 0L); SendMessage(hwnd, WM_RENDERFORMAT, CF_PALETTE, 0L); CloseClipboard(); return 0; }

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

Возможна такая ситуация, когда приложение выполнило отложенную запись и затем предоставила реальные данные, заказав для их хранения блок глобальной памяти, а другое приложение вскоре после этого очистило Clipboard и записало туда свои данные. Теперь первое приложение хранит в глобальной памяти никому не нужные данные, которые могут занимать много места.

В указанной ситуации ваше приложение получит сообщение WM_DESTROYCLIPBOARD. Обработчик этого сообщения может уничтожить ненужный блок памяти.




Начало  Назад  Вперед



Книжный магазин