printscreen in Windows/CE/Mobile
2014-01-15 12:09
351 查看
在windows CE/Windows Mobile上用程序截屏
// totally from web
HBITMAP CopyScreenToBitmap(int &nWidth,int
&nHeight)
{
// 屏幕和内存设备描述表
HDC hScrDC, hMemDC;
// 位图句柄
HBITMAP hBitmap, hOldBitmap;
// 屏幕分辨率
int xScrn, yScrn;
//为屏幕创建设备描述表
hScrDC = CreateDC(_T("DISPLAY"), NULL, NULL, NULL);
//为屏幕设备描述表创建兼容的内存设备描述表
hMemDC = CreateCompatibleDC(hScrDC);
// 获得屏幕分辨率
xScrn = GetDeviceCaps(hScrDC, HORZRES);
yScrn = GetDeviceCaps(hScrDC, VERTRES);
//存储屏幕的长宽
nWidth = xScrn;
nHeight = yScrn;
// 创建一个与屏幕设备描述表兼容的位图
hBitmap = CreateCompatibleBitmap(hScrDC, xScrn, yScrn);
// 把新位图选到内存设备描述表中
hOldBitmap = (HBITMAP)SelectObject(hMemDC, hBitmap);
// 把屏幕设备描述表拷贝到内存设备描述表中
BitBlt(hMemDC, 0, 0, xScrn,yScrn,hScrDC, 0, 0, SRCCOPY);
//得到屏幕位图的句柄
hBitmap = (HBITMAP)SelectObject(hMemDC, hOldBitmap);
//清除
DeleteDC(hScrDC);
DeleteDC(hMemDC);
// 返回位图句柄
return hBitmap;
}
void
CCopyScreenDlg::OnBtnsnap()
{
// TODO: Add your control notification handler code here
HBITMAP bmp;
int nWidth,nHeight;
//抓取屏幕
bmp = CopyScreenToBitmap(nWidth,nHeight);
//将抓取的屏幕压缩显示到窗体上
CDC *pDC = new CClientDC(this);
CDC srcDC;
CRect rect;
this->GetClientRect(&rect);
rect.DeflateRect(0,20);
//绘制显示区域矩形
CPen pen;
pen.CreatePen(PS_SOLID,2,RGB(0,255,255));
pDC->SelectObject(&pen);
pDC->Rectangle(rect);
//显示屏幕
srcDC.CreateCompatibleDC(pDC);
srcDC.SelectObject(bmp);
pDC->StretchBlt(rect.left+2,rect.top+2,rect.right -
rect.left - 4 ,rect.bottom - rect.top -
4,&srcDC,0,0,nWidth,nHeight,SRCCOPY);
DeleteObject(bmp);
}
// totally from web
HBITMAP CopyScreenToBitmap(int &nWidth,int
&nHeight)
{
// 屏幕和内存设备描述表
HDC hScrDC, hMemDC;
// 位图句柄
HBITMAP hBitmap, hOldBitmap;
// 屏幕分辨率
int xScrn, yScrn;
//为屏幕创建设备描述表
hScrDC = CreateDC(_T("DISPLAY"), NULL, NULL, NULL);
//为屏幕设备描述表创建兼容的内存设备描述表
hMemDC = CreateCompatibleDC(hScrDC);
// 获得屏幕分辨率
xScrn = GetDeviceCaps(hScrDC, HORZRES);
yScrn = GetDeviceCaps(hScrDC, VERTRES);
//存储屏幕的长宽
nWidth = xScrn;
nHeight = yScrn;
// 创建一个与屏幕设备描述表兼容的位图
hBitmap = CreateCompatibleBitmap(hScrDC, xScrn, yScrn);
// 把新位图选到内存设备描述表中
hOldBitmap = (HBITMAP)SelectObject(hMemDC, hBitmap);
// 把屏幕设备描述表拷贝到内存设备描述表中
BitBlt(hMemDC, 0, 0, xScrn,yScrn,hScrDC, 0, 0, SRCCOPY);
//得到屏幕位图的句柄
hBitmap = (HBITMAP)SelectObject(hMemDC, hOldBitmap);
//清除
DeleteDC(hScrDC);
DeleteDC(hMemDC);
// 返回位图句柄
return hBitmap;
}
void
CCopyScreenDlg::OnBtnsnap()
{
// TODO: Add your control notification handler code here
HBITMAP bmp;
int nWidth,nHeight;
//抓取屏幕
bmp = CopyScreenToBitmap(nWidth,nHeight);
//将抓取的屏幕压缩显示到窗体上
CDC *pDC = new CClientDC(this);
CDC srcDC;
CRect rect;
this->GetClientRect(&rect);
rect.DeflateRect(0,20);
//绘制显示区域矩形
CPen pen;
pen.CreatePen(PS_SOLID,2,RGB(0,255,255));
pDC->SelectObject(&pen);
pDC->Rectangle(rect);
//显示屏幕
srcDC.CreateCompatibleDC(pDC);
srcDC.SelectObject(bmp);
pDC->StretchBlt(rect.left+2,rect.top+2,rect.right -
rect.left - 4 ,rect.bottom - rect.top -
4,&srcDC,0,0,nWidth,nHeight,SRCCOPY);
DeleteObject(bmp);
}
相关文章推荐
- run Windows Mobile connecting in…
- Windows CE/Mobile突破2G文件读写…
- 让程序在Windows CE系统启动…
- Use Windows Authentication in ASP.NET 2.0/ASP.NET 2.0 中的 Windows 身份验证
- 在Windows Mobile实现虚拟键盘的思…
- 理解 Windows CE .NET 中的文件系…
- FW:Windows Mobile中GPRS连接网络
- 微软Windows Mobile/PC商店不…
- Windows Mobile的交叉编译工具:ce…
- Windows® CE 系统中的同步机制
- Windows CE下流驱动的动态加载
- print 'welcome to masm!' in the center of the screen.
- Windows Embedded CE&nb…
- 我的windows mobile WCF项目
- 关于Windows CE的编译过程以及编译…
- Windows CE下流驱动的动态加载
- Build openh323 in Windows using …
- Use Windows Authentication in ASP.NET 2.0/ASP.NET 2.0 中的 Windows 身份验证
- Windows CE6.0开发者参考(第…
- Windows CE USB Fu…