首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

这个小弟我不懂啊 求指教

2012-02-07 
这个我不懂啊, 求指教 - C++ Builder / Windows SDK/APIC/C++ codeHBITMAPGetCaptureBmp(){HDChDCHDCMemD

这个我不懂啊, 求指教 - 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:)
[解决办法]
就是这么个回事
[解决办法]
道理就和复制粘贴要用到剪贴板一样

热点排行