MFC窗口拷屏代码
sshong 发表于2008年5月14日 10:43:00 更新于2008年5月22日 15:57:00
自己写的总结,错误之处,还望指出
要领如下 sshong 08.05.14
1.首先是获取窗口客户区的DC
2.产生这个DC对应的设备上下文内存(因为直接操作源DC会有闪烁,而先搞一个统一的DC到内存中,最后再统一copy到源DC)
3.产生这个DC对应的位图(大小一致,为何全黑还不得而知)
4.将这个位图选中到设备上下文内存中,并保留老的位图
5.根据源DC拷贝位图到内存设备上下文中,没有这一句位图还是黑的,估计选入之后,对内存设备上下文的操作会影响到选入的位图
6.选入老的位图,因为被选入的gdi对象无法被销毁,而出栈时需要销毁这个新位图,所以选出以便被销毁
7.此时新位图已经拷贝好客户区了,可以设定剪贴板

void CCaptureScreenDlg::OnBnClickedButton()
{
    //
    CDC   MemDc;//   屏幕和内存设备描述表  
    CClientDC ScrDc(this);  
    CBitmap   ScrBmp;
    CRect   rect;  
    GetClientRect(&rect);  
    MemDc.CreateCompatibleDC(&ScrDc);  
    ScrBmp.CreateCompatibleBitmap(&ScrDc,rect.Width(), rect.Height());  
    //屏幕分辨率为800x600  
    CBitmap*   pOld=MemDc.SelectObject(&ScrBmp);
    MemDc.BitBlt(0,0,rect.Width(), rect.Height(),&ScrDc,0,0,SRCCOPY);//拷屏  
    MemDc.SelectObject(pOld);    
    //输出到剪贴板
    OpenClipboard();
    EmptyClipboard();
    SetClipboardData(CF_BITMAP, ScrBmp.GetSafeHandle());
    CloseClipboard();
}
标签:无分类:C++阅读:4109
评论
shineleeever2008年5月22日 15:20
鼓掌~~沙发~~~
添加评论
您的大名,限长10汉字,20英文(*)
电子信箱(*)
您的网站
正文,限长500汉字,1000英文(*)
验证码(*) 单击刷新验证码
联系我
博客订阅