C ++ Builder文件拖放的实现方法
CBuilder文件操作大全

在编程的过程中,文件的操作是一个经常用到的问题,在C++Bui lder中,可以使用多种方法对文件操作,下面我就按以下几个部分对此作详细介绍,就是:1、基于C的文件操作;2、基于C++的文件操作;3、基于W INAPI的文件操作;4、基于BCB库的文件操作;5、特殊文件的操作。
壹、基于C的文件操作在A NSI C中,对文件的操作分为两种方式,即流式文件操作和I/O文件操作,下面就分别介绍之。
一、流式文件操作这种方式的文件操作有一个重要的结构FILE,FILE在stdio.h中定义如下:typed ef st ruct{int leve l; /* fill/empt y lev el of buff er */unsi gnedflags; /*Filestatu s fla gs */char fd;/* Fi le de scrip tor */uns igned char hold; /*Unget c cha r ifno bu ffer*/in t bsi ze; /* Buf fer s ize */uns igned char _FAR *buf fer;/* Da ta tr ansfe r buf fer */uns igned char _FAR *cur p; /* Curr ent a ctive poin ter */uns igned iste mp; /* Tem porar y fil e ind icato r */short toke n; /* Used forvalid ity c hecki ng */} FI LE; /* Thi s isthe F ILE o bject */FIL E这个结构包含了文件操作的基本属性,对文件的操作都要通过这个结构的指针来进行,此种文件操作常用的函数见下表函数功能fope n() 打开流f close() 关闭流fp utc()写一个字符到流中fget c() 从流中读一个字符f seek() 在流中定位到指定的字符fputs() 写字符串到流fget s() 从流中读一行或指定个字符fp rintf() 按格式输出到流fsc anf()从流中按格式读取feof() 到达文件尾时返回真值ferro r() 发生错误时返回其值rewin d() 复位文件定位器到文件开始处r emove() 删除文件f read() 从流中读指定个数的字符fwrit e() 向流中写指定个数的字符tmp file() 生成一个临时文件流tm pnam() 生成一个唯一的文件名下面就介绍一下这些函数1.fo pen()fo pen的原型是:FI LE *f open(const char *fil ename,cons t cha r *mo de),f open实现三个功能为使用而打开一个流把一个文件和此流相连接给此流返回一个FI LR指针参数fil ename指向要打开的文件名,mode表示打开状态的字符串,其取值如下表字符串含义"r"以只读方式打开文件"w"以只写方式打开文件"a"以追加方式打开文件"r+"以读/写方式打开文件,如无文件出错"w+"以读/写方式打开文件,如无文件生成新文件一个文件可以以文本模式或二进制模式打开,这两种的区别是:在文本模式中回车被当成一个字符'\n',而二进制模式认为它是两个字符0x0D, 0x0A;如果在文件中读到0x1B,文本模式会认为这是文件结束符,也就是二进制模型不会对文件进行处理,而文本方式会按一定的方式对数据作相应的转换。
vc实现拖放控件

基于对话框的文件拖拽载入2011年4月7日梁昭发表评论阅读评论不知道你是否对QQ文件传输比较好奇?将文件拖入对话窗口,就可以实现文件的传输...其实在MFC中实现起来比较简单,在Windows中已经将消息封装好了。
这一节我们主要来学习一下基于对话框的文件拖拽功能!(1)最容易出错且较易遗忘的一步:选中对话框的属性"Accept files",细心一点容易发现,基本上所有的控件都有这个属性,注意只要将对话框的这个属性设置就行了,其余控件的属性不要进行设置。
否则主窗口的Accept files可能不起作用。
(2)将对话框的WM_DropFiles消息映射添加进来,(3)使用Win32 API可以轻易地在自己的GUI程序中加入拖放支持。
你需要了解这样几个函数DragAcceptFiles函数原型:VOID DragAcceptFiles(HWND hWnd, BOOL fAccept);此函数告诉Windows窗口hWnd是否接受从shell拖放过来的文件,fAccept=TRUE表示接受拖放。
这意味着窗口hWnd必须能够处理WM_DROPFILES消息。
DragFinish函数原型:VOID DragFinish(HDROP hDrop);在Drag-and-Drop过程完成时调用,从而允许shell释放为传递文件名而开辟的内存空间。
hDrop是WM_DROPFILES消息的WParam参数。
DragQueryFile函数原型:UINT DragQueryFile(HDROP hDrop, UINT iFile, LPTSTR lpszFile, UINT cch);此函数用来获取拖放的文件名。
hDrop是WM_DROPFILES消息的WParam参数,lpszFile是用于容纳文件名的缓冲区,cch是该缓冲区的大小。
设置iFile=0xFFFFFFFF的话,此函数返回拖放的文件总数,记为count。
C++BUILDER的文件操作

