Windows放大镜窗口设置MagSetImageScalingCallback

问题描述

我一直在使用来自此github链接的放大镜代码Magnify
我正在尝试设置 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;
}

Sample

上图显示了实际问题:

黄色框是宿主窗口。
绿色框是放大镜窗口,是宿主窗口的子窗口。
红色框是桌面矩形。
蓝线是随机边界。

当窗口越过蓝色边界时,会导致异常。

我认为,当移动窗口时,放大镜窗口会自动调整大小并尝试越过“蓝色边界”和“桌面”边界,从而导致此问题。

所以我认为,如果我们能够确定MagnifyWindow何时触摸桌面边界并停止Mangnifier窗口的移动,那么我们也许可以将其停止。

那么有什么办法可以做到这一点?

以下是该项目的完整代码,可重现此问题:
Magnify Bug Project

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...