系统相关功能开发(九)-剪贴板

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();								// 关闭剪切板
}



猜你喜欢

转载自blog.csdn.net/greless/article/details/77581794
今日推荐