MFC/COM: 防止剪贴板在应用程序关闭后被清除
MFC/COM: Preventing clipboard from being cleared once the application is closed
我遇到了一个问题:一旦我关闭 OLE 剪贴板,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",我将其粘贴到记事本中,然后关闭应用 - 文本仍缓存在剪贴板中。
(2) 应用程序缓存 "hello world" 并且我关闭了应用程序而不将其粘贴到任何地方 - 文本从剪贴板中被丢弃。
因此有一个问题 - 我做错了什么?我还需要在 COleDataSource
对象中设置任何内容吗?
在此先感谢您的帮助。
这是 OLE 剪贴板函数的正常行为。数据在第一次被请求时缓存在全局上下文中。
如果从不请求 OLE 剪贴板数据,它只会从剪贴板中清除。
要防止这种情况,请在退出应用程序时使用 OleFlushClipboard。阅读函数的文档以获取更多信息。
我遇到了一个问题:一旦我关闭 OLE 剪贴板,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",我将其粘贴到记事本中,然后关闭应用 - 文本仍缓存在剪贴板中。
(2) 应用程序缓存 "hello world" 并且我关闭了应用程序而不将其粘贴到任何地方 - 文本从剪贴板中被丢弃。
因此有一个问题 - 我做错了什么?我还需要在 COleDataSource
对象中设置任何内容吗?
在此先感谢您的帮助。
这是 OLE 剪贴板函数的正常行为。数据在第一次被请求时缓存在全局上下文中。
如果从不请求 OLE 剪贴板数据,它只会从剪贴板中清除。
要防止这种情况,请在退出应用程序时使用 OleFlushClipboard。阅读函数的文档以获取更多信息。