case IDM_EDIT_PASTE: OpenClipboard (hwnd) ; //打开剪贴板 if (hGlobal = GetClipboardData (CF_TCHAR)) //获取剪贴板内存句柄 { pGlobal = GlobalLock (hGlobal) ;//锁定句柄,获取内存指针 if (pText) { free (pText) ; pText = NULL ; } pText = malloc (GlobalSize (hGlobal)) ;//复制内存数据 lstrcpy (pText, pGlobal) ; InvalidateRect (hwnd, NULL, TRUE) ; } CloseClipboard () ;//关闭剪贴板 return 0 ; case IDM_EDIT_CUT: case IDM_EDIT_COPY: if (!pText) return 0 ; hGlobal = GlobalAlloc (GHND | GMEM_SHARE, (lstrlen (pText) + 1) * sizeof (TCHAR)) ; pGlobal = GlobalLock (hGlobal) ; lstrcpy (pGlobal, pText) ; GlobalUnlock (hGlobal) ; OpenClipboard (hwnd) ; //打开剪贴板 EmptyClipboard () ; //清空剪贴板 SetClipboardData (CF_TCHAR, hGlobal) ;//设置内存句柄 CloseClipboard () ;//关闭剪贴板 if (LOWORD (wParam) == IDM_EDIT_COPY) return 0 ; // fall through for IDM_EDIT_CUT
一、剪贴板原理:
* 剪贴板里面同一种类型的数据只能保留一个数据项
* 剪贴板里存放的是一个指向复制&剪切内存的句柄。
复制&剪切:
获取指向存放复制&剪切数据的内存的句柄。
打开剪贴板
清空剪贴板
设置内存句柄
关闭剪贴板
粘贴:
打开剪贴板
获取指向存放复制&剪切数据的内存的句柄
锁定句柄,获取内存指针
复制内存数据做相应的处理
关闭剪贴板
二、其他函数:
IsClipboardFormatAvailable() 判断剪贴板里是否由内容。
EnumClipboardFormats //对剪贴板里面存在的每种格式返回一个值
CountClipboardFormats //不同格式的数量
GetClipboardOwner //获取剪贴板所有者