MFC剪切板操作的若干函数
来源:互联网 发布:林则徐 曾国藩 知乎 编辑:程序博客网 时间:2024/06/05 20:24
//MFC剪切板操作的标准模式源码:
void CMFCClipboardDlg::OnBnClickedCopyButton() { ///////////////////////////////////////////////////////////////////////// // 1. Get text from edit control. // CString strData; m_editSource.GetWindowTextW(strData); int len = strData.GetLength(); if (len <= 0) return; ///////////////////////////////////////////////////////////////////////// // 2. Open and empty clipboard. (OpenClipboard, EmptyClipboard) // if (!OpenClipboard()) return; EmptyClipboard(); ///////////////////////////////////////////////////////////////////////// // 3. Create global buffer. (GlobalAlloc) // HGLOBAL hglbCopy = GlobalAlloc(GMEM_MOVEABLE, (len + 1)); if (hglbCopy == NULL) { CloseClipboard(); return; } ///////////////////////////////////////////////////////////////////////// // 4. Lock the buffer. (GlobalLock) // char* lptstrCopy = (char*)GlobalLock(hglbCopy); ///////////////////////////////////////////////////////////////////////// // 5. Copy text to the buffer. (strcpy) // strcpy(lptstrCopy, (CStringA)strData); ///////////////////////////////////////////////////////////////////////// // 6. Unlock the buffer. (GlobalUnlock) // GlobalUnlock(hglbCopy); ///////////////////////////////////////////////////////////////////////// // 7. Set buffer data to clipboard. (SetClipboardData) // SetClipboardData(CF_TEXT, hglbCopy); ///////////////////////////////////////////////////////////////////////// // 8. Close clipboard. (CloseClipboard) // CloseClipboard(); }
其中的几个函数的解释如下:
调用GlobalAlloc函数分配一块内存,该函数会返回分配的内存句柄。
调用GlobalLock函数锁定内存块,该函数接受一个内存句柄作为参数,然后返回一个指向被锁定的内存块的指针。您可以用该指针来读写内存。
调用GlobalUnlock函数来解锁先前被锁定的内存,该函数使得指向内存块的指针无效。
调用GlobalFree函数来释放内存块。您必须传给该函数一个内存句柄。
GlobalAlloc
函数原型:
GlobalAlloc(UINT uFLAG,DWORD dwBytes);
说明
分配一个全局内存块
返回值
Long,返回全局内存句柄。零表示失败。会设置GetLastError
参数表
参数 类型及说明
uFlags Long,对分配的内存类型进行定义的常数标志,如下所示:
GMEM_FIXED 分配一个固定内存块
GMEM_MOVEABLE 分配一个可移动内存块
GMEM_DISCARDABLE 分配一个可丢弃内存块
GMEM_NOCOMPACT 堆在这个函数调用期间不进行累积
GMEM_NODISCARD 函数调用期间不丢弃任何内存块
GMEM_ZEROINIT 新分配的内存块全部初始化成零
dwBytes Long,要分配的字符数
注解
如指定了 GMEM_FIXED,那么返回值就是要使用的实际内存地址即指针(GlobalLock 会返回同样的值)——所以在使用固定内存块的时候不需要执行一个 GlobalLock/GlobalUnlock 操作
由于 Win32 采用了高级的内存管理方案,所以使用可移动的内存块并没有什么好处
用这个函数分配的内存块允许在8位边界以内
GlobalLock
函数功能描述:锁定一个全局的内存对象,返回指向该对象的第一个字节的指针
函数原型:
LPVOID GlobalLock( HGLOBAL hMem )
参数:
hMem:全局内存对象的句柄。这个句柄是通过GlobalAlloc或GlobalReAlloc来得到的
返回值:
调用成功,返回指向该对象的第一个字节的指针
调用失败,返回NULL,可以用GetLastError来获得出错信息
注意:
调用过GlobalLock锁定一块内存区后,一定要调用GlobalUnlock来解锁。
GlobalUnlock
函数功能描述:解除被锁定的全局内存对象
函数原型:BOOL GlobalUnlock( HGLOBAL hMem );
参数:hMem:全局内存对象的句柄
返回值:
非零值,指定的内存对象仍处于被锁定状态
0,函数执行出错,可以用GetLastError来获得出错信息,如果返回NO_ERROR,则表示内存对象已经解锁了
注意:这个函数实际上是将内存对象的锁定计数器减一,如果计数器不为0,则表示执行过多个GlobalLock函数来对这个内存对象加锁,需要对应数目的GlobalUnlock函数来解锁。
如果通过GetLastError函数返回错误码为ERROR_NOT_LOCKED,则表示未加锁或已经解锁。
- MFC剪切板操作的若干函数
- MFC剪切板操作的若干函数(转)
- MFC中对于剪切板的简单操作
- Delphi的windows剪切板操作函数
- DataGridView 剪切板的操作
- 剪切板的操作
- QClipboard 剪切板的操作
- MFC之剪切板(Clipboard)操作
- 对于剪切板的一些操作
- Java中剪切板的操作
- Java中剪切板的操作
- CListBox的若干操作
- windows2003的若干操作
- 容器的若干操作!!!
- 单链表的若干操作
- BigDecimal的若干操作
- PHP中数组排序,其它操作的若干个函数
- MFC中剪切板的使用 把数据拷贝到剪切板和从剪切板中读数据
- 基于Android的SDIO-WIFI移植(2)
- vector容器和iterator迭代器
- mybatis 无效列类型
- IDR(刷新帧)与I帧的一些知识点
- VMware tools安装使用
- MFC剪切板操作的若干函数
- 八款开源 Android 游戏引擎 (巨好的资源)
- 登录PLSQL/Developer提示 客户端和服务端的字符编码设置不一致
- OMA DM最佳实践之四:参数配置
- java.lang.IllegalAccessException: access to class not allowed 错误解决方法
- 定时器alarmmanager和timer
- hdu1423
- PLSQL Developer常用设置及快捷键
- dojo学习笔记一