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

源码访问链接:

1
2
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 );”即可,

其他代码是为了让初学者知道,代码在文件里的位置。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
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

 

posted @   悟透  阅读(80)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
点击右上角即可分享
微信分享提示