读书人

¥1000 $$$ GetBitmapBits/Set… 这对

发布时间: 2012-06-01 16:46:36 作者: rapoo

¥1000 $$$ GetBitmapBits/Set… 这对函数,怎么用着没效果呢? 牛人来看看 $$$ ¥1000

C/C++ code
    HDC hScreendc,hDrawdc;    hScreendc = ::GetDC(NULL);    hDrawdc = CreateCompatibleDC(NULL);    HDC hSefDC= GetDC()->m_hDC;    int cx = GetSystemMetrics(SM_CXSCREEN);    int cy = GetSystemMetrics(SM_CYSCREEN);    DWORD * pBits = new DWORD[cx*cy];    //*******上面的不用看,唯一需要说的一点就是,pBits指向一个    //保存屏幕截图的内存空间,屏幕是32位的,所以就用了DWORD    HBITMAP hBitmap;    hBitmap = CreateCompatibleBitmap(hScreendc,cx,cy);     HGDIOBJ oldbmp = SelectObject(hDrawdc,hBitmap);    BitBlt(hDrawdc,0,0,cx,cy,hScreendc,0,0,SRCCOPY);    //上面这几句把屏幕截图保存到了Bitmap里,注意不是贴到客户区显示    GetBitmapBits(hBitmap,cx*cy*4, pBits);    //取出这个位图的像素位,保存到pBits指向的内存空间里    //下面这几句建一个兼容dc,兼容Bitmap,但是这次不从屏幕抓图了,    //而是从pBits读取像素位,添到Bitmap2里,然后贴到客户区显示    HDC hDrawdc2 = CreateCompatibleDC(NULL);    HBITMAP hBitmap2 = CreateCompatibleBitmap(hScreendc, cx, cy);    SetBitmapBits(hBitmap,cx*cy*4 ,reinterpret_cast<void *>(pBits));    HGDIOBJ oldbmp2 = SelectObject(hSefDC,hBitmap2);    BitBlt(hSefDC,0,0, cx, cy,hDrawdc2,0,0,SRCCOPY);        ……//DeleteDC什么的


概括一下,就是屏幕抓图,保存到一个Bitmap里,然后另一个Bitmap从他这里获取图像,并显示出来。可这样什么也画不出来



[解决办法]
要是直接显示第一个呢?能显示出来不
[解决办法]
http://blog.csdn.net/visualeleven/article/details/6202796

读书人网 >VC/MFC

热点推荐