visual c++剪贴板操作不完全攻略

正文
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); 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值