编程语言
首页 > 编程语言> > VC++60-MFC框架学习-增加拖拽

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

 

标签:CDragDlg,MFC,pStatic,控件,C++,60,shfi,https,拖拽
来源: https://www.cnblogs.com/wutou/p/16389003.html