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