Red de conocimiento informático - Problemas con los teléfonos móviles - Pregunta para principiantes de VC: arrastrar archivos al cuadro de texto para obtener la ruta del archivo es una pregunta sencilla

Pregunta para principiantes de VC: arrastrar archivos al cuadro de texto para obtener la ruta del archivo es una pregunta sencilla

Añadir otro método.

1. Agregue shellapi.h al archivo de encabezado o agregue el siguiente código directamente: #ifndef?_INC_SHELLAPI

#define?_INC_SHELLAPI

//< / p>

//?Definir?API?decoración?para?importación?directa?de?referencias?DLL.

//

#ifndef?WINSHELLAPI

#if?!definido(_SHELL32_)

#define?WINSHELLAPIDECLSPEC_IMPORT

#else

#define?WINSHELLAPI

# endif

#endif?//?WINSHELLAPI

#ifndef?SHSTDAPI

#if?!definido(_SHELL32_)

# definir ?SHSTDAPI?EXTERN_C?DECLSPEC_IMPORT?HRESULT?STDAPICALLTYPE

#define?SHSTDAPI_(tipo)EXTERN_C?DECLSPEC_IMPORT?tipo?STDAPICALLTYPE

#else

#define ? SHSTDAPI?STDAPI

#define?SHSTDAPI_(tipo)STDAPI_(tipo)

#endif

#endif?//?SHSTDAPI

#ifndef?SHDOCAPI

#if?!definido(_SHDOCVW_)

#define?SHDOCAPI?EXTERN_C?DECLSPEC_IMPORT?HRESULT?STDAPICALLTYPE

#define? SHDOCAPI_ (tipo)EXTERN_C?DECLSPEC_IMPORT?tipo?STDAPICALLTYPE

#else

#define?SHDOCAPI?STDAPI

#define?SHDOCAPI_(tipo)STDAPI_(tipo )

#endif

#endif?//?SHDOCAPI

#if?!?(definido(lint)?||?definido(_lint)? | |?definido(RC_INVOKED))

#if?(?_MSC_VER?gt;=?800?)?||?definido(_PUSHPOP_SUPPORTED)

#pragma?warning(disable) : 4103)

#if?!(definido(?MIDL_PASS?))?||?definido(?__midl?)

#pragma?pack(push)

#endif

#pragma?pack(1)

#else

#pragma?pack(1)

# endif

#endif?//?!?(definido(lint)?||?definido(_lint)?||?definido(RC_INVOKED))<

/p>

#ifdef?__cplusplus

extern?"C"?{/*?Assume?C?declarations?for?C ?*/

#endif?/ *?__cplusplus?*/

DECLARE_HANDLE(HDROP);

WINSHELLAPI?UINT?APIENTRY?DragQueryFileA(HDROP, UINT, LPSTR, UINT);

WINSHELLAPI ?UINT?APIENTRY?DragQueryFileW(HDROP, UINT, LPWSTR, UINT);

#ifdef?UNICODE

#define?DragQueryFile?DragQueryFileW

#else

#define?DragQueryFile?DragQueryFileA

#endif?//?!UNICODE

WINSHELLAPI?BOOL?APIENTRY?DragQueryPoint(HDROP, LPPOINT);

WINSHELLAPI?VOID?APIENTRY?DragFinish(HDROP);

WINSHELLAPI?VOID?APIENTRY?DragAcceptFiles(HWND, BOOL);

#ifdef?__cplusplus

}

#endif?/*?__cplusplus?*/

#if?!?(definido(lint)?||?definido(_lint)?||? definido(RC_INVOKED))

#if?(?_MSC_VER?gt;=?800?)?||?definido(_PUSHPOP_SUPPORTED)

#pragma?warning(disable: 4103)

#if?!(definido(?MIDL_PASS?))?||?definido(?__midl?)

#pragma?pack(pop)

#else

#pragma?pack()

#endif

#else

#pragma?pack()

#endif

#endif?//?!?(definido(lint)?||?definido(_lint)?||?definido(RC_INVOKED))