C++BUILDER的文件操作在BCB中提供了文件操作的函数,这类函数和BCB关系紧密,能使用BCB中的AnsiString等数据类型,在BCB中用这种方式的文件操作是最方便的,下面我就把这种文件操作详细介绍。
在BCB提供的这组文件操作函数中,可分为三种类型,就是:1、文件名函数,2、文件管理函数;3、文件I/O函数。
1、文件名函数文件名函数可以对文件的名称、所在子目录、驱动器和扩展名等进行操作。
下表列出这些函数及其功能。
函数说明ExpandFileName() 返回文件的全路径(含驱动器、路径)ExtractFileExt() 从文件名中抽取扩展名ExtractFileName() 从文件名中抽取不含路径的文件名ExtractFilePath() 从文件名中抽取路径名ExtractFileDir() 从文件名中抽取目录名ExtractFileDrive() 从文件名中抽取驱动器名ChangeFileExt() 改变文件的扩展名ExpandUNCFileName() 返回含有网络驱动器的文件全路径ExtractRelativePath() 从文件名中抽取相对路径信息ExtractShortPathName() 把文件名转化为DOS的8·3格式MatchesMask() 检查文件是否与指定的文件名格式匹配下面就把这些函数作一一介绍:⑴ExpandFileName()原型:extern PACKAGE AnsiString __fastcall ExpandFileName(const AnsiString FileName);功能:返回文件的全路径(含驱动器、路径)参数:FileName:要处理的文件名例:ShowMessage(ExpandFileName(Application->ExeName));//显示你的程序文件名,如C:\MyBCB\Sample1.EXE⑵ExtractFileExt()原型:extern PACKAGE AnsiString __fastcall ExtractFileExt(const AnsiString FileName);功能:从文件名中抽取扩展名参数:FileName:要处理的文件名(全路径)例:ShowMessage(ExtractFileExt(Application->ExeName));//显示".exe"⑶ExtractFileName()原型:extern PACKAGE AnsiString __fastcall ExtractFileName(const AnsiString FileName);功能:从文件名中抽取不含路径的文件名参数:FileName:要处理的文件名例:ShowMessage(ExtractFileExt("c:\\Winnt\\SOL.EXE"));//显示"SOL.EXE"⑷ExtractFilePath()原型:extern PACKAGE AnsiString __fastcall ExtractFilePath(const AnsiString FileName);功能:从文件名中抽取路径名参数:FileName:要处理的文件名例:ShowMessage(ExtractFilePath("Winnt\\SOL.EXE"));//显示"Winnt\"⑸ExtractFileDir()原型:extern PACKAGE AnsiString __fastcall ExtractFileDir(const AnsiString FileName);功能:从文件名中抽取目录名(和上个函数不同,不包括最后的"\")参数:FileName:要处理的文件名例:ShowMessage(ExtractFileDir("Winnt\\SOL.EXE"));//显示"Winnt",注意和上个函数的区别⑹ExtractFileDrive()原型:extern PACKAGE AnsiString __fastcall ExtractFileDrive(const AnsiString FileName);功能:从文件名中抽取驱动器名参数:FileName:要处理的文件名例:ShowMessage(ExtractFileDrive("c:\\Winnt\\SOL.EXE"));//显示"c:"⑺ChangeFileExt()原型:extern PACKAGE System::AnsiString __fastcall ChangeFileExt(const System::AnsiString FileName, const System::AnsiString Extension);功能:更改文件名的扩展名,不是对真正的文件进行改名,只是对文件名这个字符串进行处理参数:FileName:要改名的文件名,Extension:新的扩展名例:ShowMessage(ChangeFileExt("c:\\Winnt\\SOL.EXE",".OOO"));//显示"c:\winnt\SOL.OOO"⑻ExpandUNCFileName()原型:extern PACKAGE AnsiString __fastcall ExpandUNCFileName(const AnsiString FileName);功能:返回含有网络驱动器的文件全路径,格式为:\\机器名\共享名\文件名参数:FileName:要处理的文件名例:ShowMessage(ExpandUNCFileName("F:\\Winnt\\SOL.EXE"));/*如果F:是映射的网络驱动器\\NT40\WINNT,则显示"\\NT40\WINNT\SOL.EXE"*/⑼ExtractRelativePath()原型:extern PACKAGE AnsiString __fastcall ExtractRelativePath(const AnsiString BaseName, const AnsiString DestName);功能:从文件名中抽取相对路径信息,如"..\sss\ss.asd"这种形式参数:BaseName:基准文件名;DestName:目标文件名例:ShowMessage(ExtractRelativePath("D:\\Source\\c\\1.123","D:\\Source\\Asm\\dz.asm"));/*显示"..\asm\dz.asm"*/⑽ExtractShortPathName()原型:extern PACKAGE AnsiString __fastcall ExtractShortPathName(const AnsiString FileName);功能:把文件名转换为DOS的8、3格式参数:FileName:要处理的文件名例:ShowMessage(ExtractShortPathName("E:\\Program Files\\Dual Wheel Mouse\\4dmain.exe"));/*显示"E:\Progra~1\dualwh~1\4dmain.exe"*/⑾MatchesMask()原型:extern PACKAGE bool __fastcall MatchesMask(const AnsiString Filename, const AnsiString Mask);功能:检查文件是否与指定的文件名格式匹配参数:FileName:要处理的文件名;Mask:文件名格式,支持通配符例:ShowMessage(MatchesMask("Lxf.exe","*.?x?));//显示"true"--------------------------------------------------------------------------------2、文件管理函数这类函数包括设置和读取驱动器、子目录和文件的有关的各种操作,下表列出这类操作常用的函数及其功能。
mfc文件拖拽

