Вопрос

Я пытаюсь создать приложение лупы в .net с помощью Windows Magnification API. У меня почти все работает, за исключением фактической установки уровня увеличения (по умолчанию 100%). Проблема в том, что я не могу найти ни одного примера в сети, и вся документация для API - это код C ++. Это особая функция, с которой у меня проблемы.

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 также.

Любая помощь будет принята с благодарностью.

Это было полезно?

Решение

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 поплавков.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top