嗨,伙计们,我正在制作我自己的颤振桌面程序,但是当我试图制作一个捕捉颤振部件所在区域的窗口的功能时,我遇到了麻烦。
任何对这个问题有想法的人请给我智慧..。+现在我绑定以获取有关win32 API的信息。任何关于win32捕获API的想法都会很受欢迎。
发布于 2022-09-22 08:53:37
关于win32捕获API,您可以使用GDI BitBlt函数。下面是一个MSDN示例捕捉图像。
您需要使用FindWindow找到颤振桌面程序窗口的句柄,然后获取rect范围,并从DC捕获窗口。
HDC hWndDC = GetWindowDC(hwnd);
RECT capture_rect{ 0,0,0,0 };
RECT wnd_rect;
RECT real_rect;
GetWindowRect(hwnd, &wnd_rect);
DwmGetWindowAttribute(hwnd, DWMWINDOWATTRIBUTE::DWMWA_EXTENDED_FRAME_BOUNDS, &real_rect, sizeof(RECT));
int offset_left = real_rect.left - wnd_rect.left;
int offset_top = real_rect.top - wnd_rect.top;
capture_rect = RECT{ offset_left,offset_top,real_rect.right - real_rect.left + offset_left,real_rect.bottom - real_rect.top + offset_top };
//capture_rect ?? wnd_rect (You can calculate the capture_rect based on the size of your window)
int width = capture_rect.right - capture_rect.left;
int height = capture_rect.bottom - capture_rect.top;
HDC hMemDC = CreateCompatibleDC(hWndDC);
HBITMAP hBitmap = CreateCompatibleBitmap(hWndDC, width, height);
SelectObject(hMemDC, hBitmap);
BitmapPtr bitmap;
bool ok = BitBlt(hMemDC, 0, 0, width, height, hWndDC, capture_rect.left, capture_rect.top, SRCCOPY);
DeleteDC(hWndDC);
DeleteDC(hMemDC);
DeleteObject(hBitmap);https://stackoverflow.com/questions/73774697
复制相似问题