您的位置:首页 > 编程语言 > C语言/C++

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

2007-12-07 16:21 435 查看
正文
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);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: