0

我正在尝试使用 Windows Magnification API 在 .net 中创建放大镜应用程序。除了实际设置放大级别(默认为 100%)之外,我几乎已经完成了所有工作。问题是,我在网上的任何地方都找不到任何示例,并且 API 的所有文档都是 C++ 代码。这是我遇到问题的特定功能。

bool SetMagFactor(float magfactor)
{
    MAGTRANSFORM matrix;
    memset(&matrix, 0, sizeof(matrix));
    matrix.v[0][0] = magfactor;
    matrix.v[1][1] = magfactor;
    matrix.v[2][2] = 1.0f;
    return MagSetWindowTransform(hwndMag, &matrix);  
}

MAGTRANSFORM 结构定义如下:

typedef struct tagMAGTRANSFORM {
    float v[3] [3];
} MAGTRANSFORM, *PMAGTRANSFORM;

其中最令人困惑的部分是 memset - 我不确定它在 .NET 中的作用或等效项是什么,但同样令人困惑的是多维数组/矩阵以及我将如何在 .NET 中处理它。

任何帮助将不胜感激。

4

1 回答 1

2

memset 只是从清除矩阵开始。您不需要在 .NET 中执行此操作。我怀疑在 C# 中定义结构的最简单方法是单独指定每个元素:

public struct MagTransform
{
    readonly float m00;
    readonly float m10;
    readonly float m20;
    readonly float m01;
    readonly float m11;
    readonly float m21;
    readonly float m02;
    readonly float m12;
    readonly float m22;

    public MagTransform(float magnificationFactor) : this()
    {
        m00 = magnificationFactor;
        m11 = magnificationFactor;
        m22 = 1.0f;
    }
}

您可能还需要指定布局 - 恐怕我对编组不太感兴趣。

如您所见,我已经根据示例代码假设了您想要的值。会有关于未使用值的警告,但这没关系。

可以改用固定缓冲区和不安全的代码......但我想我可能会使用上面的。基本上你只需要9个花车。

于 2009-09-15T11:23:05.400 回答