Как я могу использовать список изображений для рисования C #, перетаскивая за пределы моих собственных окон - PullRequest
0 голосов
/ 08 сентября 2010

Я использую встроенное перетаскивание C # через Control.DoDragDrop ().Я использую Image List и ImageList_DragMove и друзей, чтобы перемещать полупрозрачное изображение с помощью мыши.(См. Мой ответ в этой теме для получения дополнительной информации).Как я могу заставить ImageList отслеживать мышь, когда она вне моих окон?Я получаю только сообщения о положении мыши в OnDragOver (), и только когда мышь находится над одной из моих окон.Перетаскивание происходит в другой экземпляр моего приложения, и я хотел бы, чтобы ImageList прошел весь путь, в том числе и на рабочем столе.Я предполагаю, что основная проблема заключается в том, что DoDragDrop запускает свой собственный маленький цикл сообщений.

Windows Explorer делает это, поэтому я знаю, что это возможно.Я полагаю, что мог бы запустить поток, чтобы следить за мышью, или написать собственный цикл перетаскивания сообщений, но я надеюсь, что это будет проще.

Ответы [ 2 ]

2 голосов
/ 08 сентября 2010

Вы не можете рисовать за пределами своих окон.Способ сделать это путем изменения курсора мыши.Это то, что событие GiveFeedback доступно, установите e.UseDefaultCursors в false и установите Cursor.Current.

Чтобы дать вам представление о том, как это выглядит, вот пример формы, которая перетаскивает видимый текст.Измените его, чтобы нарисовать растровое изображение так, как вы хотите, например, из своего ImageList.Остерегайтесь того, что Bitmap.GetHicon () не создает великолепных значков, цветовое отображение плохое.

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

Я предлагаю вам создать специальную форму и перетащить ее вместо использования ImageList.Мы сделали это в наших продуктах (например, XtraGrid), чтобы конечный пользователь мог размещать столбцы.

...