我正在尝试使用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_screenshot.exe':已加载'C:\ Users \ mbrooker \ Documents \ Visual Studio 2010 \ Projects \ win_screenshot \ Debug \ win_screenshot.exe',已加载符号。 'win_screenshot.exe':加载'C:\ Windows \ SysWOW64 \ ntdll.dll',无法找到或打开PDB文件 'win_screenshot.exe':加载'C:\ Windows \ SysWOW64 \ kernel32.dll',无法找到或打开PDB文件 'win_screenshot.exe':加载'C:\ Windows \ SysWOW64 \ KernelBase.dll',无法找到或打开PDB文件 'win_screenshot.exe':加载'C:\ Windows \ SysWOW64 \ user32.dll',无法找到或打开PDB文件 'win_screenshot.exe':加载'C:\ Windows \ SysWOW64 \ gdi32.dll',无法找到或打开PDB文件 'win_screenshot.exe':加载'C:\ Windows \ SysWOW64 \ lpk.dll',无法找到或打开PDB文件 'win_screenshot.exe':加载'C:\ Windows \ SysWOW64 \ usp10.dll',无法找到或打开PDB文件 'win_screenshot.exe':加载'C:\ Windows \ SysWOW64 \ msvcrt.dll',无法找到或打开PDB文件 'win_screenshot.exe':加载'C:\ Windows \ SysWOW64 \ advapi32.dll',无法找到或打开PDB文件 'win_screenshot.exe':加载'C:\ Windows \ SysWOW64 \ sechost.dll',无法找到或打开PDB文件 'win_screenshot.exe':加载'C:\ Windows \ SysWOW64 \ rpcrt4.dll',无法找到或打开PDB文件 'win_screenshot.exe':加载'C:\ Windows \ SysWOW64 \ sspicli.dll',无法找到或打开PDB文件 'win_screenshot.exe':加载'C:\ Windows \ SysWOW64 \ cryptbase.dll',无法找到或打开PDB文件 'win_screenshot.exe':已加载'C:\ Windows \ SysWOW64 \ msvcr100d.dll',已加载符号。 'win_screenshot.exe':加载'C:\ Windows \ SysWOW64 \ imm32.dll',无法找到或打开PDB文件 'win_screenshot.exe':加载'C:\ Windows \ SysWOW64 \ msctf.dll',无法找到或打开PDB文件 'win_screenshot.exe':已加载'C:\ Windows \ SysWOW64 \ apphelp.dll',无法找到或打开PDB文件 'win_screenshot.exe':已加载'ImageAtBase0x4ab60000',通过包含/排除设置禁用加载。 'win_screenshot.exe':卸载'ImageAtBase0x4ab60000' 程序'[1480] win_screenshot.exe:Native'已退出,代码为0(0x0)。
答案 0 :(得分:1)
显示HBITMAP
会涉及将其(例如通过BitBlt
)blitting到另一个DC
。以类似于您已经在做的方式,只对另一个DC(可能是窗口的DC),请参阅GetDC
。
MSDN为您提供示例代码:Scaling an Image,请参阅DrawBitmap
函数。