COleDataSource::OnRenderFileData(lpFormatEtc,pFile);
return FALSE;
}
有了以上数据源之后,就可以在消息WM_LBUTTON的响应函数OnLButtonDown()中,按如下方式,指定使用的数据格式:
myDataSource* pItemDragDrop=new myDataSource;
pItemDragDrop->str="This string will dragdrop to another place";
pItemDragDrop->DelayRenderFileData(CF_TEXT,NULL);
下例只允许移动对象,而不允许复制对象:
DROPEFFECT myView::OnDragEnter(......)
{
return DROPEFFECT_MOVE;
}
DROPEFFECT myView::OnDragOver(......)
DROPEFFECT_MOVE---表明可以把对象复制到现在的窗口、现在的位置;
DROPEFFECT_COPY---表明可以把对象从原来的窗口、原来的位置移到现在的窗口、现在的位置;
DROPEFFECT_NONE---表明不能在该窗口的该位置放下。
要实现一次对象拖放,需要做三方面的工作:对象所在的窗口准备拖放对象并启拖动操作,接受对象的窗口响应有关拖放消息并接受落下的对象,以及拖放完成时的后期处理。
1. 拖动操作的启动。拖放操作一般是从单击鼠标左键开始。在消息WM_LBUTTONDOWN的响应函数OnLButtonDown(...)中,首先要判定是否选定了某一对象,如果未选定或选定多个,则不能进行拖放操作;如果选定了一个对象,则可以进行拖放操作。要启动一次拖放操作,需要先准备一个COleDataSource对象。注意到类COleClientIten和类COleServerItem都是从类COleDataSource上派生的,如果选定的是COleClientItem对象或者是COleServerItem对象,则可以直接使用;否则,需要生成一个COleDataSource对象,值得注意的是:需要象上文中所说的,应该指定使用的数据格式,并按指定格式提供对象的有关数据。
单片机拖拽编程

单片机拖拽编程
单片机拖拽编程是一种基于图形化编程环境的编程方式,它允许用户通过拖拽图形化元件(如按钮、LED灯等)到程序代码中,实现对单片机的控制。
这种方式通常用于嵌入式系统开发,如Arduino、Raspberry Pi等。
在拖拽编程环境中,用户可以通过以下步骤进行编程:
1.打开拖拽编程环境,如Arduino IDE、Thonny等。
2.连接单片机开发板到电脑。
3.在拖拽编程环境中选择相应的单片机型号。
4.在程序代码区域编写控制单片机的代码。
5.将程序上传到单片机,观察单片机运行效果。
以Arduino为例,以下是一个简单的拖拽编程示例:
```cpp
//定义LED灯连接到的数字引脚
const int ledPin=13;
void setup(){
//设置数字引脚为输出模式
pinMode(ledPin,OUTPUT);
}
void loop(){
//点亮LED灯
digitalWrite(ledPin,HIGH);
//延时1秒
delay(1000);
//熄灭LED灯
digitalWrite(ledPin,LOW);
//延时1秒
delay(1000);
}
```
在这个示例中,我们首先定义了一个LED灯连接到的数字引脚(13),然后在`setup()`函数中将其设置为输出模式。
在`loop()`函数中,我们通过`digitalWrite()`函数控制LED灯的亮灭,并使用`delay()`函数添加延时。
用MFC实现文件拖放(获得文件路径)

