再谈用MFC实现文件拖放到编辑框

在MFC中实现拖拽文件到对话框中的编辑控件中 这次我学习了如何将文件拖拽到对话框的编辑控件中,具体如下: 要实现这个功能,首先要重载CEdit类,定义个派生类CDragEdit类,并重载他的WM_CREATE方法,在其中添加DragAcceptFile(TRUE);方法 然后利用类向导为CDragEdit类添加WM_DROPFILE消息响应函数: 代码如下: void CDragEdit::OnDrop 阅读详情
前不久,看了南京海军指挥学院黄向明同学发表的“ 用MFC实现文件拖放到编辑框”一文后,对其最后提出的问题很感兴趣,我就查了一下vc的msdn帮助,发现DragAcceptFiles()也是CWnd类的成员函数,既然如此,想来只要是CWnd类的派生类,就应该可以用DragAcceptFiles()函数来向windows文件管理器注册自己成为被拖动文件的接受者,也就是说可以响应消息WM_DROPFILES,于是我就用appwizard生成一个基于SDI的工程文件Drag,并且添加了一个对话框 CDragDialog,然后我就用classwizard查看是否CWnd派生类比如CMainFrame,CDragView, CDragDialog是否都有WM_DROPFILES消息,结果就CDragDialog类没有,但是在对dialog 的Extended Style进行设置时,明明看见有accept file选项,这越发使我感到奇怪,怎么也想不通这到底是怎么回事?后来我就没再想下去,既然不能用classwizard 添加对WM_DROPFILES消息的响应,何不用手工添加试试?手工添加完以后,然后编译、调试、运行,居然没出一点问题。程序虽然写出来了,但其原因我还是没明确。

---- 黄向明同学分别讲解了基于CFormView和dialog的实现,下面我简单介绍一下基于cview的实现,以及基于dialog的另一种实现,为了便于演示程序运行结果,程序中没使用编辑框,而是listbox来接受被拖动的文件名,这样也便于演示多个文件的拖动。

---- 一、文件拖放到cview中的listbox

---- 1、用MFC Appwizard创建一个基于SDI的新工程,命名为Drag,除第一步选择第一项以外,其余全用默认设置。

---- 2、DragView.h文件

     CListBox  m_View_List;
---- 3、DragView.cpp文件

---- 用classwizard添加WM_CREATE消息响应,然后在OnCreate函数中添加如下代码:

DragAcceptFiles();//向file manager注册自己,
使自己能接受droped file(s)
CRectrect(0,0,100,80);m_View_List.Create
(WS_VISIBLE|WS_VSCROLL,rect,this,
IDC_VIEW_LIST);//创建listbox
---- 4、Resource.h

---- 修改Resource.h文件,为listbox的ID(IDC_VIEW_LIST)分配一个值

---- 例如:#define IDC_VIEW_LIST 1000

---- 5、DragView.cpp文件

---- 用classwizard添加WM_SIZE消息响应,然后在OnSize函数中添加如下代码:

---- m_View_List.MoveWindow(0,0,cx,cy);//使listbox所占区域始终保持与客户区一样大

---- 6、DragView.cpp文件

---- 用classwizard添加WM_DROPFILES消息响应,然后在OnDropFiles函数中添加如下代码:

void CDragView::OnDropFiles(HDROP hDropInfo) 
{
int DropCount=DragQueryFile(hDropInfo,-1,NULL,0);
//取得被拖动文件的数目
    for(int i=0;i< DropCount;i++)
  {
int NameSize=DragQueryFile(hDropInfo,i,NULL,0);
//取得第i个拖动文件名所占字节数
   HANDLE hHeap=GetProcessHeap();
   char *pName=(LPSTR)HeapAlloc
(hHeap,HEAP_ZERO_MEMORY,
NameSize++);//根据字节数分配缓冲区
   if (pName==NULL) 
      {
  MessageBox("给文件名分配暂存空间时出错!",
"错误信息",MB_ICONERROR);
  return;
      }
   DragQueryFile(hDropInfo,i,pName,NameSize);
//把文件名拷贝到缓冲区
   m_View_List.AddString(pName);
//文件名加入listbox中显示
           
   HeapFree(hHeap,HEAP_ZERO_MEMORY,pName);
//释放缓冲区
          } 
          CView::OnDropFiles(hDropInfo);
       }
