文章来自VC知识库:http://www.vckbase.com/vckbase/default.aspx
建立名为My的SDI工程.在CMyView中加入函数:TakeScreen()函数.
如下:
HBITMAP CMyView::TakeScreen()
{
HWND hWnd = ::GetDesktopWindow();//获得屏幕的HWND.
HDC hScreenDC = ::GetDC(hWnd); //获得屏幕的HDC.
HDC MemDC = ::CreateCompatibleDC(hScreenDC);
RECT rect;
::GetWindowRect(hWnd,&rect);
SIZE screensize;
screensize.cx=rect.right-rect.left;
screensize.cy=rect.bottom-rect.top;
HBITMAP Bitmap = ::CreateCompatibleBitmap(hScreenDC,screensize.cx,screensize.cy);
HGDIOBJ hOldBMP = ::SelectObject(MemDC,Bitmap);
::BitBlt(MemDC,0,0,screensize.cx,screensize.cy,hScreenDC,rect.left,rect.top,SRCCOPY);
::SelectObject(MemDC,hOldBMP);
::DeleteObject(MemDC);
::ReleaseDC(hWnd,hScreenDC);
return Bitmap;
}//抓取屏幕的HBITMAP.
在CMyView::OnDraw()中调用TakeScreen():
void CGetScreenBmpView::OnDraw(CDC* pDC)
{
CGetScreenBmpDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
CBitmap *Bitmap;
Bitmap=CBitmap::FromHandle(TakeScreen());
CDC MemDC;
MemDC.CreateCompatibleDC(pDC);
CBitmap *pOldBitmap=MemDC.SelectObject(Bitmap);
BITMAP bm;
Bitmap->GetObject(sizeof(BITMAP),&bm);
pDC->BitBlt(10,10,bm.bmWidth,bm.bmHeight,&MemDC,0,0,SRCCOPY);
MemDC.SelectObject(pOldBitmap);
}//显示抓取来的HBITMAP.