ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

VC++60-MFC框架学习-增加拖拽

2022-06-18 19:06:31  阅读:155  来源: 互联网

标签:CDragDlg MFC pStatic 控件 C++ 60 shfi https 拖拽


源码访问链接:

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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有