2009-09-15 59 views
0

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

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中处理这个问题。

任何帮助将不胜感激。

回答

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个花车。

+0

不幸的是,当我将结构传递给MagSetWindowTransform函数时失败。我得到一个奇怪的异常 - “System.ExecutionEngineException异常抛出”,如果我尝试和军事它作为LayoutKind.Auto和“指定的记录不能映射到托管值类”。 – 2009-09-15 11:56:41

+0

LayoutKind.Explicit? – 2009-09-15 14:23:19

+0

与指定无布局相同 - 抛出System.ExecutionEngineException – 2009-09-16 14:24:45