我正在尝试使用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也。
非常感谢任何帮助。
答案 0 :(得分: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个花车。