2016-05-22 14 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 

2つのシナリオ:

は、ここで私がやっているものだ(1)アプリのキャッシュの "Hello World"、私はメモ帳に貼り付けて、アプリを閉じ

- テキストはクリップボードにキャッシュされたままです。

(2)アプリケーションは「hello world」をキャッシュし、どこにでも貼り付けることなくアプリを閉じる - テキストはクリップボードから破棄されます。

したがって質問 - 私は間違っていますか? COleDataSourceオブジェクトに何かを設定する必要はありますか?

ご協力いただきありがとうございます。

答えて

1

これはOLEクリップボード機能の通常の動作です。データは、初めて要求されたときにグローバルコンテキストでキャッシュされます。

OLEクリップボードのデータが要求されない場合、クリップボードからクリアされます。

OleFlushClipboardこのアプリケーションが終了すると、この使用を防止します。関数furの詳細なドキュメントを読んでください。

+0

ありがとう、私は間違った方法でOLEクリップボードの周りに物事をインスタンス化していると思った:-) – tomascz

関連する問題