Различие между MousEventArgs. Местоположение и курсор. Положение

Я не понимаю почему Курсор. Положение отличается от MouseEventArgs. Местоположение, они должны быть тем же, не так ли?

Править: Ответ, кажется, предлагает это Cursor.Position== PointToScreen(MouseEventArgs.Location), но мое тестирование указывает иначе.

6
задан mdb 26 December 2009 в 08:52
поделиться

4 ответа

MouseEventArgs.Position - это позиция курсора мыши относительно управления во время события, в момент события.

Cursor.Position - это текущая позиция курсора мыши относительно рабочего стола.

.
10
ответ дан 9 December 2019 в 22:35
поделиться

MouseEventArgs.location указывает позицию курсора относительно элемента управления во время события.

Windows.Forms.Cursor.Position указывает позицию курсора относительно рабочего стола.

Очевидно, что эти две позиции не обязательно должны быть и не являются одинаковыми. Последнее можно использовать и без события как таковое, в отличие от MouseEventArgs.Location

.
1
ответ дан 9 December 2019 в 22:35
поделиться

Можно перехватить импорт и из... import , определив собственную функцию __ import __ и назначив ее __ builtin __. __ import __ (обязательно сохраните предыдущее значение, так как переопределение, несомненно, захочется делегировать ему; и вам потребуется импортировать __ builtin __ , чтобы получить модуль builtin-objects).

Например (Py2.4 specific, поскольку это то, о чем вы спрашиваете), сохраните в aim.py следующее:

import __builtin__
realimp = __builtin__.__import__
def my_import(name, globals={}, locals={}, fromlist=[]):
  print 'importing', name, fromlist
  return realimp(name, globals, locals, fromlist)
__builtin__.__import__ = my_import

from os import path

и теперь:

$ python2.4 aim.py
importing os ('path',)

Таким образом, это позволяет перехватить любой конкретный запрос на импорт и изменить импортированный модуль [s], как вы хотите, прежде чем вернуть их - см. спецификации здесь . Это тот «крючок», который вы ищете, верно?

-121--4349843-

Да. но с оговоркой. Идея о том, что закольцовывание назад быстрее никогда не применяется ко всем старым процессорам. Это x86 вещь (как в 8086-486, возможно Pentium, хотя я не думаю больше).

Эта оптимизация никогда не применялась к какой-либо другой архитектуре ЦП, о которой я знаю.

Вот почему.

Регистр 8086 был специально оптимизирован для использования в качестве счетчика циклов. Вы помещаете счетчик циклов в CX, а затем есть несколько инструкций, которые уменьшают CX, а затем устанавливают коды условий, если они равны нулю. Фактически, существовал префикс команды, который можно было поставить перед другими командами (префикс REP), которые в основном итерируют другую команду, пока CX не достигнет 0.

Еще в те дни, когда мы подсчитывали команды и инструкции, были известны фиксированные счетчики циклов с использованием cx в качестве счетчика циклов, и cx был оптимизирован для подсчета.

Но это было давно время назад. С тех пор как Pentium, эти сложные команды были в целом медленнее, чем использование большего количества и более простых инструкций. (RISC ребенок!) Ключевая вещь, которую мы пытаемся сделать в эти дни, - это попытаться поставить некоторое время между загрузкой регистра и его использованием, потому что трубопроводы на самом деле могут делать несколько вещей за цикл, пока вы не пытаетесь использовать один и тот же регистр для нескольких вещей одновременно.

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

-121--1709643-

Я думаю, что Позиция находится относительно рабочего стола, тогда как MouseEventArgs.Location - относительно элемента управления, который вызвал событие

0
ответ дан 9 December 2019 в 22:35
поделиться

useEventargs.position относится к прямоугольнику клиента контроля, курсор.позиция находится в координате экрана.

0
ответ дан 9 December 2019 в 22:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: