剪贴板和全局内存块
来源:互联网 发布:家具衣柜下料尺寸算法 编辑:程序博客网 时间:2024/06/07 19:05
全局内存块:
剪贴板可以用于不同进程之间进行数据交换的一片内存空间(malloc 所分配的内存只适用当前进程),所以需要全局内存块(GlobalAlloc分配):
HGLOBAL GlobalAlloc( UINT, SIZE_T);
第一个参数:指定内存块的类型
第二个参数:分配内存块的空间大小
函数的返回值有两种,一种是 返回句柄(GMEM_MOVEABLE 指内存块可移动,内存地址不确定,所以以句柄形式记录)或 返回内存块地址(GMEM_FIXED 指内存块不可移
动,为确定的内存地址)
为防止内存过于零碎,第一个参数一般设置为 GMEM_MOVEABLE(可以把多块零碎的内存块合并为一块大的内存块) | GMEM_ZEROINIT(初始化内存块为 0)
HGLOBAL hGlobal;
hGlobal = GlobalAlloc( GMEM_MOVEABLE | GMEM_ZEROINIT, SIZE_T);
全局内存块的使用:
如果全局内存块的类型是移动的(GMEM_MOVEABLE),调用 GlobalLock( HGLOBAL) 锁定内存块(句柄中储存内存块的地址,内存块锁定计算器 +1 ,内存块不可移动)
在使用完全局内存块后,调用 GlobalUnlock( HGLOBAL) 解锁内存块(内存块锁定计算器 -1,只有当锁定为 0 时,内存块才能移动)
int *p;
HGLOBAL hGlobal
hGlobal = GlobalAlloc( GMEM_MOVEABLE | GMEM_ZEROINIT, SIZE_T);
p = (int *)GlobalLock( hGlobal); // 锁定内存块,p 指向 全局内存块的地址
【
剪贴板的调用
】
GlobalUnlock( hGlobal); //解锁内存块
Globalfree( HGLOBAL);
剪贴板的使用:
往剪贴板输入数据
OpenClipboard( HWND); // 打开剪贴板
EmptyClipboard(); //清空剪贴板
SetClipboardData( UINT, HGLOBAL); //指定剪贴板的类型,把全局内存块地址绑定到剪贴板上(应该类似于把剪贴板指针指向内存块地址)
CloseClipboard(); //关闭剪贴板
SetClipboard 第一个参数指定剪贴板的数据类型:
CF_TEXT:以 NULL 结尾的 ANSIC 字符集的字符串
CF_UNICODETEXT:Unicode 字符集的字符串,双字节 NULL 结尾
CF_DIB:设备无关位图
CF_WAVE:波形声像文件
............
提取剪贴板数据
OpenClipboard( HWND);
hGlobal = GetClipboardData( UINT); //类似于把 hGlobal 指向剪贴板指针所指的内存地址
CloseClipboard();
剪贴板的使用规则:
1、数据提取或输入必须在 OpenClipboard 和 CloseClipboard 之间进行
2、内存块一旦被绑定到剪贴板时,不可再更该内存块的数据
- 剪贴板和全局内存块
- OLE剪贴板和普通剪贴板
- 全局内存
- 全局内存
- 全局内存
- [Linux内存]页缓存和块缓存
- Block-栈,堆,全局块
- 缓存融合和全局内存服务——RAC概念
- u-boot的内存分布和全局数据结构
- 缓存融合和全局内存服务——RAC概念
- u-boot的内存分布和全局数据结构
- u-boot的内存分布和全局数据结构
- u-boot的内存分布和全局数据结构 .
- matlab mex中C++内存全局共享和持久化
- u-boot的内存分布和全局数据结构
- 【open】fans-rt系统全局内存管理和全局堆管理优化点
- 全局内存性能测试
- 全局内存分配器:tcmalloc_sys_alloc
- CAN总线之一
- hdu5253 连接的管道 最小生成树水题
- 欢迎使用CSDN-markdown编辑器
- JNI的使用
- GCD Again HDU杭电1787
- 剪贴板和全局内存块
- firefox os及ubuntu日常使用
- java使用JDBC连接数据库的几种方式
- 通过程序将Visio文档 转换为html网页
- POJ 1006
- 命令模式
- [推荐算法]基于用户的协同过滤算法
- 南邮 OJ 1215 集合划分问题
- iOS开发之沙盒机制(SandBox)