VC++菜鸟问题 拖拽文件到文本框获取文件路径简单问题

VC++菜鸟问题 拖拽文件到文本框获取文件路径简单问题,第1张

补充一下另一种方法。

1,在头文件中添加shellapih,或者直接添加如下代码:

#ifndef _INC_SHELLAPI

#define _INC_SHELLAPI

//

// Define API decoration for direct importing of DLL references

//

#ifndef WINSHELLAPI

#if !defined(_SHELL32_)

#define WINSHELLAPI       DECLSPEC_IMPORT

#else

#define WINSHELLAPI

#endif

#endif // WINSHELLAPI

#ifndef SHSTDAPI

#if !defined(_SHELL32_)

#define SHSTDAPI          EXTERN_C DECLSPEC_IMPORT HRESULT STDAPICALLTYPE

#define SHSTDAPI_(type)   EXTERN_C DECLSPEC_IMPORT type STDAPICALLTYPE

#else

#define SHSTDAPI          STDAPI

#define SHSTDAPI_(type)   STDAPI_(type)

#endif

#endif // SHSTDAPI

#ifndef SHDOCAPI

#if !defined(_SHDOCVW_)

#define SHDOCAPI          EXTERN_C DECLSPEC_IMPORT HRESULT STDAPICALLTYPE

#define SHDOCAPI_(type)   EXTERN_C DECLSPEC_IMPORT type STDAPICALLTYPE

#else

#define SHDOCAPI          STDAPI

#define SHDOCAPI_(type)   STDAPI_(type)

#endif

#endif // SHDOCAPI

#if ! (defined(lint) || defined(_lint) || defined(RC_INVOKED))

#if ( _MSC_VER >= 800 ) || defined(_PUSHPOP_SUPPORTED)

#pragma warning(disable:4103)

#if !(defined( MIDL_PASS )) || defined( __midl )

#pragma pack(push)

#endif

#pragma pack(1)

#else

#pragma pack(1)

#endif

#endif // ! (defined(lint) || defined(_lint) || defined(RC_INVOKED))

#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 ! (defined(lint) || defined(_lint) || defined(RC_INVOKED))

#if ( _MSC_VER >= 800 ) || defined(_PUSHPOP_SUPPORTED)

#pragma warning(disable:4103)

#if !(defined( MIDL_PASS )) || defined( __midl )

#pragma pack(pop)

#else

#pragma pack()

#endif

#else

#pragma pack()

#endif

#endif // ! (defined(lint) || defined(_lint) || defined(RC_INVOKED))

#endif  / _INC_SHELLAPI /

2,对话框属性中勾选 接收文件(Accept files)

3,添加消息处理:

case WM_DROPFILES:

HDROP hDropInfo = (HDROP) wParam; //从WM_DROPFILES消息中获取所拖放文件的数据结构的指针

DragQueryFile(hDropInfo,0,szFilePath,_MAX_PATH); //获取文件路径

DragFinish(hDropInfo); //拖放结束后,释放内存 

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

下面是完整代码:

#include <windowsh>

#include <shellapih>

#include <commdlgh>

#include "resourceh"

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

BOOL    OpenFileDlg(HWND);  

char szFilePath[MAX_PATH];

HINSTANCE hInst;

int APIENTRY WinMain(HINSTANCE hInstance,

                     HINSTANCE hPrevInstance,

                     LPSTR     lpCmdLine,

                     int       nCmdShow)

{

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;

switch (message) 

{

case WM_COMMAND:

wmId    = LOWORD(wParam); 

wmEvent = HIWORD(wParam); 

switch (wmId)

{

case IDC_OPEN_BTN:

if(!OpenFileDlg(hWnd))

return FALSE;

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

return TRUE;

}

break;

case WM_CLOSE:

EndDialog(hWnd, 0);

break;

case WM_DROPFILES:

HDROP hDropInfo = (HDROP) wParam; //从WM_DROPFILES消息中获取所拖放文件的数据结构的指针

DragQueryFile(hDropInfo,0,szFilePath,MAX_PATH); //获取文件路径

DragFinish(hDropInfo); //拖放结束后,释放内存 

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

return TRUE;

break;

   }

   return 0;

}

BOOL  OpenFileDlg(HWND hwnd)   

{

OPENFILENAME ofn;

    memset(szFilePath,0,MAX_PATH);

memset(&ofn, 0, sizeof(ofn));

ofnlStructSize      =sizeof(ofn);

ofnhwndOwner        =hwnd;

ofnhInstance        =GetModuleHandle(NULL);

ofnnMaxFile         =MAX_PATH;

ofnlpstrInitialDir  ="";

ofnlpstrFile        =szFilePath;

ofnlpstrTitle       ="Open";

ofnFlags            =OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST | OFN_HIDEREADONLY;

ofnlpstrFilter      ="\0\0";

if(!GetOpenFileName(&ofn))

{

ZeroMemory(&ofn,sizeof(OPENFILENAME)); //释放内存

return FALSE;

}

ZeroMemory(&ofn,sizeof(OPENFILENAME)); //释放内存

return TRUE;

}

这个简单:

在Button的点击函数中加入如下代码

CFileDialog Open(TRUE,"bmp",NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,"Bitmap Files (bmp)|bmp|JPEG Files (jpg)|jpg|All Files ()|||",NULL););

if(OpenDoModal()==IDOK)

{

strPath=OpenGetPathName();//这就是你要的路径了。

}

"Bitmap Files (bmp)|bmp|JPEG Files (jpg)|jpg|All Files ()|||"

这一串是文件过滤器,就是在列表中显示什么扩展名的文件。

创建dll工程,工程名定为dll,新建并添加头文件dllDemoh

//dlldemoh

#ifdef __cplusplus

#define EXPORT extern "C" __declspec(dllexport)

#else

#define EXPORT __declspec(dllexport)

#endif

EXPORT int add(int a,int b) ;

EXPORT int sub(int a,int b);

新建并添加源文件dllDemoc

//dlldemoc

#include <windowsh>

#include "dlldemoh"

int WINAPI DllMain (HINSTANCE hInstance, DWORD fdwReason, PVOID pvReserved) {

return TRUE ;

}

EXPORT int add(int a,int b) {

return a+b;

}

EXPORT int sub(int a,int b){

return a-b;

}

编译成功后会生成一个dll文件。

再新建一个普通的win32 console工程,工程属性里面的字符集要设为多字节,不要使用Unicode。将dll文件放到目录下面。新建并添加mainc

#include <WINDOWSH>

#include <WINBASEH>

#include <stdioh>

typedef int (MYPROC)(int, int);

int main()

{

HINSTANCE LibHandle;

MYPROC ProcAdd,ProcSub;

char dllbuf[] = "dlldll";//dll的路径

char sysbuf[] = "add"; /过程名/

char sysbuf1[] = "sub";

LibHandle = LoadLibrary(dllbuf); /载入dll/

ProcAdd = (MYPROC)GetProcAddress(LibHandle, sysbuf); /获取函数sysbuf的地址/

ProcSub = (MYPROC)GetProcAddress(LibHandle, sysbuf1);

printf("%d\n",(ProcAdd)(3,6));

printf("%d\n",(ProcSub)(3,6));

}

编译执行便可成功。

以上就是关于VC++菜鸟问题 拖拽文件到文本框获取文件路径简单问题全部的内容,包括:VC++菜鸟问题 拖拽文件到文本框获取文件路径简单问题、vc怎样获取文件路径、C程序如何调用dll 文件等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9318856.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-27
下一篇2023-04-27

发表评论

登录后才能评论

评论列表(0条)

    保存