进行屏幕截取
(1)
void __fastcall TForm1::Button1Click(TObject *Sender)
{
TCanvas *canvas;
Graphics::TBitmap *bmp;
try
{
canvas = new TCanvas();
canvas->Handle = GetDC(0);
bmp = new Graphics::TBitmap();
bmp->Width = Screen->Width;
bmp->Height = Screen->Height;
TRect rect = Rect(0,0,Screen->Width,Screen->Height);
bmp->Canvas->CopyRect(rect,canvas,rect);
bmp->SaveToFile("c://zbc.bmp");
}
__finally
{
delete canvas;
delete bmp;
}
}
---------------------------------------------------------------------------------------------------------------------------------------
(2)
void CScreenCaptureDlg::OnLButtonUp(UINT nFlags, CPoint point)
{
//得到鼠标所在处的窗口的区域宽、高
int nWidth=rectCapture.Width();
int nHeight=rectCapture.Height();
HDC hdcScreen, hMemDC;
HBITMAP hBitmap, hOldBitmap;
//建立一个屏幕设备环境句柄
hdcScreen = CreateDC("DISPLAY", NULL, NULL, NULL);
hMemDC = CreateCompatibleDC(hdcScreen);
//建立一个与屏幕设备环境句柄兼容、与鼠标所在处的窗口的区域等大的位图
hBitmap = CreateCompatibleBitmap(hdcScreen, nWidth, nHeight);
// 把新位图选到内存设备描述表中
hOldBitmap =(HBITMAP)SelectObject(hMemDC, hBitmap);
// 把屏幕设备描述表拷贝到内存设备描述表中
BitBlt(hMemDC, 0, 0, nWidth, nHeight, hdcScreen,rectCapture.left,rectCapture.top,SRCCOPY);
//取回鼠标所在处的窗口屏幕位图的句柄
hBitmap =(HBITMAP)SelectObject(hMemDC, hOldBitmap);
DeleteDC(hdcScreen);
DeleteDC(hMemDC);
// 返回位图句柄
//打开剪贴板,并将位图拷到剪贴板上
OpenClipboard() ;
EmptyClipboard();
SetClipboardData(CF_BITMAP, hBitmap);
//关闭剪贴板
CloseClipboard();
MessageBox("屏幕内容已经拷到剪贴板上!");
//终止鼠标捕获
ReleaseCapture();
//恢复窗口显示模式
ShowWindow(SW_NORMAL);
}
946

被折叠的 条评论
为什么被折叠?