DragAcceptFiles();//向file manager注册自己,使自己能接受droped file(s) CRect rect(0,0,100,80); m_View_List.Create(WS_VISIBLE|WS_VSCROLL,rect,this,IDC_VIEW_LIST);//创建listbox
void CMyDragView::OnDropFiles(HDROP hDropInfo) { // TODO: Add your message handler code here and/or call default int DropCount=DragQueryFile(hDropInfo,-1,NULL,0);//取得被拖动文件的数目 for(int i=0;i< DropCount;i++) { //取得第i个拖动文件名所占字节数 int NameSize=DragQueryFile(hDropInfo,i,NULL,0); HANDLE hHeap=GetProcessHeap(); //根据字节数分配缓冲区 //char *pName=new char[++NameSize]; char *pName=(LPSTR)HeapAlloc(hHeap,HEAP_ZERO_MEMORY,NameSize++);
1、用MFC Appwizard创建一个基于SDI的新工程,命名为Drag,除第一步选择第一项以外,其余全用默认设置。
2、DragView.h文件
Hale Waihona Puke CListBox m_View_List;
3、DragView.cpp文件
---- 用classwizard添加WM_CREATE消息响应,然后在OnCreate函数中添加如下代码:
C++BuilderIDE使用技巧与快捷键

C++BuilderIDE使用技巧与快捷键1、快速选择Form在开发应用程序时,经常需要选中Form来改变Form的属性值或生成新的Form事件句柄。
有些时候,选择页面只需简单在页面上单击。
但更多的时候,页面总是完全被其上的组件所隐藏。
通过对象观察器(Object Inspector)顶端的下拉组合框来选择是一种解决办法。
但从下拉列表中找出form类并不容易,尤其在页面包含了大量的组件时。
IDE提供了选择form的快捷键。
如当一个Memo组件以client 方式充满了整个form的客户区域时。
要想选择form,只要在Memo 上单击,然后按下Esc键,就会选中form。
因为IDE将焦点转向了最初所选对象的父对象。
如有多个组件重叠。
多按几次Esc键后,就会选中form。
2、复选container(容器)中的组件Panel面板经常被用作其他组件的容器。
如要同时选中Panel面板上的几个组件来移动它们或是改变它们的共同属性。
一般可以通过Shift+单击来选择这些组件。
但如想通过拖动鼠标来选的话,只会将panel拖的到处乱跑。
按下Ctrl键再拖的话,就能选中后进行拖动。
这个办法适用于所有的容器类组件(GroupBox, ScrollBox, ControlBar,等等)。
3、微调组件选中一个组件后,按住Ctrl键再按下方向键(四个箭头)可以将组件往相应的方向以像素点为单位移动。
同时按住Shift 和 Ctrl键,再按一下方向键的话可以使组件移至下一个网格定位点。
要想组件往相应的方伸长或缩短一个像素点的话,按住Shift键再按方向键。
左右键调整组件宽度,上下键调整组件高度。
4、同时改变数个组件的属性当选择了多个组件时,对象观察器(Object Inspector)将会显示这些组件的共同属性。
如想让Form中的数个Edit组件都有同样的宽度的话,只需同时选中它们,然后在对象观察器中改变Width属性,所有您选中的组件宽度都会变成新的宽度值。
vc 在切分窗口之间实现拖放

在切分窗口之间实现拖放在许多象资源管理器界面风格的应用程序中,很多的情况下要用到在不同的视之间的拖放操作。
本文就具体给出了实现方法,望能给读者一参考。
(本文中用到的工程是左边具有目录树视、右边具有列表视)首先,两个视都应该有它们自己的实现函数来进行拖放操作。
只要不设置"SetCapture/ReleaseCapture",被拖放的条目就能从原来的视拖放到目的视。
如果被拖的条目(鼠标下的)离开了原来的视,那么目的视的ON_WM_MOUSEMOVE()-消息就获得了该条目的控制条件。
所以我们必须保证不同的视(原来的视以及目的视)能访问相同的成员变量,从而可以在app类里面定义。
接下来,我们就在app类里面定义一些成员变量:public://拖放成员变量:CImageList *cpDragImage;BOOL cDragging;CWnd *cpDragWnd;CWnd *cpDropWnd;HTREEITEM cTreeItemDrag;HTREEITEM cTreeItemDrop;int cListItemDragIndex;int cListItemDropIndex;CPoint cDropPoint;//列表视需要一个全局变量来验证目标的位置好,我们现在来完成我们的主框架类:为了能从列表视访问目录树视,我们用到了一个小小的帮助函数(但是如果你在项目向导里选择了"资源管理器风格"的话, "GetRightPane()"就不用在定义了),返回当前窗口指针。
CMyListView* CMainFrame::GetRightPane(){CWnd* pWnd = m_wndSplitter.GetPane(0, 1);CMyListView* pView = DYNAMIC_DOWNCAST(CMyListView, pWnd);return pView;}CMyTreeView* CMainFrame::GetLeftPane(){CWnd* pWnd = m_wndSplitter.GetPane(0, 0);CMyTreeView *pTree = DYNAMIC_DOWNCAST(CMyTreeView, pWnd);return pTree;}现在到目录树视了:为了能访问需要的成员变量,我们还是先定义了一个帮助函数从而可以轻易的访问我们的app类:CMyApp *CMyTreeView::GetApp(){return ( (CMyApp*)AfxGetApp() );}三个消息处理函数:ON_WM_LBUTTONUP()ON_WM_MOUSEMOVE()ON_NOTIFY_REFLECT(LVN_BEGINDRAG, OnBegindrag)把这个视所能设置的元素都设成是开始拖的状态,而目的视也许是本身,或是别的视。
C++Builder+6的文件和文件夹操作

VC下在对话框上实现接受文件拖放

VC下在对话框上实现接受文件拖放(Drop files) 收藏大部分Windows应用工具程序都能响应接受文件拖放,比如Word,Notepad等当把文件直接拖拽到该窗体或者是某个控件下,应用程序会直接打开这个文件,这样将极大的方便客户使用本文就是介绍这个的实现,跟以前一样,不看到代码一定会很不爽:1. 首先先将您的CDialog设置为Accept files,通过代码或者选项点击都可以实现2. 添加函数声明和消息映射//添加事件声明(尽量写在"AFX_MSG"宏外面.我记得写在里面会出现错误)afx_msg void OnDropFiles( HDROP hDropInfo );//添加消息映射(尽量写在"AFX_MSG_MAP"宏外面.我记得写在里面会出现错误)ON_WM_DROPFILES()3. 下一步就是函数的实现//实现(WINDOWS系统是支持多个文件同时拖放的)void CMyDlg::OnDropFiles( HDROP hDropInfo ){UINT cFiles = ::DragQueryFile( hDropInfo, 0xffffffff, 0, 0); //取得文件数CString szText;char szFile[MAX_PA TH];for( UINT count = 0; count < cFiles; count++ ){if(cFiles>0){::DragQueryFile(hDropInfo, count, szFile, sizeof(szFile));szText += szFile; //绝对路径+文件名存于szFileszText += "\r\n"; //取所有的文件到szText中,一行一个//break; //只取得第一个文件}}//相应操作}ps: 现在这个实现只实现Dialog的拖放操作,未能实现特定控件的拖放操作,但是理论上是可以用这个实现的,因为一般都是CWnd的子类(有些控件不是),那就请读者自己实现一把了本文来自CSDN博客,转载请标明出处:/equationdz/archive/2008/02/17/2100781.aspx我写了一个基于对话框的程序,里面有一个CEdit控件。
C++BUILDER的文件操作

C++BUILDER的文件操作在编程的过程中,文件的操作是一个经常用到的问题,在C++Builder中,可以使用多种方法对文件操作,下面我就按以下几个部分对此作详细介绍,就是:1、基于C的文件操作;2、基于C++的文件操作;3、基于WINAPI的文件操作;4、基于BCB库的文件操作;5、特殊文件的操作。
这次我首先写出第一篇,以后我会陆续写出其它部分在我主页中发表。
壹、基于C的文件操作在ANSI C中,对文件的操作分为两种方式,即流式文件操作和I/O 文件操作,下面就分别介绍之。
一、流式文件操作这种方式的文件操作有一个重要的结构FILE,FILE在stdio.h中定义如下:typedef struct {int level; /* fill/empty level of buffer */unsigned flags; /* File status flags */char fd; /* File descriptor */unsigned char hold; /* Ungetc char if no buffer */int bsize; /* Buffer size */unsigned char _FAR *buffer; /* Data transfer buffer */unsigned char _FAR *curp; /* Current active pointer */unsigned istemp; /* Temporary file indicator */short token; /* Used for validity checking */} FILE; /* This is the FILE object */FILE这个结构包含了文件操作的基本属性,对文件的操作都要通过这个结构的指针来进行,此种文件操作常用的函数见下表函数功能fopen() 打开流fclose() 关闭流fputc() 写一个字符到流中fgetc() 从流中读一个字符fseek() 在流中定位到指定的字符fputs() 写字符串到流fgets() 从流中读一行或指定个字符fprintf() 按格式输出到流fscanf() 从流中按格式读取feof() 到达文件尾时返回真值ferror() 发生错误时返回其值rewind() 复位文件定位器到文件开始处remove() 删除文件fread() 从流中读指定个数的字符fwrite() 向流中写指定个数的字符tmpfile() 生成一个临时文件流tmpnam() 生成一个唯一的文件名下面就介绍一下这些函数1.fopen()fopen的原型是:FILE *fopen(const char *filename,const char *mode),fopen实现三个功能为使用而打开一个流把一个文件和此流相连接给此流返回一个FILR指针参数filename指向要打开的文件名,mode表示打开状态的字符串,其取值如下表字符串含义"r" 以只读方式打开文件"w" 以只写方式打开文件"a" 以追加方式打开文件"r+" 以读/写方式打开文件,如无文件出错"w+" 以读/写方式打开文件,如无文件生成新文件一个文件可以以文本模式或二进制模式打开,这两种的区别是:在文本模式中回车被当成一个字符'\n',而二进制模式认为它是两个字符0x0D,0x0A;如果在文件中读到0x1B,文本模式会认为这是文件结束符,也就是二进制模型不会对文件进行处理,而文本方式会按一定的方式对数据作相应的转换。
mfc 对象拖拽 编程

mfc 对象拖拽编程摘要:1.MFC 对象拖拽编程概述2.MFC 对象的拖拽实现方法3.拖拽过程中需要注意的问题4.总结与展望正文:MFC(Microsoft Foundation Class)是微软提供的一套C++类库,用于简化Windows 应用程序的开发。
在MFC 中,我们可以通过拖拽操作来移动或复制对象。
本文将详细介绍MFC 对象拖拽编程的相关知识和技巧。
1.MFC 对象拖拽编程概述MFC 对象拖拽编程是指在MFC 框架下,利用拖拽操作实现对窗口中对象(如按钮、文本框等)的移动或复制。
要实现这一功能,我们需要对MFC 的的消息处理机制有一定了解。
在拖拽操作中,最为关键的消息是WM_LBUTTONDOWN、WM_LBUTTONUP 和WM_MOVE。
2.MFC 对象的拖拽实现方法要实现MFC 对象的拖拽操作,我们需要分以下几个步骤进行:(1)重载鼠标按下(WM_LBUTTONDOWN)消息处理函数,在此消息处理函数中,我们需要记录当前鼠标位置和被拖拽对象的当前位置。
(2)重载鼠标抬起(WM_LBUTTONUP)消息处理函数,在此消息处理函数中,我们需要清除拖拽状态,并设置被拖拽对象的新的当前位置。
(3)重载窗口移动(WM_MOVE)消息处理函数,在此消息处理函数中,我们需要根据鼠标位置和被拖拽对象的当前位置计算出新的窗口位置,并更新窗口的客户区域。
(4)处理拖拽过程中的键盘消息,例如当用户按下键盘上的ESC 键时,需要取消拖拽操作。
3.拖拽过程中需要注意的问题在实现拖拽操作的过程中,需要注意以下几个问题:(1)在拖拽过程中,被拖拽对象需要始终保持在鼠标光标的正下方,以实现平滑的拖拽效果。
(2)在拖拽过程中,如果鼠标点击了其他非拖拽对象的区域,需要立即停止拖拽操作。
(3)在拖拽过程中,如果用户按下了键盘上的ESC 键,需要立即取消拖拽操作。
4.总结与展望MFC 对象拖拽编程是MFC 编程中一个常见的功能,通过本文的介绍,相信你已经掌握了实现该功能的方法。
c#实现文件拖入和拖出(拖拽)

c#实现⽂件拖⼊和拖出(拖拽)C# WinForm下⼀步⼀步实现⽂件的拖⼊和拖出作者:Eaglet在WinForm实现⼀个类似资源浏览器的功能,需要实现将WinForm中列出的⽂件拖出到其他应⽤程序中或者从其他应⽤程序中将⽂件拖⼊到Winform应⽤中。
⽹上有⼀些⽂章介绍这种功能,但都⽐较零散,缺少⼀个完整的例⼦。
为此我编写了⼀个较完整的实现⽂件拖⼊和拖出的例⼦,并撰写此⽂⼀步步讲解如果实现类似功能。
步骤1 放置⼀个 ListView 到 Winform窗体中并初始化如下属性:listView.View = View.Details;listView.AllowDrop = true; 步骤2 撰写⼀个⽬录⽂件列表显⽰的函数/**//// <summary>/// List files in the folder/// </summary>/// <param name="directory">the directory of the folder</param>private void ListFolder(string directory){labelCurFolder.Text = directory;String[] fileList = System.IO.Directory.GetFiles(directory);listViewFolder.Items.Clear();listViewFolder.Columns.Clear();listViewFolder.Columns.Add("Name", 300);listViewFolder.Columns.Add("Size", 100);listViewFolder.Columns.Add("Time", 200);foreach (string fileName in fileList){//Show file nameListViewItem itemName = new ListViewItem(System.IO.Path.GetFileName(fileName));itemName.Tag = fileName;//Show file iconIconImageProvider iconImageProvider = new IconImageProvider(listViewFolder.SmallImageList,rgeImageList);itemName.ImageIndex = iconImageProvider.GetIconImageIndex(fileName);//Show file sizeSystem.IO.FileInfo fileInfo = new System.IO.FileInfo(fileName);long size = fileInfo.Length;String strSize;if (size < 1024){strSize = size.ToString();}else if (size < 1024 * 1024){strSize = String.Format("{0:###.##}KB", (float)size / 1024);}else if (size < 1024 * 1024 * 1024){strSize = String.Format("{0:###.##}MB", (float)size / (1024 * 1024));}else{strSize = String.Format("{0:###.##}GB", (float)size / (1024 * 1024 * 1024));}ListViewItem.ListViewSubItem subItem = new ListViewItem.ListViewSubItem();subItem.Text = strSize;subItem.Tag = size;itemName.SubItems.Add(subItem);//Show file timesubItem = new ListViewItem.ListViewSubItem();DateTime fileTime = System.IO.File.GetLastWriteTime(fileName);subItem.Text = (string)fileTime.ToLocalTime().ToString("yyyy-MM-dd HH:mm:ss"); ;subItem.Tag = fileTime;itemName.SubItems.Add(subItem);listViewFolder.Items.Add(itemName);}}上⾯代码中有⼀段显⽰图标的代码由于和拖动⽆关,我就不贴出来了,感兴趣可以下载完整的代码去看。
C#窗体实现文件拖拽功能-电脑资料

C#窗体实现文件拖拽功能-电脑资料1、首先要把你的窗体或者空间的AllowDrag属性设置为允许2、注册DragEnter事件3、获得文件路径,先通过e.Data.GetFormats()方法获得所有数据格式4、调用e.GetData()方法根据指定的数据格式获得文件路径5、有了文件路径,相信一切问题迎刃而解下面是例子:[csharp]private void textBox1_DragEnter(object sender, DragEventArgs e){//获得数据格式File.WriteAllLines("C:\\1.text", e.Data.GetFormats());//获得文件名string[] filename = (string[])e.Data.GetData("FileNameW",true);textBox1.Text = filename[0];string entesion = Path.GetFileName(textBox1.Text);if (!File.Exists(textBox1.Text.Trim())) { return; }//读取文件流using (FileStream fsOpen = File.OpenRead(textBox1.Text.Trim())){using (FileStream fs = new FileStream("C:\\" + entesion, FileMode.Create, FileAccess.Write)){byte[] buffer = new byte[1024 * 1024];while (true){int result = fsOpen.Read(buffer, 0, buffer.Length);if (result <= 0){break;}else{fs.Write(buffer, 0, result);}}fs.Flush();}}}运行结果:补充一点:在win7下可能是因为权限不均衡不触发DragDrop事件,所以我在里只用到DragEnter事件,你们可以试下DragDrop事件,可能用户体验要好点!。
C++ Builder文件拖放的实现方法

C++ Builder文件拖放的实现方法
梁祎
【期刊名称】《软件导刊》
【年(卷),期】2010(009)009
【摘要】开发了一种在C++Builder平台下将多种控件集成在同一应用程序中的软件,该软件可以通过拖放来打开各种文件,简化了文件操作,且可以方便地增加新的文件类型.该程序可识别txt、cpp、bpr、dpf、bmp、doc为后缀名的文件;还具有可扩展性,在其中添加常用的文件,功能将更强大.
【总页数】3页(P29-31)
【作者】梁祎
【作者单位】中南民族大学,计算机科学学院,湖北,武汉,430074
【正文语种】中文
【中图分类】TP312
【相关文献】
1.基于C++ Builder 6的串口通信程序实现方法研究 [J], 余昌盛;许力
2.探讨数据完整性控制在c++ Builder中实现的几种方法 [J], 林达德
3.一种实现C++ Builder与Matlab混合编程的方法 [J], 董理;熊先锋
4.Win 32中实现从资源管理器到应用程序拖放文件的方法 [J], 张春旺
5.基于C++ Builder的串口通信程序实现方法 [J], 王娟;黄耀群
因版权原因,仅展示原文概要,查看原文内容请购买。
PowerBuilder第18讲 拖放技术

在窗口画板中定义某个控件的自动拖动模式的步骤如下: (1)打开该控件的Properties视图的Other标签页。 (2)选中DragAuto复选框,即将该控件的DragAuto属性设为True。 2.DragIcon属性 如果使用DragIcon属性为某个控件定义了一个图标,则当该控件处于 拖放模式时,这个图标将代替原控件显示在屏幕上,表示其处于 一个有效的拖放区。当控件处于一个非有效区域时(如窗口的滚 动条上),就会显示非放下(NO_Drop)图标。 定义一个拖放图标的步骤如下: (1)打开该控件的Properties视图的Other标签页。 (2)从图标列表中选择一个图标或使用Browse按钮选择一个ICO文 件即可。
第一页
上一页 下一页
最后 一页
结束 放映
1. 创建Application对象 2. 创建数据窗口对象 这里使用PowerBuilder本身所带的EAS Demo DB V4数据库Employee表。 3. 创建窗口和添加控件 4. 脚本说明 (1) 在Application的Open事件中添加脚本 // Profile EAS Demo DB V4 SQLCA.DBMS = "ODBC" SQLCA.AutoCommit = False SQLCA.DBParm = "ConnectString=‘DSN=EAS Demo DB V4;UID=dba;PWD=sql'" Open(w_newtv) (2) 声明实例变量 long ll_source,xt_rootitem
第18讲 拖放技术
拖放是一种用来完成对象上操作的方法,
它通过单击对象并在移动鼠标时按住鼠 标按钮来实现,这个过程叫做拖动 (Dragging)。然后把对象移动到指定 的对象并释放鼠标,这个过程叫做释放 (Dropping)。因此,拖放是一种通过 鼠标直接操纵对象及其数据的方法。
c#中实现文件拖放打开的方法

c#中实现⽂件拖放打开的⽅法C#实现⽂件拖放并打开⽂件需要知道的ListBox的两个事件:当您在控件的边界内拖动对象时,便会发⽣ DragEnter 事件;该事件⽤于确定当前拖动的对象是不是您要放到控件上的对象。
在将⼀个或多个⽂件拖到控件上时,需要处理此事件。
这使得在将对象拖到控件上⽅时,能够根据所拖动的对象显⽰相应的图标。
将拖动的对象释放到控件上时,会发⽣DragDrop 事件。
功能描述:向ListBox拖⼊⼀个⽂件,ListBox显⽰该⽂件的路径,然后单击该路径,点击Open按钮打开该⽂件。
代码实现:需要将ListBox的AllowDrop属性改为true,并实现它的DragEnter、DragDrop这两个事件。
复制代码代码如下:using System;using System.Collections.Generic;using ponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;namespace DragDrop{public partial class DragDrop : Form{public string FilePath;public DragDrop(){InitializeComponent();}/// <summary>/// 获取ListBox的值。
/// </summary>/// <returns></returns>public string GetListBoxItem(){string filePath = string.Empty;bool isSelected = IsListBoxSelected();if (isSelected==true){string listBoxItemValue = lbFilePath.SelectedItem.ToString();filePath = listBoxItemValue;}else{MessageBox.Show("ListBox must be selected.");}return filePath;}/// <summary>/// ListBox内的值是否被选中。
C#Winform涉及的拖放操作总结

C#Winform涉及的拖放操作总结在开发程序的时候,为了提⾼⽤户的使⽤体验,或满⾜相关⽤户的功能,总是离不开拖放功能。
⽽本⽂是总结winform下的常⽤拖放操作。
主要有1.textbox接受拖放的⽂件2.listbox允许⽤户⾃定义排序3.listbox之间的拖放4.控件的拖放5.console的拖放问题⽤户在进⾏拖放操作时,经过的步骤⼤体如下:例如将A中的数据拖放的B中⿏标点击A中的数据(MouseDown)->⿏标移动(MouseMove)->出源数据边界,即出A(DragLeave)->进⼊⽬标边界,进⼊B(DragEnter)->在B中移动,选择放数据的位置,即拖动效果(DragOver)->抬起⿏标(MouseDown)->将A数据放到B中,拖放结束。
(DragDrop,所有的拖放都涉及DragDrop事件)。
下⾯的所有例⼦,都会使⽤到上⾯所列举的⼏个事件。
⼀、textbox接受拖放的⽂件。
为了⽅便⽤户的使⽤,这个应该是最常⽤到的操作。
加⼊这个功能,可以使⽤户省去“打开⽂件对话框,然后选择⽂件”的操作。
在这个例⼦中,我们不需要知道⽤户的点击,即选择了什么⽂件。
只需要了解⽤户拖动⽂件进⼊Textbox(DragEnter),并松开⿏标,完成拖放(DragDrop)。
主要涉及到两个事件。
DragEnter:在将对象拖⼊控件的边界时发⽣。
判断是否是⽂件拖放DragDrop:在完成拖放操作时发⽣。
判断⽂件类型,只添加txt⽂件⾸先添加⼀个textBox控件,将控件的属性设置为AllowDrop=True,Multiline=True代码如下:private void textBox1_DragEnter(object sender, DragEventArgs e){if (e.Data.GetDataPresent(DataFormats.FileDrop)){e.Effect = DragDropEffects.Copy;}}private void textBox1_DragDrop(object sender, DragEventArgs e){string[] files = (string[])e.Data.GetData(DataFormats.FileDrop);foreach (string file in files){if(Path.GetExtension(file)==".txt") //判断⽂件类型,只接受txt⽂件{textBox1.Text += file + "\r\n";}}}⼆、listbox允许⽤户⾃定义排序。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
・
3 0・
An itigExe so sSr tn in; n
软 件 导 刊
I g - Viil= as ; ma e > sb e fle 1
相 应 的文 件 。
用 函数 E tni .o eC s ( xe s nL w r ae )将文 件名称 统一 设置 为小 写格 o 式, 以便 于与程 序 中所对应 的控 件进 行 比较 。最 后调 用类 型判
断 函数来实 现 . 码 如下 : 代
vi od
_
当应用 程序 运行 时 . 作者 可 以将 要打 开 的文件 拖放 到所 操
打 开 的应 用程序 窗 口中 。 过 A 1 通 P 函数 和消息 映射来 分别 向 系 统 注册本 程序可 以拖 放文件 和捕 获文 件拖放 的消 息 , 这样 也实
现 了 对 文 本 文 档 、 图 片 文 件 、D P F格 式 文 件 以 及 Wod文 档 的 r
fs al F Βιβλιοθήκη :u rn ) at lT oml :nu ( c
1 功能 简 介
本应 用程序 在未 运行 时 . 作者 可 以把要 打开 的文 件直 接 操 拖 放 到指定 的图标 中 , 据程 序 获得 所拖 放 文件 的路 径 , 现 根 实 对 文本 文档 、 图片 文件 、 D P F格式 文件 以及 w0d文 档 的浏 览 , r 像 Wid w 平 台下 的一 些快 捷 方式 图标 一 样 ,可 以直 接拖 放 no s
{
S o Mesg (ag [ ] ; h w sa e_ rv 1 )
An i ti g i Na = sS rn F l e me
_
ag [ ] / 将 所 获 取 的 文 件 路 径 放 rv 1 ; /
浏览 。
入 到 FlN me中 : i a e
作者 简介 : 梁稀 (9 7 , , 1 8 一) 女 山西 太原人 , 中南民族 大 学计 算机 科 学学 院硕士研 究 生 , 究方 向为算 法研 究与 网络信 息安 全。 研
摘 要 : 发 了一 种 在 C B i e 开 ul r平 台 下 将 多种 控 件 集 成 在 同一 应 用程 序 中 的 软 件 , 软 件 可 以通 过 拖 放 来 打 开 各 d 该 种 文 件 , 化 了文 件 操 作 , 可 以 方 便 地 增 加 新 的 文 件 类 型 。 该 程 序 可 识 别 ttcp b rdfb p dc为后 缀 名 的 文 简 且 x、p 、p 、p 、m 、o
第9 第 9 卷 期
2 1年 9月 00
软 件 导 刊
S fwae Gu d Ot r Ie i
VO . 1 NO. 9 9 So2 0 e . 01
-
IB i e 文件 拖放 的 实现 方法 - ul r + d
梁 弄 书
( 中南 民族 大 学 计算机 科 学 学院 , 湖北 武汉 4 0 7 ) 3 0 4
功能 。 本 文 介 绍 了在 C ule 平 台 下 设 计 的 一 种 软 件 , 过 操 “B i r d 通
2 具 体 实现 方 法
本 软件 在实 现过程 中 , 主要从 以下两个 方 面进行 考 虑 。根 据用户 需求 , 当程序 未运行 时 , 相应 的文件 拖放 至小 图标 中 , 将 使 程序 读取所 拖放 文件 的路 径 , 据不 同类 型 的文 件在 程序 中 根 选 择相 应 的控件 , 将其 打开 ; 在程序 运行 时 , 通过 消息 映射机 制 来 获取 文件路 径 , 断文件 的类 型 , 判 选择 相应 的打开方 式打 开 。
件 ; 具有 可扩展性 , 其 中添加 常 用的文件 , 能将 更 强大 。 还 在 功
关 键 词 : B i e ; 成 ; 放 ; 件 C ul r 集 d 拖 控
中图分 类号 :P 1 T 32
文献标识 鸸 : A
文章 编号 :6 2 7 0 (0 0 0 — 0 9 0 17 — 8 0 2 1 )9 0 2 — 3
21 应 用 程 序 未 运 行 .
() 1 获取所 拖放 文件 的名 字和路 径 。熟 悉 C编程 的人都 知
道 man函数带有 2个 参数 :rc和 ag , i ag rv 完整 的 ma i n函数定 义 是 : t an it rc ca*rv ] 。在程 序未 运行 时 , 拖放 的 i i ( g ,hrag [ ) nm na 所
0 引言
随着计 算机 应用 越来越 深入 到人 们的工 作与 生活 中 , 人们 利 用计算 机要处 理 的文件 种类也 变得 纷繁 复杂 , 如果 要频 繁地 对不 同 的文 件进 行操作 , 需要 操作者 不停 地打 开或关 闭各 种 就 文件 控件 , 给操作 人员带 来 了很多不 必要 的麻 烦 。例 如 图片 这 格式 的软件 只能 打开 图片类 型 的文件 , 文本 文档 格式 的软 件 只 能 打开文本 文件 , 就需要 有一 种集成 的软 件来 同 时具 备这 些 这
文 件 在 植 入 应 用 程 序 的 快 捷 方 式 中 时 . 系 统 会 自动 调 用 ag rv
作人 员简 单 地拖 动文 件 , 它就 可打 开 多种 类型 的 文件 , 避免 了 操作 人员不 停地 寻找各 种文 件所对 应 的软件 , 复地对 这些 软 反
件进行 打开关 闭 , 操 作人 员的工 作带来 了方便 。 为
[ ] 样 的命令 行 参数 来 获取 拖放 文 件 的详 细路 径 , 1这 为下 一 步
文件 类型判 断做 准备 工作 。 ( ) 断文 件类 型 。在 获取 路径后 通 过文 件类 型 的判断 函 2判
数 来 确 定 打 开 的 是 哪 一 种 文 件 , 由 程 序 中 不 同 控 件 来 打 开 文 件 。通 过 函 数 E t cFlE t) 取 出 完 整 文 件 名 的 后 缀 名 , xr ti x(提 a e 利