c++ - 设置 MagSetImageScalingCallback 时 Windows 放大镜窗口导致异常
问题描述
我一直在使用来自此 github 链接的放大镜代码:放大
我正在尝试设置MagImageScaling回调,并且我能够通过此回调获取位图。
一旦设置了MagImageScaling回调并且我尝试将窗口移动到桌面的右侧。程序抛出这样的异常:
在 Magnify10.exe 中的 0x00007FFDA8724452 (msvcrt.dll) 处引发异常:0xC0000005:访问冲突读取位置 0x000001749E708FA4。
我没有发布完整的代码,因为它太大了。
回调定义
BOOL MagImageScaling(HWND hwnd, void* srcdata, MAGIMAGEHEADER srcheader, void* destdata, MAGIMAGEHEADER destheader, RECT unclipped, RECT clipped, HRGN dirty)
{
//Here i was able to receive the bitmap through srcdata
return TRUE;
}
这就是我设置回调的方式:
if (!MagSetImageScalingCallback(magActive->GetHandle(), (MagImageScalingCallback)MagImageScaling))
{
return FALSE;
}
上图显示了实际问题:
黄框是宿主窗口。
绿色框是放大镜窗口,它是主窗口的子窗口。
红框是桌面矩形。
蓝线是随机边界。
当窗口越过蓝色边界时,它会导致异常。
我认为当窗口移动时,放大镜窗口会自行调整大小并尝试跨越导致此问题的蓝色边界和桌面边界。
所以我认为如果我们能够识别 MagnifyWindow 何时接触桌面边界并停止 Mangnifier 窗口的移动,那么我们可能能够停止它。
那么有什么方法可以实现这一点吗?
这是重现此问题的项目的完整代码:
放大错误项目
解决方案
推荐阅读
- tailwind-css - 如何在tailwindcss的最大高度中添加自定义26rem值
- c# - 如何录制在pictureBox上播放的视频?
- windows - 将用户添加到本地桌面管理员组后,如何在不注销/登录的情况下立即强制权限
- css - 如何在 CSS 模块中添加多个动态类?
- sql - 在 SQL 上计算给定事件的订阅者数量
- javascript - 在运行时为对象数组中的相同键推送不同的值 React native
- email - 不允许使用个人电子邮件地址。请在 Google 合作伙伴培训网站中使用公司电子邮件地址?
- javascript - 输入中的实际文本是否有 CSS 选择器?(对于“文本缩进”替代)
- python - 并行化一系列尊重数据依赖关系的操作
- django - Django - 浏览表单(向后/向前)而不在数据库中创建/删除对象