WEB开发网
开发学院软件开发VC Visual C++剪贴板操作不完全攻略 阅读

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

 2010-05-27 20:37:28 来源:WEB开发网   
核心提示:四、设置并使用自定义格式使用RegisterClipboardFormat()函数,可以复制和粘贴任何你需要的数据类型,Visual C++剪贴板操作不完全攻略(3),比如我们有以下一个数据类型:struct MyFormatData{long val1;int val2;};我们要把它复制到剪贴板,可以使用如下的代码

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

使用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);

上一页  1 2 3 

Tags:Visual 剪贴板 操作

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接