MFC / COM:应用程序关闭后,防止清除剪贴板

时间:2016-05-22 08:11:36

标签: caching mfc com clipboard

我遇到了问题:关闭my后,OLE剪贴板会被清除 将全局数据缓存到其中的应用程序。

这就是我正在做的事情:

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)应用程序缓存" hello world",我将其粘贴到NotePad中,然后关闭应用程序 - 文本仍然缓存在剪贴板中。

(2)应用程序缓存" hello world"然后关闭应用程序而不将其粘贴到任何地方 - 文本将从剪贴板中丢弃。

因此提出一个问题 - 我做错了什么?我是否需要在COleDataSource对象中设置任何内容?

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

这是OLE剪贴板函数的正常行为。首次请求时,数据将缓存在全局上下文中。

如果从未请求过OLE剪贴板数据,则只需从剪贴板中清除它。

为了防止在退出应用程序时使用OleFlushClipboard。阅读函数文档以获取更多信息。