GetWindowRect和GetWindowDC数据不正确

梨子Jelery 2018-08-24 02:27:37
调用API实现一个采集窗口画面的程序,使用GetClientRect和GetDC可以正确捕捉到窗口客户区的位置,现在想捕捉整个窗口,包括标题栏等,但是使用GetWindowRect和GetWindowDC后得到的图片总是和实际窗口的位置有偏差,该怎么解决
...全文
813 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
梨子Jelery 2018-09-05
  • 打赏
  • 举报
回复
感谢 结帖了!
赵4老师 2018-09-03
  • 打赏
  • 举报
回复
Coordinate Space and Transformation Functions
The following functions are used with coordinate spaces and transformations.



ClientToScreen
CombineTransform
DPtoLP
GetCurrentPositionEx
GetGraphicsMode
GetMapMode
GetViewportExtEx
GetViewportOrgEx
GetWindowExtEx
GetWindowOrgEx
GetWorldTransform
LPtoDP
MapWindowPoints
ModifyWorldTransform
OffsetViewportOrgEx
OffsetWindowOrgEx
ScaleViewportExtEx
ScaleWindowExtEx
ScreenToClient
SetGraphicsMode
SetMapMode
SetViewportExtEx
SetViewportOrgEx
SetWindowExtEx
SetWindowOrgEx
SetWorldTransform



xiaohuh421 2018-09-03
  • 打赏
  • 举报
回复
坐标偏移, 一般都是坐标系使用错误. 这种你可以这么调试, 把目标窗口放到屏幕左上角, 即屏幕坐标(0,0)位置, 再保存图片看一下.
如果放到0,0位置没有问题, 那么就100%确定是坐标问题了.

黑色的问题, 多半是位图格式错误, 如果没有使用GDI+的话. 最低级的错误是宽高计算错误, 获取到DC绘制区域外面去了.
牧童吃五谷 2018-09-02
  • 打赏
  • 举报
回复
考虑使用这两个函数实现窗口坐标和屏幕坐标的变换,看看是否可行: ::ScreenToClient(...); ::ClientToScreen(...);
Sandrer 2018-08-30
  • 打赏
  • 举报
回复
理论上来说, GetWindowRect 是获取窗口对应桌面的位置
但是 GetWindowDC 返回的 HDC, 并不是针对桌面的, 而是针对窗口
那既然是针对窗口, 它的起始坐标就肯定不是窗口对应桌面所在的位置
而是窗口的起始位置, 也就是 0 - 0 了
Sandrer 2018-08-30
  • 打赏
  • 举报
回复
无论 GetDC 或 GetWindowDC 返回的 HDC, 其绘制范围的左上角都是 x:0, y:0
所以你 GetWindowRect 后, 再调用 OffsetRect(&rect, -rect.left, -rect.top)
然后再用 hdc 和 rect 进行操作就好了
zgl7903 2018-08-25
  • 打赏
  • 举报
回复
试试 PrintWindow
worldy 2018-08-24
  • 打赏
  • 举报
回复
引用 4 楼 worldy 的回复:
GetWindowRect
获取的屏幕坐标,你需要按屏幕坐标的逻辑来进行处理


你想要什么目的?
schlafenhamster 2018-08-24
  • 打赏
  • 举报
回复
因为保存的图片
上代码
梨子Jelery 2018-08-24
  • 打赏
  • 举报
回复
引用 4 楼 worldy 的回复:
GetWindowRect
获取的屏幕坐标,你需要按屏幕坐标的逻辑来进行处理


应该怎么处理呢
worldy 2018-08-24
  • 打赏
  • 举报
回复
GetWindowRect
获取的屏幕坐标,你需要按屏幕坐标的逻辑来进行处理
schlafenhamster 2018-08-24
  • 打赏
  • 举报
回复
使用 PaintWindow
梨子Jelery 2018-08-24
  • 打赏
  • 举报
回复
确实和边框有关系,但是感觉还是位置信息不正确,因为保存的图片连客户区都只能显示一半,剩下的部分全黑,还有很多绘制鼠标残留的图像
zgl7903 2018-08-24
  • 打赏
  • 举报
回复
是因为边框引起的? 修改下系统的边框风格 颜色 及大小 试试看 是否有变化?

15,977

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