Frage

Ich versuche mit der Windows -Vergrößerungs -API eine Vergrößerungs -App in .NET zu erstellen. Ich habe so ziemlich alles zum Laufen gebracht, außer tatsächlich die Vergrößerungsstufe zu setzen (was auf 100%standardmäßig ist). Das Problem ist, dass ich nirgendwo im Netz Beispiele finden kann und die gesamte Dokumentation für die API C ++ - Code ist. Dies ist die besondere Funktion, mit der ich Probleme habe.

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);  
}

Die Magtransform -Struktur wird wie folgt definiert:

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

Der verwirrendste Teil davon ist das Memset - ich bin mir nicht sicher, was es tut oder was es in .NET ist, aber was auch verwirrend ist, ist auch das mehrstimmige Array/die matrix und wie ich damit in .NET umgehen würde.

Jede Hilfe wäre sehr geschätzt.

War es hilfreich?

Lösung

Das MEMSET räumen nur die Matrix aus. Sie müssten dies nicht in .NET tun. Ich vermute das einfachste Die Definition der Struktur in C# wäre, jedes Element einzeln anzugeben:

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;
    }
}

Möglicherweise müssen Sie auch das Layout angeben - ich fürchte, ich bin nicht so heiß beim Marshalling.

Wie Sie sehen können, habe ich die gewünschten Werte basierend auf dem Beispielcode angenommen. Es wird Warnungen vor ungenutzten Werten geben, aber das ist in Ordnung.

Du könnte Verwenden Sie stattdessen einen festen Puffer und einen unsicheren Code ... aber ich denke, ich würde wahrscheinlich das oben genannte verwenden. Grundsätzlich brauchen Sie nur 9 Schwimmer.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top