DragDropEffects.Scroll: почему -2147483648, а не 8? - PullRequest
2 голосов
/ 13 сентября 2010

Стандартное перечисление в System.Windows.Forms:

[Flags]
public enum DragDropEffects
{
    Scroll = -2147483648,
    //
    // Summary:
    //     The combination of the System.Windows.DragDropEffects.Copy, System.Windows.Forms.DragDropEffects.Link,
    //     System.Windows.Forms.DragDropEffects.Move, and System.Windows.Forms.DragDropEffects.Scroll
    //     effects.
    All = -2147483645,
    None = 0,
    Copy = 1,
    Move = 2,
    Link = 4,
}

Довольно странное значение для прокрутки, не правда ли?

Как я понимаю, все эти значения взяты из «старые времена» COM \ OLE DROPEFFECT ... Но почему они были выбраны так в первую очередь?Автор пытался зарезервировать интервал между 8 и 0x80000000 для чего-то?Это как-то бесполезно или за этим стоит интересная история, или это просто еще одна многолетняя иллюстрация принципа ЯГНИ?

Ответы [ 3 ]

1 голос
/ 13 сентября 2010

Это флаг состояния, отдельный от основных эффектов перетаскивания (Копировать / Переместить / Ссылка).Если не считать места для будущих эффектов выпадения, выбор старшего бита позволяет провести трюк, например, проверить, является ли значение отрицательным.Идея того же типа, что и HRESULT или возвращаемое значение GetAsyncKeyState.

0 голосов
/ 08 февраля 2017

Это позволяет быстро проверить> 0, чтобы узнать, вызывается ли Copy, Move или Link.Это исключает None, а также Scroll.

0 голосов
/ 13 сентября 2010

Да, это похоже на "интересный" хак в некотором роде.Здравый смысл предложил бы использовать 8, но, возможно, есть какая-то причина, связанная с версией Windows, почему 8 нельзя было использовать, и поэтому автор использовал вместо нее -2147483645 (-0x80000000).Это не , что необычное число - тот, кто написал это, просто начинает с двоичного «1» с старшего значимого конца, а не с младшего значимого конца.группа эффектов перетаскивания для копирования / перемещения / ссылки, и поэтому автор хотел поместить его на другом конце слова, наряду с любыми другими будущими аналогичными эффектами.

Возможно, есть какой-то ужасный кусоклогику где-то проверить, чтобы увидеть, если переменная DragDropEffects больше нуля (намеревается означать «все, что не является ничем»), и Scroll не должен попадать в этот диапазон?По крайней мере, вы могли бы подумать, что они поместили бы константу в гекс, чтобы показать, что это не просто какое-то полностью случайное число.

...