龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 软件开发 > VC开发 >

Visual C++剪贴板操作不完全攻略(3)

时间:2009-12-30 15:42来源:未知 作者:admin 点击:
分享到:
四、设置并使用自定义格式 使用RegisterClipboardFormat()函数,可以复制和粘贴任何你需要的数据类型。比如我们有以下一个数据类型: struct MyFormatData { long

  四、设置并使用自定义格式

  使用RegisterClipboardFormat()函数,可以复制和粘贴任何你需要的数据类型。比如我们有以下一个数据类型:

struct MyFormatData
{
long val1;
int val2;
};

  我们要把它复制到剪贴板,可以使用如下的代码:

UINT format = RegisterClipBoardFormat("MY_CUSTOM_FORMAT");
if(OpenClipboard())
{
MyFormatData data;
data.val1 = 100;
data.val2 = 200;
HGLOBAL clipbuffer;
EmptyClipboard();
clipbuffer = GlobalAlloc(GMEM_DDESHARE, sizeof(MyFormatData));
MyFormatData * buffer = (MyFormatData*)GlobalLock(clipbuffer);
//保存到内存
*buffer = data;
//保存到剪贴板
GlobalUnlock(clipbuffer);
SetClipboardData(format,clipbuffer);
CloseClipboard();
}

  读取数据使用以下代码:

UINT format = RegisterClipboardFormat("MY_CUSTOM_FORMAT");
MyFormatData data;
if(Openclipboard())
{
HANDLE hData =GetClipboardData(format);
MyFormatData * buffer = (MyFormatData*)GlobalLock(hData);
data = *buffer;
GlobalUnlock(hData);
CloseClipboard();
}


  五、感知剪贴板内容的改变

  通过Windows消息可以感知剪贴板内容是否发生改变,代码如下:

In your initialization code call:
SetClipboardViewer(); //将我们的程序添加到剪贴板观察链
In your message map add:
ON_MESSAGE(WM_DRAWCLIPBOARD, OnClipChange) //添加Message handle
Which is declared as:
afx_msg void OnClipChange();
Finally implement:
void CDetectClipboardChangeDlg::OnClipChange()
{
CTime time = CTime::GetCurrentTime();
SetDlgItemText(IDC_CHANGED_DATE,time.Format("%a, %b %d, %Y -- %H:%M:%S"));
DisplayClipboardText();
}


  六、自动将数据粘贴到另一应用程序窗口

  只需获得相应窗口的句柄,并发送一个消息就可以了:

  SendMessage(m_hTextWnd, WM_PASTE, 0, 0);

精彩图集

赞助商链接