---- 到此就完成了文件拖放到view中的listbox,你可以编译、运行了。

---- 二、文件拖放到对话框中的listbox

---- 1、在上边生成的Drag工程成添加一个对话框,ID为IDD_DRAG_DIALOG,并生成一个新类CDragDialog,在Extend Style中选中Accept File 选项。

---- 2、在对话框中添加一个listbox控件,ID为IDC_DIALOG_LIST,去掉sort style。

---- 3、手工添加WM_DROPFILES消息响应,这与自定义消息差不多,但更简单,因为这里不需要

---- 你定义WM_DROPFILES;

---- (1)在DragDialog.h文件声明消息处理函数:

      afx_msg void OnDropFiles(HDROP hDropInfo);
---- (2)其次在DragDialog.cpp的消息映射中指出消息处理入口:
ON_MESSAGE(WM_DROPFILES,OnDropFiles)
(也可以为宏ON_WM_DROPFILES());
---- (3)最后定义消息处理函数,这与在cview中第6步差不多:
      void CDragDialog::OnDropFiles(HDROP hDropInfo) 
      {
        int DropCount=DragQueryFile(hDropInfo,-1,NULL,0);
//取得被拖动文件的数目
        for(int i=0;i< DropCount;i++)
  {
           int NameSize=DragQueryFile(hDropInfo,i,NULL,0);
//取得第i个拖动文件名所占字节数
   HANDLE hHeap=GetProcessHeap();
   char *pName=(LPSTR)HeapAlloc(hHeap,HEAP_ZERO_MEMORY,
NameSize++);//根据字节数分配缓冲区
   if (pName==NULL) 
      {
  MessageBox("给文件名分配暂存空间时出错!",
"错误信息",MB_ICONERROR);
  return;
      }
   DragQueryFile(hDropInfo,i,pName,NameSize);
//把文件名拷贝到缓冲区
   m_Dialog_List.AddString(pName);
//文件名加入listbox中显示
           
   HeapFree(hHeap,HEAP_ZERO_MEMORY,pName);
//释放缓冲区
  }
        CDialog::OnDropFiles(hDropInfo);
      }
---- 4、从资源中修改menu,添加一个菜单“测试”,以弹出我们刚才添加的对话框,菜单ID为ID_DRAG_TEST;

---- 5、在MainFrm.cpp中加入对话框头文件,并用classwizard添加ID_DRAG_TEST的响应函数;

      #include "DragDialog.h"
      
      ......
      void CMainFrame::OnDragTest() 
      {
          CDragDialog dlg;
  dlg.DoModal();
      }
MFC 获取编辑框(Edit Control)数据 全网最详细的获取MFC编辑框数据的方式,当涉及到在 MFC 中获取编辑框(Edit Control)的数据时,你可以使用以下几种常用方法: 阅读详情

相关推荐

MFC程序中实现文件拖放到编辑框的详细指南

MFC(Microsoft Foundation Classes)库是微软提供的一套封装了Windows API的C++类库。其提供了丰富的控件和接口,能够帮助开发者快速构建基于Windows的应用程序。MFC库的出现极大提高了开发效率,简化了程序与Windows系统底层的交互,使得开发者可以专注于应用逻辑的实现。MFC库中的类封装了Windows消息处理机制,简化了事件驱动编程模式的复杂度。

weixin_32535825的博客 561

MFC一一拖拽功能的实现

       拖拽功能实现:有时候我们需要实现在一些控件(如编辑框、按钮、列表等)控件上实现文件拖拽的功能,方便我们对应的相关操作。         例如,需要实现在Button按钮上拖拽文件并点击Button按钮打开,实现步骤如下:        实现拖拽功能一般针对控件操作分为两种情况:(1)、如果控件已经提供允许文件拖拽功能,则直接按下图所示添加相应的消息函数,同时将Accpet Files...

xuanyin235的专栏 5158

用MFC实现文件拖放到编辑框

我也不在哪下的,不过是很有用的东西,用MFC实现文件拖放到编辑框

MFC树控件节点拖拽的实现(附带教程和源码)

