源码访问链接:
gitee: https://gitee.com/piazini/MFC-stu github: https://github.com/piazini/MFC-stu
编译器:
VC++ 6.0 (SP6) 简体中文企业版
项目名:Drag
( 如何新建项目 ? --> VC++60新建MFC框架程序 - 对话框程序 )
完成效果图:
0x01:设计界面
静态文本框--右键“属性”--设置“凹陷”样式。
在对话框空白右键-属性-扩展样式--接受文件打勾
打开按钮属性修改:
0x02: 界面(UI)控件关联变量
查看--建立类向导,或快捷键(Ctrl + W)
关联编辑框变量
关联打开按钮变量:
两个变量关联完成
0x03 代码编写:
DragDlg.h
.h头文件中只需要增加一行“afx_msg void OnDropFiles( HDROP );”即可,
其他代码是为了让初学者知道,代码在文件里的位置。
class CDragDlg : public CDialog { // Construction public: //内容略 …… protected: HICON m_hIcon; // Generated message map functions //{{AFX_MSG(CDragDlg) …… afx_msg void OnDropFiles( HDROP ); //支持界面拖拽 //}}AFX_MSG DECLARE_MESSAGE_MAP() };
DragDlg.cpp
BEGIN_MESSAGE_MAP(CDragDlg, CDialog) //{{AFX_MSG_MAP(CDragDlg) ON_WM_SYSCOMMAND() ON_WM_PAINT() ON_WM_QUERYDRAGICON() ON_BN_CLICKED(IDC_OPEN, OnOpen) ON_WM_DROPFILES() //支持界面拖拽 //}}AFX_MSG_MAP END_MESSAGE_MAP() //打开按钮 void CDragDlg::OnOpen() { // TODO: Add your control notification handler code here //打开对话框文件筛选器 CString strFilter="All Files(*.*)|*.*|(*.txt)||"; CFileDialog dlg( TRUE, NULL, NULL, OFN_EXPLORER| OFN_HIDEREADONLY| OFN_ENABLESIZING| OFN_FILEMUSTEXIST, strFilter); //以模态方式,显示打开文件对话框 if(dlg.DoModal() == IDOK ) { m_filename = dlg.GetPathName(); } //更新变量到编辑框 UpdateData(FALSE); //文件信息结构变量用于存放函数调用的结果 SHFILEINFO shfi; memset(&shfi,0,sizeof(shfi)); SHGetFileInfo(m_filename, FILE_ATTRIBUTE_NORMAL, &shfi, sizeof(SHFILEINFO),SHGFI_ICON| SHGFI_LARGEICON); CStatic *pStatic=(CStatic *)GetDlgItem(IDC_STATIC); //设置静态控件的样式,使其可以使用图标,并试图标显示使居中 pStatic->ModifyStyle(0xF,SS_ICON|SS_CENTERIMAGE); //设置静态控件图标 pStatic->SetIcon(shfi.hIcon); } //支持界面拖拽 // VC6.0 类向导里没有WM_DROPFILES消息,只能手动添加 void CDragDlg::OnDropFiles(HDROP hDropInfo) { //获取拖拽文件信息 int nFiles = ::DragQueryFile(hDropInfo, (int) -1, NULL, 0); TCHAR szFileName[_MAX_PATH]; ::DragQueryFile(hDropInfo, 0, szFileName, _MAX_PATH); //MessageBox(szFileName); //文件信息结构变量用于存放函数调用的结果 SHFILEINFO shfi; memset(&shfi,0,sizeof(shfi)); SHGetFileInfo(szFileName, FILE_ATTRIBUTE_NORMAL, &shfi, sizeof(SHFILEINFO),SHGFI_ICON| SHGFI_LARGEICON); CStatic *pStatic=(CStatic *)GetDlgItem(IDC_STATIC); //设置静态控件的样式,使其可以使用图标,并试图标显示使居中 pStatic->ModifyStyle(0xF,SS_ICON|SS_CENTERIMAGE); //设置静态控件图标 pStatic->SetIcon(shfi.hIcon); //更新路径到编辑框 m_filename = szFileName; UpdateData(FALSE); //结束此次拖拽操作,并释放分配的资源 DragFinish(hDropInfo); }
参考:
https://jingyan.baidu.com/article/67662997111eee54d51b8413.html
https://blog.csdn.net/hou09tian/article/d.......................levant_index=17
https://blog.csdn.net/wei8265/article/details/16650.11.....ant_default [多个文件拖动可以用for循环]
https://mp.weixin.qq.com/s/ezpopU9HhYWp05uwcElh3g