概述
正文
boarddata(cf_bitmap,junk->m_hobject);
closeclipboard();
delete junk;
}
下面的代码显示了如何从剪贴板上获得位图数据:
if(openclipboard())
{
//获得剪贴板数据
hbitmap handle = (hbitmap)getclipboarddata(cf_bitmap);
cbitmap * bm = cbitmap::fromhandle(handle);
cclientdc cdc(this);
cdc dc;
dc.createcompatibledc(&cdc);
dc.selectobject(bm);
cdc.bitblt(0,0,200,200,&dc,0,0,srccopy);
closeclipboard();
}
四、设置并使用自定义格式
使用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);
最后
以上就是贤惠金鱼为你收集整理的visual c++剪贴板操作不完全攻略的全部内容,希望文章能够帮你解决visual c++剪贴板操作不完全攻略所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复