第12章 剪贴板
2015-10-26 17:30
183 查看
剪切板的意义:把数据从程序自身传入和传出。
一、使用剪切板几项原则
1、在处理单个消息的过程中使用OpenClipboard 和 CloseClipboard,避免不必要的长期打开剪切板
2、不要把一个锁定的内存句柄传递给剪切板
3、CF_TEXT|CF_UNICODETEXT调用SetClipBoardData之后,不要继续使用该内存
4、CF_BITMAP ,程序把位图传递给剪切板之后不应该继续使用该对象
二、文本粘贴使用
#ifdef UNICODE
#define CF_TCHAR CF_TEXT
#else
#define CF_TCHAR CF_UNICODETEXT
#endif
三、延迟呈现
对于非常大的数据项,如果使用全局内存块,如果一直没有其他程序粘贴走,这样就造成了内存浪费,所以要采用延迟呈现的方法。
1、“复制”:SetClipboardData(CF_XXX,NULL);
2、另外一个程序调用GetClipboardData,Windows给你的窗口过程发送WM_READERFORMAT消息
3、另外一个程序调用EmptyClipBoard,,Windows给你的窗口过程发送WM_DESTROYFORMAT,该消息指出不在需要用于建立剪切板数据的信息了
4、如果你的程序还是剪切板所有者,当你关闭窗口时,Windows给你的窗口过程发送WM_RENDERALLFORMAT,此时你打开剪切板,然后清除它,然后申请全局内存,然后对每种格式SetClipBoardData,接着Windows给你的窗口过程发送WM_DESTROYFORMAT,WM_DESTROY.
概念:
1、剪切板所有者:把数据放到剪切板里头的最后一个窗口。
四、私有数据类型
1、注册格式RegisterClipBoardFormat
2、其他操作步奏参考CF_TEXT即可
说明:
1、CF_TEXT和CF_UNICODETEXT可以互相转换,CF_BITMAP 和CF_DIB可以互相转换,CF_METAFILEPICT和CF_ENHMETAFILE可以互相转换
2、
一、使用剪切板几项原则
1、在处理单个消息的过程中使用OpenClipboard 和 CloseClipboard,避免不必要的长期打开剪切板
2、不要把一个锁定的内存句柄传递给剪切板
3、CF_TEXT|CF_UNICODETEXT调用SetClipBoardData之后,不要继续使用该内存
4、CF_BITMAP ,程序把位图传递给剪切板之后不应该继续使用该对象
二、文本粘贴使用
#ifdef UNICODE
#define CF_TCHAR CF_TEXT
#else
#define CF_TCHAR CF_UNICODETEXT
#endif
if(IsClipboardFormatAvailable(CF_TCHAR)) { if(OpenClipboard(hDlg)) { HANDLE hGlobla = GetClipboardData(CF_TCHAR); if(hGlobla != NULL) { PTSTR pGlobla = (PTSTR)GlobalLock(hGlobla); SetDlgItemText(hDlg, IDC_EDIT_PASTE,pGlobla); GlobalUnlock(hGlobla); } CloseClipboard(); } }
三、延迟呈现
对于非常大的数据项,如果使用全局内存块,如果一直没有其他程序粘贴走,这样就造成了内存浪费,所以要采用延迟呈现的方法。
1、“复制”:SetClipboardData(CF_XXX,NULL);
2、另外一个程序调用GetClipboardData,Windows给你的窗口过程发送WM_READERFORMAT消息
case WM_RENDERFORMAT: { HGLOBAL hGlobal = ::GlobalAlloc(GMEM_SHARE|GMEM_FIXED|GHND,1024); PTSTR pGlobal = (PTSTR)GlobalLock(hGlobal); ::lstrcpy(pGlobal,TEXT("我们哈哈haha")); GlobalUnlock(hGlobal); SetClipboardData(CF_TCHAR, hGlobal); } break;不要打开剪切板,更不要清除剪切板
3、另外一个程序调用EmptyClipBoard,,Windows给你的窗口过程发送WM_DESTROYFORMAT,该消息指出不在需要用于建立剪切板数据的信息了
4、如果你的程序还是剪切板所有者,当你关闭窗口时,Windows给你的窗口过程发送WM_RENDERALLFORMAT,此时你打开剪切板,然后清除它,然后申请全局内存,然后对每种格式SetClipBoardData,接着Windows给你的窗口过程发送WM_DESTROYFORMAT,WM_DESTROY.
概念:
1、剪切板所有者:把数据放到剪切板里头的最后一个窗口。
四、私有数据类型
1、注册格式RegisterClipBoardFormat
2、其他操作步奏参考CF_TEXT即可
说明:
1、CF_TEXT和CF_UNICODETEXT可以互相转换,CF_BITMAP 和CF_DIB可以互相转换,CF_METAFILEPICT和CF_ENHMETAFILE可以互相转换
2、
相关文章推荐
- Android Studio 导入eclipse libs工程,.aar生成,引用等步骤
- iptables之LOG目标
- 第九周项目一猴子选大王
- 第七周项目6-停车场模拟
- LVM的使用(二)
- SHINE OPENCART 自适应 多用途主题模板 ABC-0021
- Volley
- Web 研发模式演变
- UI基础学习之(三):UITextField
- 二分插入排序和二分查找
- Android ScrollView+ViewPager+ListView一起使用
- C++学习笔记6 - 分支语句和逻辑运算符
- 列正交化-施密特正交化方法
- 常用的API接口,返回JSON格式的服务API接口
- ORACLE NTERVAL 时间表达式
- Ubuntu下配置HHVM最新教程
- 第三周-项目4
- C#学习笔记1
- Linux下安装Erlang编程环境
- Sqoop导mysql库到Hive中com.mysql.jdbc.RowDataDynamic错误解决