读书人

这个小弟我不懂啊 求指教

发布时间: 2012-02-07 17:45:36 作者: rapoo

这个我不懂啊, 求指教 - C++ Builder / Windows SDK/API

C/C++ code
HBITMAP   GetCaptureBmp()   {    HDC     hDC;       HDC     MemDC;       BYTE*   Data;       HBITMAP   hBmp;       BITMAPINFO   bi;           memset(&bi,   0,   sizeof(bi));       bi.bmiHeader.biSize   =   sizeof(BITMAPINFO);    bi.bmiHeader.biWidth   =  GetSystemMetrics(SM_CXSCREEN);       bi.bmiHeader.biHeight   = GetSystemMetrics(SM_CYSCREEN);       bi.bmiHeader.biPlanes   =   1;       bi.bmiHeader.biBitCount   =   24;           hDC   =   GetDC(NULL);       MemDC   =   CreateCompatibleDC(hDC);       hBmp   =   CreateDIBSection(MemDC,   &bi, DIB_RGB_COLORS,   (void**)&Data,   NULL,   0);       SelectObject(MemDC,   hBmp);       BitBlt(MemDC,   0,   0,   bi.bmiHeader.biWidth,   bi.bmiHeader.biHeight,hDC,   0,   0,   SRCCOPY);       ReleaseDC(NULL,   hDC);         DeleteDC(MemDC);       return   hBmp;   }   


这部分代码实现是截屏。
C/C++ code
hDC   =   GetDC(NULL);       MemDC   =   CreateCompatibleDC(hDC);       hBmp   =   CreateDIBSection(MemDC,   &bi, DIB_RGB_COLORS,   (void**)&Data,   NULL,   0);       SelectObject(MemDC,   hBmp);       BitBlt(MemDC,   0,   0,   bi.bmiHeader.biWidth,   bi.bmiHeader.biHeight,hDC,   0,   0,   SRCCOPY);       ReleaseDC(NULL,   hDC);         DeleteDC(MemDC);       return   hBmp;  


关键代码是这里, 但是我不怎么懂CreateCompatibleDC这个函数,我意思是不明白为什么这里要使用这个函数,为什么需要一个MemDC。 请知道的教教我吧

[解决办法]
跟你讲讲这个步骤你就应该会明白了:)
1、将界面一次性复制到内存(就是用MEMDC,为了防止在后续操作时界面有变动)
2、创建BMP,并将内存中的DC转成BMP赋给它:)
3、释放DC:)
[解决办法]
就是这么个回事
[解决办法]
道理就和复制粘贴要用到剪贴板一样

读书人网 >C++ Builder

热点推荐