// Get the size of the window to capture
        Rectangle rect = new Rectangle();
        GetWindowRect(handle, ref rect);

        // GetWindowRect returns Top/Left and Bottom/Right, so fix it
        rect.Width = rect.Width - rect.X;
        rect.Height = rect.Height - rect.Y;

Я не очень хорошо говорю по-английски, но меня очень интересует кодирование на C #, извините, если я опубликую глупый вопрос. Во всяком случае, я читал о GetWindowRect(handle, ref rect); и знаю, что эта функция вернет Top/Left и Bottom/Right дескриптора "rect". Но почему в этом коде нужно исправлять проблему с помощью

    rect.Width = rect.Width - rect.X;
    
    rect.Height = rect.Height - rect.Y;
  • В чем суть? не GetWindowRect уже возвращает положение верхнего левого и правого угла?

  • Почему они должны это исправить?

1
Veeshonshon 8 Окт 2020 в 13:47

2 ответа

Лучший ответ

Кто бы ни определил структуру Rectangle в вашей кодовой базе, не следовал именам в структуре в файлах заголовков C. В структуре RECT есть {{ Элементы X1}}, left, bottom и right, которые содержат экранные координаты прямоугольника.

Ваш код «жульничает», захватывая координаты, а затем переназначая члены bottom и right на высоту и ширину.

2
Sean 8 Окт 2020 в 10:52

Мне непонятно, о чем вы спрашиваете, но Информацию об API можно найти здесь

Вы обнаружите, что GetWindowRect возвращает только boolean, но не RECT

Однако он записывает во второй параметр, чтобы задать структуру RECT.

После того, как они окончательно модифицируют полученное значение rect, полученное от GetWindowrect().

0
Pat. ANDRIA 8 Окт 2020 в 14:10