首页 > 解决方案 > 设置 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 窗口的移动,那么我们可能能够停止它。

那么有什么方法可以实现这一点吗?

这是重现此问题的项目的完整代码:
放大错误项目

标签: c++winapiwindows-10win32gui

解决方案


推荐阅读