Я использую этот код, чтобы нарисовать линию с помощью мыши поверх всех окон. Я использую крючок мыши, чтобы получить координаты мыши, и при каждом движении мыши, когда правая кнопка мыши нажата, я рисую линию. Я использую 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 в версии 3). Эта программа делает именно то, что делает StrokeIt , но каким-то образом StrokeIt удалось найти решение этой проблемы.
Мой код написан на Delphi, но мы будем благодарны за ответ на любом языке!
Я более подробно объясню, что именно я пытаюсь построить. мое приложение разделено на три части:
У меня проблемы с тем, чтобы часть 1 работала в Windows7 (Vista), и, как написал Мартин в своем ответе, я думаю, что мне нужно изменить концепцию.Теперь я отслеживаю, подключаю сообщения мыши и рисование жестов с помощью кода, который я прикрепил выше ... Я понял основы многоуровневых окон, но что подойдет мне? как вы думаете, создание полноэкранного самого верхнего прозрачного окна и рисование в нем сработает? Могут ли мне помочь в написании кода для этого?