Question

J'essaie de créer une application de loupe dans .net à l'aide de l'API de grossissement Windows. J'ai pratiquement tout fait fonctionner sauf le réglage du niveau de grossissement (qui est réglé par défaut à 100%). Le problème est que je ne trouve aucun exemple sur le net et que toute la documentation de l'API est du code C ++. C’est la fonction particulière qui me pose problème.

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 structure MAGTRANSFORM est définie comme suit:

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

La partie la plus déroutante de ce problème est le memset - je ne suis pas sûr de ce qu'il fait ni de son équivalent dans .NET, mais ce qui est également déroutant, c'est le tableau / matrice à plusieurs dimensions et la façon dont je le gérerais. NET aussi.

Toute aide serait grandement appréciée.

Était-ce utile?

La solution

Le memset est en train de vider la matrice pour commencer. Vous n'avez pas besoin de faire cela dans .NET. Je soupçonne que la manière la plus simple de définir la structure en C # serait de spécifier chaque élément individuellement:

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

Vous devrez peut-être aussi spécifier la disposition - je crains fort de ne pas être trop enthousiaste à propos du marshalling.

Comme vous pouvez le constater, j’ai assumé les valeurs souhaitées en fonction du code exemple. Il y aura des avertissements sur les valeurs inutilisées, mais ce n'est pas grave.

Vous pourriez utiliser un tampon fixe à la place et du code non sécurisé ... mais je pense que j'utiliserais probablement ce qui précède. Fondamentalement, vous avez juste besoin de 9 flotteurs.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top