Я использую этот код, чтобы нарисовать линию с помощью мыши поверх всех окон. Я использую мышь, чтобы получить координаты мыши, и при каждом движении мыши, когда правая кнопка мыши нажата, я рисую линию. Я использую NOTXORPEN
, поэтому я смогу удалить линию, только нарисовав ее снова.
Init:
ScreenDC := GetDcEx(GetDesktopWindow,0,DCX_LOCKWINDOWUPDATE);
PenHandle := CreatePen(PS_SOLID,HitStorage.GetPenWidth,10);
SelectObject(ScreenDC ,PenHandle);
OldPenMode := SetRop2(ScreenDC, R2_NOTXORPEN); // Setting the PenMode to NotXor
MoveToEx(ScreenDC, X, Y, Nil); //Move The Pen Position to the Cursor Position
Я использую этот код при каждом движении мыши:
LineTo(ScreenDC, X, Y); // Draw a Line between the prev Point to Current Point
Этот код работал для Windows 95, 98, 2000 и XP, но теперь с Windows 7 он очень медленный.
Я написал программу для жестов мыши (написанную в 1999 году) в Delphi 3, используя ТОЛЬКО Windows API (ловушка мыши была написана в VC из-за ошибки Delphi BUG в версии 3). Эта программа делает именно то, что StrokeIt делает, но каким-то образом StrokeIt удалось найти решение этой проблемы.
Мой код написан на Delphi, но мы будем благодарны за ответы на любом языке!
Я объясню более подробно, что именно я пытаюсь построить. Моя заявка разделена на три части:
- Отслеживание и сохранение жестов мыши при нажатии правой кнопки мыши
- Распознавание жестов на основе ограниченного числа фигур
- Активация макроса на основе распознанного жеста и приложения, которое находилось под курсором при запуске жеста
У меня проблемы с тем, чтобы Part1 работала на Windows7 (Vista), и, как написал Мартын в своем ответе, думаю, мне нужно изменить концепцию. Теперь я выполняю отслеживание, перехватывая сообщения мыши и рисование жестов с помощью кода, который я прикрепил выше ... Я понял основы многослойных окон, но что будет работать для меня? Как вы думаете, создание полноэкранного верхнего прозрачного окна и рисование на нем будет работать? Может ли кто-нибудь помочь мне написать код для этого?