社区
界面
帖子详情
GetWindowRect和GetWindowDC数据不正确
梨子Jelery
2018-08-24 02:27:37
调用API实现一个采集窗口画面的程序,使用GetClientRect和GetDC可以正确捕捉到窗口客户区的位置,现在想捕捉整个窗口,包括标题栏等,但是使用GetWindowRect和GetWindowDC后得到的图片总是和实际窗口的位置有偏差,该怎么解决
...全文
813
14
打赏
收藏
GetWindowRect和GetWindowDC数据不正确
调用API实现一个采集窗口画面的程序,使用GetClientRect和GetDC可以正确捕捉到窗口客户区的位置,现在想捕捉整个窗口,包括标题栏等,但是使用GetWindowRect和GetWindowDC后得到的图片总是和实际窗口的位置有偏差,该怎么解决
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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
打赏
举报
回复
是因为边框引起的? 修改下系统的边框风格 颜色 及大小 试试看 是否有变化?
python3应用
window
s api对后台程序窗口及桌面截图并保存的方法
今天小编就为大家分享一篇python3应用
window
s api对后台程序窗口及桌面截图并保存的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
window
s程序设计第五章 图形基础
GDI 的结构 GDI由几百个函数呼叫和一些相关的
数据
型态、宏和结构组成。 GDI原理
Window
s 98和Microsoft
Window
s NT中的图形主要由GDI32.DLL动态链接库输出的函数来处理。在
Window
s 98中,这个GDI32.DLL实际是利用16位GDI.EXE动态链接库来执行许多函数。在
Window
s NT中,GDI.EXE只用于16位的程序。 这些动态链
swf图像
数据
的简单提取
vc中有时会需要提取swf文件中的
数据
用于处理,由于swf文件要播放的内容会牵涉到as语言,Flash player是一个解释器,它能解析swf文件中的as脚本,所以在vc中,我们很难实现自己去显示swf中的图像。 这时我们要用到flash控件,这是一个COM组件,在
C++屏幕捕获技术实现详解
Window
s应用程序编程接口(API)是一系列预先定义的函数、协议和工具,它允许软件开发者创建应用程序时与
Window
s操作系统进行交互。API作为操作系统和应用程序之间的桥梁,提供了一系列服务,包括硬件访问、图形、声音、网络通信和
数据
处理等。这些API函数对用户来说是透明的,开发者通过调用这些函数,可以简化软件开发过程,实现高效和功能丰富的软件产品。设备上下文(
DC
)是
Window
s图形编程中的一个核心概念,它提供了一种机制,允许应用程序与不同的输出设备进行通信。
Delphi小技巧杂记
//获取任务栏尺寸 procedure TForm1.Button1Click(Sender: TObject); var TaskList: HWnd; Bordered: T
Rect
; begin TaskList := Find
Window
(’Shell_TrayWnd’, nil); Get
Window
Rect
(TaskList, Bordered); Label1.Cap
界面
15,977
社区成员
115,866
社区内容
发帖
与我相关
我的任务
界面
VC/MFC 界面
复制链接
扫一扫
分享
社区描述
VC/MFC 界面
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章