c windows winapi drag-and-drop

c - Arrastra y suelta en winapi



windows drag-and-drop (5)

Tengo una aplicación Winapi pura que necesita algunas características nuevas. Uno de ellos sería mejor implementado como dos listas donde puede arrastrar y soltar (múltiples) elementos entre las listas. La nueva característica se puede limitar a un solo diálogo.

¿Cuál sería la forma más rápida de implementar esto? Algunas ideas:

  • Winapi puro (es DetectDrag)
  • Un archivo DLL separado o MFC que proporciona este diálogo
  • Incruste Microsoft WebBrowser Control y use JQuery

Alguna de estas opciones que debe evitarse?
Alguna mejor idea?
¿Qué es lo más rápido de implementar?
¿Alguna sugerencia sobre cómo comenzar?


Cualquiera que sea el método con el que esté más familiarizado, será el más rápido.

Ciertamente, es muy fácil hacer esto en .NET Windows Forms. Puede arrastrar y soltar fácilmente elementos entre las entradas de ListBox escribiendo solo unas pocas líneas de código. Mire en algún lugar como CodeProject para muestras.


Mi consejo sería que si la aplicación está en winapi puro, mantenlo así.

Iniciar un tiempo de ejecución de .NET Framework solo para un cuadro de diálogo con elementos que se pueden arrastrar es tan malo como tener un control WebBrowser y usar JQuery para esa funcionalidad - es al menos thedailywtf.com-worthy si me preguntas (pero, una vez más, no estás Preguntándome ;) ).

De lo contrario, te pondrás (y potencialmente a otros) en una pesadilla de mantenimiento y la forma más rápida se convertirá en la más problemática.

Editar: Tal vez esos dos artículos ayuden a implementar la función de arrastrar y soltar: se trata de reordenamiento de filas en ListViews, pero probablemente ayuden a obtener la idea.


Raymond Chen escribió una serie de blogposts sobre este tema no hace mucho tiempo. Comience aquí .


Todo el código está en MSDN en C y en api win32 Solo copie y pegue.

Y vea las noticias profesionales de la aplicación Win32: //194.177.96.26/comp.os.ms-windows.programmer.win32, donde todo esto se ha debatido durante décadas ...


Algunas notas después de implementar esto en Win32 api:

Arrastrar y soltar no es compatible con el control ListBox. Tiene que ser un control ListView.

Este artículo de CodeProject es muy bueno. (Gracias macbirdie)
La sección de MSDN de ListViews es, por supuesto, muy útil.