本文转自VC程序中树型控件节点拖动的完美实现-yuanma-ChinaUnix博客 原文中源代码已无法下载,于是在优快云资源中搜索并下载到源码经过测试成功。 下面附上教程和源码,具体功能实现的原理和参考原博客 首先创建MFC应用程序,保持默认设置就够了,添加一个树控件在对话框中 为树控件添加变量m_TreeCtrl 头文件添加新建项XTreeCtrl.h,源文件添加新建项XTreeCtrl.cpp,这是实现节点拖拽的关键代码 XTreeCtrl.h代码如下 #pragma on..

Don_cor1eone的博客 2321

MFC 拖曳文件获得文件路径

MFC 拖曳文件获得文件路径 MFC 拖曳文件获得文件路径 MFC 拖曳文件获得文件路径 MFC 拖曳文件获得文件路径 MFC 拖曳文件获得文件路径 MFC 拖曳文件获得文件路径

Tip-Adapter: Training-free Adaption of CLIP for Few-shot Classification

对比式视觉-语言预训练,也称为CLIP,通过大规模的图像-文本对来学习视觉表示,为zero-shot知识迁移展示了新的范式。它在下游任务上展现出令人瞩目的性能,实现了zeri-shot的知识迁移。为了进一步增强CLIP的适应能力,现有方法提出了微调可学习模块的方法,显著提高了少样本情况下的性能,但也引入了额外的训练时间和计算资源。在本文中,我们提出了一种适用于CLIP的无需训练的少样本分类方法,称为Tip-Adapter。

qq_43800752的博客 1164

使MFC支持拖放文件的方法

使MFC支持拖放文件的方法 2014-12-30 11:41 313人阅读 评论(0) 收藏 举报  分类:  MFC(11)   在目标dialog关联的类的.h里添加//注意控件和对话框属性都不要选Accept Files [cpp] view plain copy print? afx_msg void OnDropFiles(HDROP hDropInfo);   void P

zerokkqq的专栏 710

IC/FPGA笔试/面试题分析(七)建立时间和保持时间类型考题汇总分析

自从召集2020届校招同行加入新建立的“IC/FPGA校招笔试面试交流群“,见识到了很多关于建立时间和保持时间分析的题目,在为别人解答疑惑,以及别人为自己解答疑惑的同时,自己对于知识的理解更加深刻了。 对于建立时间而言,从单独的对触发器的建立时间和保持时间的分析到了对电路(系统)的建立时间到保持时间的分析,前者是核心,后者是扩展,后者建立在前者的基础之上进行推到得到,同时也是芯片内部实际遵循的时...

Reborn Lee 1万+

MFC编辑框如何多行显示内容

目录 一、创建编辑框 1、创建编辑框 2、编辑框添加变量 二、代码实现:编辑框多行显示我们需要的消息 1、初始化 2、显示消息到edit中 3、边框框设置属性:让其支持拖拽条 multiline(多行): Auto HScroll:自动水平滚动 Auto VScroll:自动垂直滚动 Horizontal Scroll:水平滚动条 Vertical Scroll:垂直滚动条...

qq_40544338的博客 1万+

告别偏色!手把手教你用i1Profiler 3.5为喷墨打印机制作专属ICC曲线(附D50/D65光源选择指南)

本文详细介绍了如何使用i1Profiler 3.5为喷墨打印机制作专属ICC曲线,解决设备偏色问题。从色彩管理基础、软件配置到色块打印与测量实战技巧,逐步指导用户完成曲线制作,并提供了D50/D65光源选择指南,确保色彩还原精准。适合摄影师和设计师提升打印质量。

weixin_30613343的博客 1万+

【WB32库开发】第9章 TIM1高级定时器——输出多路PWM

PWM(Pulse Width Modulation)意为脉冲宽度调制,简称脉宽调制 。在工控行业,PWM信号可以用来调节电机转速、调节变频器以及BLDC电机驱动等;在LED照明行业,可以通过PWM来控制LED的亮暗变化;还可以通过PWM信号来控制无源蜂鸣器发出简单的声音等。 WB32也可输出PWM,需配置WB32上的定时器。 在WB32中有4个定时器,其中TIM1为高级定时器,TIMx(2-4)为通用定时器,这四个定时器均挂载在APB1总线上,每个定时器都可以输出4路PWM。 本章需要使用固件库TIM例程

