截屏程序总结-微信小程序 截屏
截屏程序总结 截屏程序总结
1.用到的几个函数和类
1.1HDCGetDC(HWNDhWnd);获得窗口DC句柄,参数为NULL时返回桌面DC句柄.
1.2CDC::FromHandle(HDCHdc),将DC句柄转换为DC指针,原型:staticCDC*PASCAL
FromHandle(HDChDC);
因此可以这样获得桌面DC的CDC*指针对象:
CDC*pDeskDC=CDC::FromHandle(::GetDC(NULL));
也可以这样获得桌面DC的CDC*指针对象:
GetDesktopWindow()->GetDC()
获得CDC*指针对象的目的在于,创建兼容DC,在里面放置BITMAP对象,相当于画画的纸,再利用兼容DC在其上画图,在这里是复制桌面DC的图像.而创建兼容DC的函数原型是:BOOLCreateCompatibleDC(CDC*pDC);
其参数为CDC*,所以要先想办法得到桌面的DC指针。
1
CWnd::GetDC()返回的是CDC*
GetDC(HWNDhWnd)返回的是HDC
2.创建兼容DC:
memDC.CreateCompatibleDC(pDC);
3
.创建兼容位图,并选入兼容DC。创建兼容位图的方法
CBitmapmBmp,*pOldBmp=NULL;
CBitmap.CreateCompatibleBitmap(pDC,screenWidth,scree
nHeight);
选入兼容DC:
pOldBmp=memDC.SelectObject(mBmp);
4.兼容DC与桌面DC相联接,将DC上的内容复制到兼
容位图中。
memDC.BitBlt(0,0,screenWidth,screenHeight,pDC,0,0,SRC
COPY);
5.利用CImage对象,保存位图
CImageimg;
img.Attach(mBmp);
img.Save(lpszSavePath);
6.记得释放DC
2
::ReleaseDC(NULL,pDeskDC->m_hDC);
或者:
ReleaseDC(pDeskDC)
7.在创建兼容位图前,如果CBitmap对象不为NULL,先
将其mBmp.Detach(),否则出错。
8.橡皮筋类的使用:
8.1在使用橡皮筋的窗口类中定义橡皮筋对象:
CRectTrackerm_RectTracter;
8.2在使用其窗口的初始化函数中:
m_RectTracter.m_nStyle=CRectTracker::dottedLine|CRect
Tracker::resizeOutside;m_RectTracter.m_rect.SetRect(0,0,0,
0);
该代码分别是设置橡皮筋样式和矩形大小
8.3在OnPaint函数中,绘制橡皮筋
CDC*pDlgDC=GetDC();
m_RectTracter.Draw(pDlgDC);
ReleaseDC(pDlgDC);
8.4在OnLButtonDown函数中写入如下代码:
if(m_RectTracter.HitTest(point)==CRectTracker::hitNothin
g)
3
{
m_RectTracter.TrackRubberBand(this,point,TRUE);
}
else
{
m_RectTracter.Track(this,point,TRUE);
m_RectTracter.m_rect.NormalizeRect();
}
Invalidate();
CDialogEx::OnLButtonDown(nFlags,point);
其中m_RectTracter.HitTest(point)是对当前点位置检查。
m_RectTracter.TrackRubberBand(this,point,TRUE);此成
员函数用来进行“橡皮筋似”选择。
m_RectTracter.Track(this,point,TRUE)此成员函数显示用于
改变矩形大小的用户界面。
m_RectTracter.m_rect.NormalizeRect();对矩形坐标正常化。
该段代码在OnLButtonDown中,相对固定,可在其它程序
中少量修改后使用。
8.5在OnSetCursor函数中:
m_RectTracter.SetCursor(this,nHitTest);
returnTRUE;
9(附整屏截屏代码:
4
intnWidth=GetSystemMetrics(SM_CXSCREEN);
intnHeight=GetSystemMetrics(SM_CYSCREEN);
CDC*pDeskDC=GetDesktopWindow()->GetDC();
CDCmemDC;
memDC.CreateCompatibleDC(NULL);
CBitmap*pOldBmp,mBmp;
mBmp.CreateCompatibleBitmap(GetDC(),nWidth,nHeight);
pOldBmp=(CBitmap*)memDC.SelectObject(mBmp);
ShowWindow(SW_HIDE);
Sleep(100);
memDC.BitBlt(0,0,nWidth,nHeight,pDeskDC,0,0,SRCCOPY);
Sleep(100);
ShowWindow(SW_SHOW);
CImageimg;
img.Attach(mBmp);
img.Save(_T("D:\\789.png"));
ReleaseDC(pDeskDC);
ReleaseDC(memDC);
5
截屏程序总结:微信小程序 截屏
截屏程序总结 vfp 截屏程序 c++ direct截屏程序
6
本文档为【截屏程序总结-微信小程序 截屏】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑,
图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。