Red de conocimiento informático - Material del sitio web - Cómo implementar la operación de arrastrar y soltar desde el archivo a la ventana del programa

Cómo implementar la operación de arrastrar y soltar desde el archivo a la ventana del programa

I. Conceptos básicos

Arrastrar y soltar se refiere al método de usar el mouse para arrastrar entre ventanas de diferentes programas, entre diferentes ventanas del mismo programa o entre diferentes controles en la misma ventana del Mismo programa. Es un método de técnicas de operación de mover, copiar y pegar. Las operaciones de arrastrar y soltar se realizan con la ayuda del sistema operativo. El objeto arrastrado primero registra el formato de datos que utiliza con el sistema operativo y proporciona datos en el formato de datos especificado. Al final de la operación de arrastrar y soltar, la ventana que recibe la operación de arrastrar y soltar extraerá los datos relevantes en el formato de datos especificado y generará los objetos correspondientes en función de los datos extraídos.

Dos tipos de arrastrar y soltar

Hay dos tipos de arrastrar y soltar: arrastrar y soltar OLE y arrastrar y soltar en el administrador de archivos. Estos dos métodos son mecanismos completamente diferentes. La función de arrastrar y soltar del administrador de archivos solo puede manejar nombres de archivos. Al asignar el mensaje WM_DROPFILES de la ventana de destino, la ventana puede recibir el nombre del archivo al arrastrar y soltar. Arrastrar y soltar OLE es más versátil y le permite arrastrar y soltar cualquier dato que pueda guardarse en el portapapeles al mismo tiempo. Este artículo primero presenta la función de arrastrar y soltar del administrador de archivos, luego presenta la función de arrastrar y soltar OLE y, finalmente, brinda una implementación OLE que admite operaciones de arrastrar y soltar de archivos para mejorar el control de lista CListCtrlEx.

3. Principios y ejemplos de arrastrar y soltar en el administrador de archivos

La esencia de este método es generar un mensaje WM_DROPFILES. La dificultad es que se utilizan principalmente las siguientes funciones API: sus prototipos y comentarios son los siguientes:

UINT DragQueryFile(HDROP hDrop, UINT iFile, LPTSTR lpszFile, UINT cch)

Esto La función se utiliza para obtener el nombre del archivo a arrastrar y soltar. Entre ellos, hDrop es un identificador que apunta a una estructura que contiene el nombre del archivo arrastrado y soltado; iFiles es el número de serie del archivo que se va a consultar, porque es posible arrastrar y soltar muchos archivos al mismo tiempo; al búfer de exportación, utilizado para guardar iFiles, especifica el nombre de la ruta del archivo con el número de serie y cch especifica el tamaño del búfer. Hay dos puntos que vale la pena señalar: primero, si especificamos iFile como 0xFFFFFFFF al llamar a la función, DragQueryFile ignorará los parámetros lpszFile y cch y devolverá el número de archivos para esta operación de arrastrar y soltar; segundo, si lpszFile se especifica como lpszFile; NULL, la función Se devolverá la longitud real del búfer requerido.

BOOL DragQueryPoint(HDROP hDrop, LPPOINT lppt);

Esta función se utiliza para obtener la posición del puntero del mouse durante las operaciones de arrastrar y soltar. El segundo parámetro lppt es un puntero a la estructura PUNTO, que se utiliza para guardar la posición del puntero del mouse cuando se arrastra y suelta el archivo. Una ventana puede llamar a esta función para consultar si un archivo está ubicado dentro de su propio rectángulo de ventana.

void DragFinish(HDROP hDrop);

Cuando se completa la operación de arrastrar y soltar, se debe llamar a esta función para liberar la memoria asignada por el sistema para transferir el archivo. nombre.

Primero, cree un proyecto de cuadro de diálogo y asegúrese de que la propiedad "Aceptar archivos" del cuadro de diálogo esté marcada. De lo contrario, también puede llamar a DragAcceptFiles(TRUE) al crear la ventana (por ejemplo, en la función OnCreate) con el mismo efecto.

Luego asigne el mensaje WM_DROPFILES. El prototipo del controlador de mensajes es el siguiente: void OnDropFiles (HDROP hDrop). Tenga en cuenta que el tipo de parámetro de entrada es HDROP, que es un puntero a una estructura, y la estructura puntiaguda contiene el nombre del archivo arrastrado y soltado. A continuación, debemos completar dos operaciones principales: primero, llamar a DragQueryFile y especificar su parámetro iFile como 0xFFFFFFFF para obtener la cantidad de archivos para esta operación de arrastrar y soltar; segundo, usar un bucle para recuperar cada nombre de archivo por turno;