Windows 확대 API, .NET 및 행렬
-
07-07-2019 - |
문제
Windows 확대 API를 사용하여 .NET에서 돋보기 앱을 만들려고합니다. 실제로 배율 수준 (기본값 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에서이를 처리하는 방법입니다.
모든 도움은 대단히 감사하겠습니다.
해결책
밈은 처음부터 매트릭스를 지우고 있습니다. .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 개의 수레가 필요합니다.
제휴하지 않습니다 StackOverflow