首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何捕捉颤振小部件所在区域的窗口

如何捕捉颤振小部件所在区域的窗口
EN

Stack Overflow用户
提问于 2022-09-19 14:06:58
回答 1查看 55关注 0票数 -1

嗨,伙计们,我正在制作我自己的颤振桌面程序,但是当我试图制作一个捕捉颤振部件所在区域的窗口的功能时,我遇到了麻烦。

  • 首先,我试图透明程序的背景并捕获小部件(通过使用flutter_acrylic和RenderRepaintBoundary)。
  • 当我翻盖小部件时,图像不包括透明窗口。但只有纯种颜色。因为cap胞算法只看到小部件。我在这个问题中被阻止了。小部件捕获图像

任何对这个问题有想法的人请给我智慧..。+现在我绑定以获取有关win32 API的信息。任何关于win32捕获API的想法都会很受欢迎。

输出图像

EN

回答 1

Stack Overflow用户

发布于 2022-09-22 08:53:37

关于win32捕获API,您可以使用GDI BitBlt函数。下面是一个MSDN示例捕捉图像

您需要使用FindWindow找到颤振桌面程序窗口的句柄,然后获取rect范围,并从DC捕获窗口。

代码语言:javascript
复制
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);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73774697

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档