截取屏幕时出现的有关问题

截取屏幕时出现的问题
//获取屏幕DC
HDC hDesktopDc = ::GetDC(NULL);

//获取位图
HBITMAP hDesktopBitmap = (HBITMAP)::GetCurrentObject(hDesktopDc, OBJ_BITMAP);

//画出来
CImage image;
image.Attach(hDesktopBitmap);
CClientDC dc(this);
image.Draw(dc.m_hDC, 0, 0);


执行以上代码之后画出的图为什么是黑的呢?
然后hDesktopDc 和 hDesktopBitmap 都是非NULL的


还只允许发35分内的帖子

------解决方案--------------------
这个可以用
//创建抓图DC
HDC m_hrootdc = ::GetDC(NULL);
HDC m_hmemdc = CreateCompatibleDC(m_hrootdc);

int nWidth = 1024;
int nHeight = 768;
BITMAPINFO bmpinfo;
memset(&bmpinfo, 0, sizeof(bmpinfo));
bmpinfo.bmiHeader.biSize = sizeof(bmpinfo);
bmpinfo.bmiHeader.biPlanes = 1;
bmpinfo.bmiHeader.biBitCount = 32;
bmpinfo.bmiHeader.biCompression = BI_RGB;
bmpinfo.bmiHeader.biWidth = nWidth;
bmpinfo.bmiHeader.biHeight = -nHeight;

void* m_pBuffer;
HBITMAP m_hOldBitmap;
HBITMAP m_hBitmap = CreateDIBSection(m_hmemdc, &bmpinfo, DIB_RGB_COLORS, &m_pBuffer, NULL, 0);
m_hOldBitmap = (HBITMAP)SelectObject(m_hmemdc, m_hBitmap);

//拷屏
BitBlt(m_hmemdc, 0, 0, nWidth, nHeight, m_hrootdc, 0, 0, SRCCOPY ); //无法截取到WS_EX_LAYERED属性窗口
//BitBlt(m_hmemdc, 0, 0, nWidth, nHeight, m_hrootdc, 0, 0, SRCCOPY | CAPTUREBLT); //CAPTUREBLT用于截取到WS_EX_LAYERED属性窗口,但鼠标图标有闪烁
------解决方案--------------------
http://blog.****.net/visualeleven/article/details/6093484