Прямоугольник на прозрачной форме или прямо на экране

Пишу приложение на c# для захвата скриншота с рабочего стола. Понадобилось добавить возможность делать скриншот области рабочего стола. Для этого необходимо создать прямоугольное выделение такого плана:

Прямоугольник, залитый цветом, желательно с возможностью изменения размеров и перемещением.

Проблема: если в качестве прямоугольника создать форму с скрытыми границами и элементами управления то перемещение и изменение размеров я сделать могу, правда через задницу, но не знаю как при этом заблокировать доступ к рабочему столу вне прямоугольника. Если же создать сначала форму и развернуть её на весь экран а уже на ней рисовать прямоугольник то всё тормозит и сильно мерцает при изменении размеров и перемещении прямоугольника, к тому же у меня не получается сделать форму прозрачной так, чтобы прямоугольник оставался при этом видимым.

Очень нужна помощь!

Ещё раз что хочется:

1. Прямоугольное выделение
2. Создать выделение в стиле обычного windows выделения — щелкнули мышкой в нужной области, потянули мышку — создался прямоугольник, отпустили мышку — прямоугольник остался.
3. Рабочий стол вокруг прямоугольника должен быть недоступен, пока программа не сделает скрин.
4. В идеале фон вокруг прямоугольника сделать затененным а сам прямоугольник — прозрачной областью в затенении.

Плиз плиз плиз, мучаюсь 8 часов. На c# пишу ~20 часов =(
Чтение манов и гуглеж в рунете и буржунете не очень помог.
–1
8 января в 12:32

отсортировано по дате по оценке
ответы (2)

+6
Zagrebelion #
Снимите скриншот, сделайте нормальную форму размером во весь экран без элементов управления (WindowStyleЧтоТоТакое=null), фоном в форму положите скриншот, а сверху рисуйте прямоугольник.
сделать что то вроде — snipping tool как у винды?
Да, именно вышеизложенный вариант решения.
wartur, 8 января в 20:03
Как я писал я уже пытался делать прямоугольник на форме во весь экран — жутнейшим образом тормозило и мерцало во время изменения размеров и перемещении. Возможно нужно что-то допилить? doublebuffering у формы стоял. Aleko, 8 января в 21:13
Я, если честно, не помню, как это происходит в winforms. Сейчас на WPF накидал тестовый проект (без снятия скриншота и четыре слайдера вместо драга выделения мышью) — всё работает нормально, не мерцает и не тормозит. dl.dropbox.com/u/3710015/WpfApplication1.zip Zagrebelion, 9 января в 12:36
Спасибо огромное! Сейчас распотрошу. Aleko, 9 января в 14:08
0
egorinsk #
Форма не нужна. Надо создать окно, без рамки, со свойством всегда поверх, и со свойством (не помню, как оно называется), которое в WinAPI включает offscreen rendering для окна, позволяет его делать полупрозрачным, и т.д. Изменять размеры и таскать окно, вручную ловя события и обрабатывая.
А какая разница между окном и формой? Вообще я сейчас вроде как так и делаю. Aleko, 9 января в 01:29

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.