# endif?/*?_INC_SHELLAPI?*/

2. Marque Aceptar archivos en las propiedades del cuadro de diálogo

3. Agregar procesamiento de mensajes: case?WM_DROPFILES:

HDROP?hDropInfo?=?(HDROP)?wParam; //Obtiene el puntero de la estructura de datos del archivo arrastrado y soltado del mensaje WM_DROPFILES

DragQueryFile(hDropInfo, 0, szFilePath, _MAX_PATH); /Obtener la ruta del archivo

DragFinish(hDropInfo); //Después de arrastrar y soltar, ¿liberar la memoria?

SendDlgItemMess

age(hWnd, IDC_FILEPATH_EDIT, WM_SETTEXT, MAX_PATH, (LPARAM)szFilePath);

El siguiente es el código completo: #include?lt; windows.hgt;

#include?lt; ;shellapi .hgt;

#include?lt;commdlg.hgt;

#include?"resource.h"

LRESULT?CALLBACK MainDlgProc(HWND, ?UINT ,?WPARAM,?LPARAM);

BOOLOpenFileDlg(HWND);?

char?szFilePath[MAX_PATH];

HINSTANCE?hInst

p>

int?APIENTRY?WinMain(HINSTANCE?hInstance, HINSTANCE?hPrevInstance, LPSTR?lpCmdLine, intnCmdShow)

{

hInst?=?hInstance;

DialogBox(hInstance,?(LPCTSTR)IDD_MAIN_DLG,?NULL,?(DLGPROC)MainDlgProc);

return?0;

}

LRESULT ?CALLBACK ?MainDlgProc(HWND?hWnd, ?UINT?message, ?WPARAM?wParam, ?LPARAM?lParam)

{

int?wmId, ?wmEvent;

¿cambiar?(mensaje)?

{

caso?WM_COMMAND:

wmId=?LOWORD(wParam);?

wmEvent ?=?HIWORD(wParam);?

cambiar?(wmId)

{

caso?IDC_OPEN_BTN:

si (! OpenFileDlg(hWnd))

return?FALSE;

SendDlgItemMessage(hWnd, IDC_FILEPATH_EDIT, WM_SETTEXT, MAX_PATH, (LPARAM)szFilePath

return? VERDADERO;

}

romper

caso?WM_CLOSE:

EndDialog(hWnd,?0); p> break;

case?WM_DROPFILES:

HDROP?hDropInfo?=?(HDROP)?wParam //Obtiene el puntero de la estructura de datos del archivo arrastrado y soltado desde el mensaje WM_DROPFILES

p>

DragQueryFile(hDropInfo, 0, szFilePath, MAX_PATH); //Obtener la ruta del archivo

DragFinish(hDropInfo); //Después de completar el proceso de arrastrar y soltar; , ¿liberar la memoria?<

/p>

SendDlgItemMessage(hWnd, IDC_FILEPATH_EDIT, WM_SETTEXT, MAX_PATH, (LPARAM)szFilePath);

return?TRUE;

return?0;

}

BOOL?OpenFileDlg(HWND?hwnd)

{

OPENFILENAME ?ofn;

memset(szFilePath, 0, MAX_PATH);

memset(amp; ofn, ?0, ?sizeof(ofn)); .lStructSize?=sizeof(ofn);

ofn.hwndOwner=hwnd;

ofn.hInstance=GetModuleHandle(NULL);

ofn.nMaxFile?= MAX_PATH;

ofn.lpstrInitialDir?=".";

ofn.lpstrFile=szFilePath;

ofn.lpstrTitle="Abrir...";

ofn.Flags=OFN_PATHMUSTEXIST?|?OFN_FILEMUSTEXIST?|?OFN_HIDEREADONLY;

ofn.lpstrFilter?="*.*\0*.*\0";

if(!GetOpenFileName(amp; ofn))

{

ZeroMemory(amp; ofn, sizeof(OPENFILENAME)); //Liberar memoria

return?FALSE;

}

ZeroMemory(amp; ofn, sizeof(OPENFILENAME)); //Liberar memoria

return?TRUE;

}