VC++60-MFC框架学习-增加拖拽
源码访问链接:
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
浙公网安备 33010602011771号