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 //获取剪贴板所有者