2016-05-22 1 views
1

У меня возникла проблема: Буфер обмена OLE очищается после закрытия моего приложения , в котором хранятся в нем глобальные данные.MFC/COM: Предотвращение очистки буфера обмена после закрытия приложения

Вот что я делаю:

class CMyOleDataSource sealed:public COleDataSource{ 
public: 
    CMyOleDataSource(){ 
     // ctor 
     // - target may inform if paste succeeded 
     DelaySetData(CEditor::cfPasteSucceeded); // global const value 
     // - cache a plain ANSI text 
     char text[]="hello world"; 
     const HANDLE hText=::GlobalAlloc(GMEM_SHARE,::lstrlen(text)+1); // "+1" = null-char 
     ::lstrcpy((LPSTR)::GlobalLock(hText), text); 
     ::GlobalUnlock(hText); 
     CacheGlobalData(CF_TEXT, hText); 
    } 
}; 
... 
COleDataSource *ods=new CMyOleDataSource; // instantiation somewhere in the app 

Два сценария использования:

(1) Кроме того, приложение кэширует «привет мир», я вставить его в блокнот, и закрыть приложение - текст остается в кеше в буфере обмена.

(2) Приложение кэширует «мир привет», и я закрываю приложение, не вставляя его нигде - текст отбрасывается из буфера обмена.

Поэтому вопрос - что я делаю неправильно? Нужно ли еще что-нибудь установить в объекте COleDataSource?

Заранее благодарим за любую помощь.

ответ

1

Это нормальное поведение функций буфера обмена OLE. Данные кэшируются в глобальном контексте, когда они запрашиваются в первый раз.

Если данные буфера обмена OLE никогда не запрашиваются, он просто очищается от буфера обмена.

Чтобы предотвратить это использование OleFlushClipboard после выхода из приложения. Подробнее читайте в документах функции fur.

+0

Спасибо, я думал, что создаю вещи вокруг буфера обмена OLE неправильно :-) – tomascz