北海村夫的博客 4637

MFC编辑框的操作

一:获取编辑框中输入的内容 方法1: 在MFC的基本对话框中,创建一个编辑框控件,为控件添加一个类型为CEdit的变量 m_Edit CString str; m_Edit.GetWindowText(str); 方法2: 在MFC的基本对话框中,创建一个编辑框控件,为控件添加一个类型为CString的变量 m_Edit ,m_Edit 就是编辑框内的值。 CString str; str.Format(m_Edit); 方法3:通过ID获取 (更喜欢这种方法,因为一目了然) CString str; Ge

远在远方的风比远方更远 3562

MOSFET高频响应实战:如何用LTspice仿真内部电容效应(附模型文件)

本文深入解析MOSFET高频响应中的内部电容效应,通过LTspice仿真工具详细展示如何提取模型参数并优化高频特性。从栅极相关电容到结电容的物理本质,再到实战案例中的开关损耗分析和频率响应扫描,提供全面的设计优化方法,帮助工程师有效应对高速开关电路中的电容挑战。

weixin_33725722的博客 390

MFC读取TXT文件,写入编辑框

MFC读取TXT文件,写入编辑框我的思路是把txt的内容读到一个数组中,然后调入编辑框中显示,txt文件从文件夹对话框中选择,望MFC的高手能帮我写一下代码。!不胜感激。问题补充:我是这样写的,但是运行后可以读出,并显示,可显示的内容和TXT的内容不一样,只有部分一样,或者多或者少。void CSerialKF1View::OnFileOpen() {// TODO: Add your comma

9749

Android 16强制横竖屏设置

但开发者端的响应却相对滞后,特别是中小型开发团队受限于大屏设备市场渗透率(截至2023年Q2,Android平板全球激活量约1.2亿台,不足手机设备5%)及开发成本考量,适配优先级普遍偏低。这种适配滞后已形成恶性循环——开发者因设备基数不足降低适配意愿,而用户体验缺陷又反向抑制大屏设备的市场接受度。要破解这一困局,既需要Google持续优化Jetpack Compose等现代化UI工具链,更需要建立开发者激励体系,通过应用商店流量倾斜、开发补贴等经济手段提升适配投入产出比。再不肯好好适配大屏设备?

xiangzhihong8的专栏 978

TenserRt平台SMOKE 3D目标检测部署完整教程:从理论到实践

本教程详细介绍了在RK3588平台上部署SMOKE 3D目标检测模型的完整流程。SMOKE是一种创新的单阶段单目3D检测方法,通过关键点估计直接预测3D目标信息,有效解决了深度信息缺失等挑战。文章从理论基础出发,解析了SMOKE的核心算法和网络架构,包括DLA-34主干网络和关键点中心化策略。同时提供了详细的Docker环境配置、模型导出到ONNX格式的实践指南,以及TensorRT引擎构建和性能优化的关键技术要点。该教程为开发者在嵌入式平台上实现高效3D目标检测提供了完整的技术参考。

LXY_LOVE36的博客 371

[MFC] 编辑框中字符串的显示或获取

建立MFC程序应用框架 2.选择基于对话框,完成。 3.打开界面,单机右侧工具箱,给界面添加Edit Control部件,并右键部件添加变量M_edit1

Loewen丶的小窝 1万+

Graphviz安装及使用:决策树可视化

Python大数据分析与机器学习学习笔记 Graphviz安装及使用:决策树可视化

算法工程师 1万+

用MFC实现文件拖放到ListBox

一.对话框工程: 1.建立一个对话框程序,将对话框Extend Style中选中Accept File 选项。 2.在对话框中添加一个listbox控件,ID为IDC_DIALOG_LIST,去掉sort style。 3、手工添加WM_DROPFILES消息响应,这与自定义消息差不多,但更简单,因为这里不需要你定义WM_DROPFILES; (1)在Dialog.h文件声

cjb44444的专栏 710

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

上一篇: 实现文件拖放的一种简洁方法
下一篇: 为CListBox加上智能水平滚动条
普通网友
博客等级 码龄22年 1万+粉丝 3156原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值