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


    源码访问链接:

    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

  • 相关阅读:
    BZOJ1049 [HAOI2006]数字序列0
    UOJ265 【NOIP2016】愤怒的小鸟
    #include <deque>
    #include <queue>
    #include <vector>
    #include <set>
    #include <map>
    BZOJ1217:[HNOI2003]消防局的设立
    浅谈贪心
    CF1060B:Maximum Sum of Digits
  • 原文地址:https://www.cnblogs.com/wutou/p/16389003.html
Copyright © 2020-2023  润新知