Очень медленно рисование линии на рабочем столе в Win 7

Я использую этот код, чтобы нарисовать линию с помощью мыши поверх всех окон. Я использую крючок мыши, чтобы получить координаты мыши, и при каждом движении мыши, когда правая кнопка мыши нажата, я рисую линию. Я использую 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. Отслеживание и сохранение жестов мыши при нажатии правой кнопки мыши
  2. Распознавание жестов на основе ограниченного количества фигур
  3. Активация макросов на основе распознанного жеста и приложения, которое было под курсором при запуске жеста

У меня проблемы с тем, чтобы часть 1 работала в Windows7 (Vista), и, как написал Мартин в своем ответе, я думаю, что мне нужно изменить концепцию.Теперь я отслеживаю, подключаю сообщения мыши и рисование жестов с помощью кода, который я прикрепил выше ... Я понял основы многоуровневых окон, но что подойдет мне? как вы думаете, создание полноэкранного самого верхнего прозрачного окна и рисование в нем сработает? Могут ли мне помочь в написании кода для этого?

5
задан Shlantz 13 November 2011 в 22:12
поделиться