我先道歉;我是c的新手,我真的不知道我在做什么。
我正在尝试使用Windows 7和c捕获和显示屏幕截图。我知道这听起来很愚蠢,最终我将需要在不同的程序中使用这些功能,捕获屏幕的那个将发送图像到显示它的那个,但现在我只是试图让它们都在一个程序中工作。下面是到目前为止我整理的代码:
#include <windows.h>
bool ScreenCapture(int x, int y, int width, int height){
// get a DC compat. w/ the screen
HDC hDc = CreateCompatibleDC(0);
// make a bmp in memory to store the capture in
HBITMAP hBmp = CreateCompatibleBitmap(GetDC(0), width, height);
// join em up
SelectObject(hDc, hBmp);
// copy from the screen to my bitmap
BitBlt(hDc, 0, 0, width, height, GetDC(0), x, y, SRCCOPY);
HDC myhDc = GetDC(hBitmap, sizeof(BITMAP), (LPSTR)&Bitmap);
BitBlt(myhDc, 0, 0, width, height, hDc, x, y, SRCCOPY);
//Display bitmap
DrawBitmap(myhDC,0,0,hBmp,SRCCOPY);
//GetDC(hBitmap, sizeof(BITMAP), (LPSTR)&Bitmap);
// free the bitmap memory
DeleteObject(hBmp);
return 0;
}
int main(){
ScreenCapture(500, 200, 300, 300);
system("pause");
}
我只是没能找到任何方法来显示HBITMAP。如何显示HBITMAP?
更新:我添加了DrawBitmap,但它不工作…我得到以下输出,我不确定如何处理它:
'win_screen .exe': Loaded 'C:UsersmbrookerDocumentsVisual Studio 2010Projectswin_screen Debugwin_screen .exe', Symbols Loaded。'win_screen .exe':已加载'C:WindowsSysWOW64ntdll.dll',无法找到或打开PDB文件'win_screen .exe':加载'C:WindowsSysWOW64kernel32.dll',无法找到或打开PDB文件'win_screen .exe':加载'C:WindowsSysWOW64KernelBase.dll',无法找到或打开PDB文件'win_screen .exe':已加载'C:WindowsSysWOW64user32.dll',无法找到或打开PDB文件'win_screen .exe':已加载'C:WindowsSysWOW64gdi32.dll',无法找到或打开PDB文件'win_screen .exe':已加载'C:WindowsSysWOW64 lpkk .dll',无法找到或打开PDB文件'win_screen .exe':已加载'C:WindowsSysWOW64usp10.dll',无法找到或打开PDB文件'win_screen .exe':已加载'C:WindowsSysWOW64msvcrt.dll',无法找到或打开PDB文件'win_screen .exe':加载'C:WindowsSysWOW64advapi32.dll',无法找到或打开PDB文件'win_screen .exe':已加载'C:WindowsSysWOW64sechost.dll',无法找到或打开PDB文件'win_screen .exe':加载'C:WindowsSysWOW64rpcrt4.dll',无法找到或打开PDB文件'win_screen .exe':已加载'C:WindowsSysWOW64 sspici .dll',无法找到或打开PDB文件'win_screen .exe':加载'C:WindowsSysWOW64cryptbase.dll',无法找到或打开PDB文件'win_screen .exe':已加载'C:WindowsSysWOW64msvcr100 .dll',已加载符号。'win_screen .exe':加载'C:WindowsSysWOW64imm32.dll',无法找到或打开PDB文件'win_screen .exe':加载'C:WindowsSysWOW64msctf.dll',无法找到或打开PDB文件'win_screen .exe':已加载'C:WindowsSysWOW64apphelp.dll',无法找到或打开PDB文件'win_screen .exe':加载'ImageAtBase0x4ab60000',加载被Include/Exclude设置禁用。'win_screen .exe':卸载'ImageAtBase0x4ab60000'程序'[1480]win_screen .exe: Native'已退出,代码为0 (0x0)。
显示HBITMAP
将涉及将其比特化(例如通过BitBlt
)到另一个DC
。以一种与您已经在做的类似的方式,只是对另一个DC,例如窗口的DC,参见GetDC
。
MSDN提供了示例代码:缩放图像,参见DrawBitmap
函数。