Pergunta

Estou tentando criar um aplicativo de magníptico no .NET usando a API de ampliação do Windows. Eu tenho praticamente tudo funcionando, exceto para definir o nível de ampliação (que padrão é 100%). O problema é que não consigo encontrar nenhum exemplo da rede e toda a documentação da API é o código C ++. Esta é a função específica com a qual estou tendo problemas.

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

A estrutura Magtransform é definida da seguinte forma:

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

A parte mais confusa disso é o Memset - não tenho certeza do que faz ou qual é o equivalente no .NET, mas o que também é confuso é a matriz/matriz multi -desmestional e como eu também lidaria com isso no .NET.

Qualquer ajuda seria muito apreciada.

Foi útil?

Solução

O MEMSET está apenas limpando a matriz para começar. Você não precisaria fazer isso no .net. Eu suspeito do mais simples maneira de definir a estrutura em C# seria especificar cada elemento individualmente:

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

Você também pode precisar especificar o layout - receio que não esteja tão quente em marecha.

Como você pode ver, assumi os valores que você deseja com base no código de amostra. Haverá avisos sobre valores não utilizados, mas tudo bem.

Você poderia Use um buffer fixo e o código inseguro ... mas acho que provavelmente usaria o acima. Basicamente, você só precisa de 9 carros alegóricos.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top