Domanda

Sto cercando di creare un'app di ingrandimento in .net utilizzando l'API di ingrandimento di Windows. Ho praticamente fatto funzionare tutto tranne che per impostare effettivamente il livello di ingrandimento (che per impostazione predefinita è al 100%). Il problema è che non riesco a trovare alcun esempio in nessuna parte della rete e tutta la documentazione per l'API è in codice C ++. Questa è la funzione particolare con cui ho problemi.

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

La struttura MAGTRANSFORM è definita come segue:

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

La parte più confusa di questo è il memset: non sono sicuro di cosa faccia o quale sia il suo equivalente in .NET, ma ciò che confonde anche è l'array / matrice multi-dimensionale e come gestirlo. Anche NET.

Qualsiasi aiuto sarebbe molto apprezzato.

È stato utile?

Soluzione

Il memset sta semplicemente cancellando la matrice per cominciare. Non dovresti farlo in .NET. Sospetto che il modo più semplice di definire la struttura in C # sia quello di specificare ogni elemento singolarmente:

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

Potrebbe anche essere necessario specificare il layout - temo di non essere così entusiasta del marshalling.

Come puoi vedere, ho assunto i valori desiderati in base al codice di esempio. Ci saranno avvisi sui valori non utilizzati, ma va bene.

Tu potresti usare invece un buffer fisso e un codice non sicuro ... ma penso che probabilmente userò quanto sopra. Fondamentalmente hai solo bisogno di 9 galleggianti.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top