1.列举剪贴板中数据类型
void CClicpBoardSampleDlg::OnButtonEnumClformat() // 列举剪贴板中数据类型
{
if(!OpenClipboard()) // 打开剪切板
{
WriteLog("打开剪切板时发生错误"); // 输出错误信息,并
return; // 返回
}
WriteLog("剪切板中支持的数据类型有:"); // 输出提示信息
UINT uiFormat = EnumClipboardFormats(0); // 开始枚举剪切板数据类型
TCHAR szName[MAX_PATH]; // 定义剪切板名称变量
while(uiFormat) // 依次循环处理剪切板数据格式
{
if (uiFormat < 0xc000) // 如果数据类型小于0xc000,则调用GlobalGetAtomName
GlobalGetAtomName((ATOM)uiFormat, szName, MAX_PATH);
else
GetClipboardFormatName(uiFormat, szName, MAX_PATH); // 否则,调用GetClipboardFormatName
WriteLog("%d=%s", uiFormat, szName); // 输出剪切板格式
uiFormat = EnumClipboardFormats(uiFormat); // 枚举下一个格式
}
CloseClipboard(); // 关闭剪切板
}
2.启动监视剪贴板
void CClicpBoardSampleDlg::OnButtonMonitor() // 启动监视剪贴板
{
hNextWnd = SetClipboardViewer(); // 将对话框句柄加入剪切板监视列表
if( hNextWnd!= NULL) WriteLog("开始监视剪切板复制的内容"); // 输出提示信息
}
LRESULT CClicpBoardSampleDlg::WindowProc(UINT message, WPARAM wParam, LPARAM lParam) // 消息处理函数
{
if(message == WM_DRAWCLIPBOARD) // 如果是剪切板复制消息
WriteLog("剪切板内容发生变化了"); // 输出提示信息
return CDialog::WindowProc(message, wParam, lParam); // 调用基类处理函数
}
3.停止监视剪贴板
void CClicpBoardSampleDlg::OnButtonCancelMonitor() // 停止监视剪贴板
{
if( ChangeClipboardChain(hNextWnd)) // 将对话框句柄从剪切板监视列表中移除
{
hNextWnd = NULL; // 重置监视句柄
WriteLog("结束监视剪切板复制的内容"); // 输出提示信息
}
}
4.设置剪切板数据
// 21.9.3(OK)
void CClicpBoardSampleDlg::OnButtonSetClicp() // 设置剪切板数据
{
LPSTR pBuf = NULL; // 定义数据区
if (!(pBuf = (LPSTR)GlobalAlloc(GMEM_DDESHARE, 50 * sizeof(TCHAR)))) return; // 初始化数据区
if (!OpenClipboard()) // 打开剪切板
{
WriteLog("打开剪切板时发生错误"); // 输出错误信息,并
return; // 返回
}
EmptyClipboard(); // 清空剪切板
CString info;
info.Format("通过剪切板传递全局数据iIndex=%d", iIndex); // 输出提示信息
iIndex++; // 计数值自增一
strcpy(pBuf, info);
if (SetClipboardData(CF_TEXT, pBuf)) // 设置剪切板内容
WriteLog("设置剪切板内容=%s", info); // 输出成功提示信息
else
WriteLog("设置剪切板内容是失败"); // 输出错误提示信息
CloseClipboard(); // 关闭剪切板
}
5.获取剪切板数据
void CClicpBoardSampleDlg::OnButtonGetClicp() // 获取剪切板数据
{
LPSTR pBuf;
if (!OpenClipboard()) // 打开剪切板
{
WriteLog("打开剪切板时发生错误"); // 输出错误信息,并
return; // 返回
}
HGLOBAL hGlobal = GetClipboardData(CF_TEXT); // 获取剪切板中CF_TEXT数据
pBuf = (LPSTR)GlobalLock(hGlobal); // 锁定数据区
WriteLog("获取剪切板内容=%s", pBuf); // 输出获取的剪切板内容
GlobalUnlock(hGlobal); // 解锁数据区
CloseClipboard(); // 关闭剪切板
}