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

合集下载

mfc dialog scrollbar 用法

mfc dialog scrollbar 用法

MFC对话框滚动条的使用1. 简介MFC(Microsoft Foundation Class)对话框是Windows评台上一种常见的GUI(Graphical User Interface)界面,可以用于创建各种窗口应用程序。

滚动条是对话框中常用的控件之一,可以用于滚动显示大量内容,如文本、图片等。

本文将介绍在MFC对话框中如何使用滚动条控件。

2. 添加滚动条控件在MFC对话框中添加滚动条控件非常简单。

打开对话框资源编辑器,选中要添加滚动条的对话框,然后在工具栏中选择“滚动条”控件,将其拖放到对话框中即可。

3. 设置滚动条属性添加滚动条控件后,我们可以通过双击滚动条控件或者右键点击属性来设置其各种属性。

常见的滚动条属性包括滚动条的位置、大小、范围、页面大小、滑块大小等。

根据实际需求,可以对这些属性进行调整,以满足程序的需求。

4. 响应滚动条消息一旦滚动条控件添加到对话框中并设置好属性,接下来就是响应滚动条的消息。

在MFC中,我们可以通过重载对话框类的OnVScroll和OnHScroll函数来响应垂直滚动和水平滚动的消息。

在这两个函数中,我们可以根据滚动条的位置来更新对话框中其他控件的显示内容,从而实现滚动显示的效果。

5. 示例代码以下是一个简单的示例代码,演示了在MFC对话框中使用垂直滚动条控件的方法:```C++void CMyDialog::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar){// 获取滚动条控件的当前位置int nCurPos = pScrollBar->GetScrollPos();// 根据滚动条的消息进行相应处理switch (nSBCode){case SB_TOP:// 处理滚动到顶部的情况break;case SB_BOTTOM:// 处理滚动到底部的情况break;case SB_LINEUP:// 处理向上滚动一行的情况break;case SB_LINEDOWN:// 处理向下滚动一行的情况break;case SB_PAGEUP:// 处理向上滚动一页的情况break;case SB_PAGEDOWN:// 处理向下滚动一页的情况break;case SB_THUMBTRACK:// 处理拖动滑块的情况break;default:break;}CDialog::OnVScroll(nSBCode, nPos, pScrollBar); }```在这个示例代码中,我们重载了对话框类的OnVScroll函数,通过获取滚动条的当前位置和消息类型,实现了对滚动条消息的处理。

扩展COleDropTarget类来支持任意窗口拖放

扩展COleDropTarget类来支持任意窗口拖放

扩展COleDropT arget类来支持任意窗口拖放程序运行效果截图:程序运行预览如左图:本文详细论述了拖放的基本原理并提供一个支持窗口拖放的普遍类COleDropTargetEx,任何需要提供拖放的窗口包含此类后,将响应拖放消息函数加入,便可接收拖放。

此类利用Windows消息来支持拖放,机制不同于COleDropTarget类与CView类那种直接的搭配关系,因此较以往的拖放方法简便、灵活,代码重用性非常好。

一、拖放原理及MFC类库对拖放的支持拖放(Drag and Drop)是OLE的一部分,是指对某一指定的对象,利用鼠标拖动的方法,在不同应用的窗口之间、同一应用的不同窗口之间或同一应用的同一窗口内进行移动、复制(粘贴)等操作的技术。

MFC为实现对象拖放提供了如下类:COleDataSource、COleDropSource、COleDropTarget、COleDataObject。

对于上述几个类的用法,读者可参考有关资料。

因拖放操作中的启动拖放部分,实现较模式化,很多文献都有详细的实现,本文在此不再赘述。

这里着重说明MFC拖放操作中接收部分的实现原理,以使读者了解为何要扩展MFC拖放类的功能。

MFC通过提供COleDropTarget和CView类来支持拖放操作的接收。

在CView及其继承类中创建COleDropTarget类对象,并在视图窗口初始化时,调用其成员函数Register(),以此在系统中注册该视图窗口为拖放接收窗口。

当进行拖放操作的鼠标指针处于视图窗口范围内时,COleDropTarge类的OnDragEnter、OnDragOver、OnDropEx、OnDrop等成员函数被依次调用,这些函数默认调用与其相对应的CView类成员函数OnDragEnter、OnDragOver、OnDropEx、OnDrop等,在这些CView类成员函数中,用户可对拖动的过程及结果进行控制。

用MFC实现文件拖放(获得文件路径)

用MFC实现文件拖放(获得文件路径)

用MFC实现文件拖放(获得文件路径)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) CRect rect(0,0,100,80); m_View_List.Create(WS_VISIBLE|WS_VSCROLL,rect,this,IDC_VIEW _LIST);//创建listbox4、Resource.h---- 修改Resource.h文件,为listbox的ID(IDC_VIEW_LIST)分配一个值---- 例如:#define IDC_VIEW_LIST 10005、DragView.cpp文件---- 用classwizard添加WM_SIZE消息响应,然后在OnSize函数中添加如下代码:---- m_View_List.MoveWindow(0,0,cx,cy);//使listbox所占区域始终保持与客户区一样大6、DragView.cpp文件---- 用classwizard添加WM_DROPFILES消息响应,然后在OnDropFiles函数中添加如下代码: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,Name Size++);if (pName==NULL) { MessageBox("给文件名分配暂存空间时出错!","错误信息",MB_ICONERROR); return; } DragQueryFile(hDropInfo,i,pName,NameSize);//把文件名拷贝到缓冲区 m_View_List.AddString(pName);//文件名加入listbox中显示//delete [] pName;//释放缓冲区HeapFree(hHeap,HEAP_ZERO_MEMORY,pName); }DragFinish(hDropInfo); //拖放结束后,释放内存CView::OnDropFiles(hDropInfo);}---- 到此就完成了文件拖放到view中的listbox,你可以编译、运行了。

MFC文件拖拽功能实现

MFC文件拖拽功能实现

实现文件拖放的一种简洁方法本文要介绍的这种方法只须调用一个WINDOWS API函数DragQueryFile即可实现文件的拖放操作,而且完全克服了上述3点不足。

下面先介绍一下这个函数。

---- DragQueryFile原型为:UINT DragQueryFile (HDROP hDrop, UINT iFile, LPTSTR lpszFile, UINTcch)---- 其中hDrop是指向拖动文件结构的句柄;---- iFile 是以0开始的被托动文件的序号,因为一次可能拖动多个文件。

当此参数---- 设为0xFFFFFFFF,则函数返回拖动文件的数量;---- lpszFile 是指向文件名的缓冲区;---- cch 是文件名缓冲区的大小,即文件名的字符数。

---- 明确了该函数的参数后,编程就是一件很简单的事情了。

以下给出一个完整的实例,程序运行后弹出一个对话框,可以拖动任意数量的文件或目录到上面,松开鼠标后,程序先显示拖放文件的数量,然后将拖放的文件名全部显示在一个List Box控件中。

具体步骤如下:建立一个基于对话框的工程drop,然后其它选项全部用缺省值。

选中IDD_DROP_DIALOG对话框中Extended Styles的Accept files属性。

给IDD_DROP_DIALOG对话框添加一个List Box 控件IDC_LIST1。

在ClassWizard中给CdropDlg类添加成员变量m_list,类型为ClistBox。

给CdropDlg类中增加处理WINDOWS消息WM_DROPFILES的函数,接受系统给出的默认名字OnDropFiles,然后输入以下代码:void CDropDlg::OnDropFiles(HDROP hDropInfo){char *lpszFileName=new char[512],cFileCount[10];int nFileCount,i;nFileCount=::DragQueryFile(hDropInfo,0xFFFFFFFF,NULL,512);::AfxMessageBox(itoa(nFileCount,cFileCount,10));for (i=0;i< nFileCount;i++){UINT nChars=::DragQueryFile(hDropInfo,i,&lpszFileName[0],512);CString str(&lpszFileName[0],nChars);m_List.AddString(str); // 若对于CEdit,用m_edit1.SetWindowText(str);}::DragFinish (hDropInfo); //释放内存i=0;delete []lpszFileName;// CDialog::OnDropFiles(hDropInfo); 此语句注释掉}---- 注意程序中的::DragFinish (hDropInfo);语句是必不可少的,它用于释放WINDOWS为处理文件拖放而分配的内存。

MFC_基本控件使用

MFC_基本控件使用

MFC_基本控件使用MFC(Microsoft Foundation Class)是一种用于开发Windows应用程序的编程框架,它提供了一系列的类和函数,方便开发者快速地创建Windows界面和处理事件。

在MFC中,基本控件是开发应用程序的重要组成部分,它们用于显示和交互用户界面。

本文将介绍MFC中几种常用的基本控件以及它们的使用方法。

1. 按钮控件(CButton):按钮控件用于接收用户的点击操作,通常用于触发相应的事件处理函数。

创建按钮控件的方法如下:1)在资源视图中右击对应的对话框,选择“添加控件”;2)选择“按钮”并将其拖动到对话框上;3)设置按钮的属性,如ID、文本、尺寸等。

1)在资源视图中右击对应的对话框,选择“添加控件”;组合框控件允许用户从预定义的选项中进行选择,类似于下拉列表。

创建组合框控件的方法如下:1)在资源视图中右击对应的对话框,选择“添加控件”;2)选择“组合框”并将其拖动到对话框上;3)设置组合框的属性,如ID、选项列表、尺寸等。

4. 列表框控件(CListBox):列表框控件用于显示一个选项列表,并且可以支持多选。

创建列表框控件的方法如下:1)在资源视图中右击对应的对话框,选择“添加控件”;2)选择“列表框”并将其拖动到对话框上;3)设置列表框的属性,如ID、选项列表、尺寸等。

5. 树形视图控件(CTreeCtrl):树形视图控件用于显示一个层级结构的数据,类似于文件夹结构或者程序的菜单栏。

创建树形视图控件的方法如下:1)在资源视图中右击对应的对话框,选择“添加控件”;2)选择“树形视图”并将其拖动到对话框上;3)设置树形视图的属性,如ID、尺寸等;4)使用CTreeCtrl的成员函数添加、删除、修改树节点。

6. List控件(CListCtrl):1)在资源视图中右击对应的对话框,选择“添加控件”;2)选择“List控件”并将其拖动到对话框上;3)设置List控件的属性,如ID、列数、尺寸等;以上是几种常用的MFC基本控件的使用方法,通过使用这些控件,可以轻松地创建出一个功能完善、交互友好的Windows应用程序。

mfc使用手册

mfc使用手册

mfc使用手册MFC(Microsoft Foundation Class Library)是微软提供的一个类库,用于简化Windows应用程序的开发过程。

以下是MFC使用手册的简要介绍:1. 简介:MFC是一个基于C++的类库,它提供了许多用于构建Windows应用程序的类和函数。

通过使用MFC,开发人员可以快速地构建具有一致外观和感觉的应用程序,并利用Windows平台提供的各种功能。

2. 安装和配置:在开始使用MFC之前,您需要安装Microsoft Visual Studio并确保安装了MFC开发工作负载。

安装完成后,您需要创建一个新的MFC项目或打开一个现有的MFC项目。

3. 创建MFC应用程序:要创建一个新的MFC应用程序,您需要使用Microsoft Visual Studio的向导。

选择“File”菜单中的“New”选项,然后选择“Project”。

在弹出的对话框中,选择“MFC Application”并按照向导的提示完成应用程序的创建过程。

4. MFC类库:MFC提供了许多用于构建应用程序的类和函数。

以下是一些常用的MFC类:CWinApp:应用程序对象类,用于管理应用程序级别的操作,例如初始化应用程序和退出应用程序。

CWnd:窗口类,用于管理窗口的各种操作,例如创建窗口、处理消息和绘制窗口。

CDocument:文档类,用于管理应用程序中的文档数据。

CView:视图类,用于管理应用程序中的视图,例如显示文档数据和与用户交互。

5. MFC消息处理:MFC使用消息传递机制来处理用户与应用程序的交互。

每个窗口和控件都处理一组预定义的消息,例如鼠标点击、键盘输入和窗口大小改变等。

通过覆盖类中的虚函数,您可以定义应用程序如何响应这些消息。

6. MFC对话框和控件:MFC提供了许多内置的对话框和控件,例如按钮、文本框和列表框等。

您可以使用对话框编辑器来创建对话框,并将控件拖放到对话框中。

mfc文件拖拽

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对象,值得注意的是:需要象上文中所说的,应该指定使用的数据格式,并按指定格式提供对象的有关数据。

mfc list control复选框的用法

mfc list control复选框的用法

mfc list control复选框的用法MFC(Microsoft Foundation Classes)提供了一种用于创建应用程序用户界面的C++类库。

MFC List Control是MFC库中的一个控件,用于显示和编辑多行列的文本或图标。

下面是MFC List Control复选框的用法:1. 创建MFC对话框应用程序或MFC窗口应用程序。

2. 打开资源编辑器,将一个List Control控件从工具栏拖放到对话框或窗口上。

3. 右键单击List Control控件,选择"属性",然后在属性窗口中设置List控件的样式为“Owner Draw Variable”。

4. 在类视图中双击对话框或窗口类,打开对应的.cpp文件。

5. 在对话框或窗口类的成员变量中添加一个List Control控件的变量,例如:CListCtrl m_listCtrl。

6. 在OnInitDialog或OnInitialUpdate函数中添加以下代码来设置List Control的列标题和样式:m_listCtrl.InsertColumn(0, _T("Column 1"), LVCFMT_LEFT, 100);m_listCtrl.InsertColumn(1, _T("Column 2"), LVCFMT_LEFT, 100);m_listCtrl.SetExtendedStyle(LVS_EX_CHECKBOXES);其中,InsertColumn函数用于插入列标题,第一个参数为列索引,第二个参数为列标题,第三个参数为列对齐方式,第四个参数为列宽度。

SetExtendedStyle 函数用于启用List Control的复选框功能。

7. 使用InsertItem函数添加列表项,使用SetItemText函数设置列表项的文本:int itemIndex = m_listCtrl.InsertItem(0, _T("Item 1"));m_listCtrl.SetItemText(itemIndex, 1, _T("Item 1 T ext"));其中,第一个参数为项索引,第二个参数为项文本。

mfc 对象拖拽 编程

mfc 对象拖拽 编程

mfc 对象拖拽编程(最新版)目录1.MFC 简介2.MFC 对象拖拽原理3.MFC 对象拖拽编程实例4.总结正文一、MFC 简介MFC(Microsoft Foundation Class)是微软提供的一个用于开发Windows 应用程序的类库。

它包含了大量的预定义类和函数,可以帮助程序员快速、方便地完成各种常用功能,如窗口、对话框、文件操作等。

MFC 基于 C++编写,因此可以使用 C++语言进行编程。

二、MFC 对象拖拽原理在 MFC 中,对象拖拽是指将一个对象(如按钮、文本框等)从一个位置移动到另一个位置。

这一过程可以通过鼠标点击和释放来完成。

对象拖拽的核心原理是鼠标消息处理,主要包括以下步骤:1.捕获鼠标消息:程序需要捕获鼠标点击和释放消息,以便判断拖拽的开始和结束。

2.判断拖拽对象:在鼠标点击消息处理函数中,需要判断哪个对象被点击,以便进行后续的拖拽操作。

3.计算拖拽方向和距离:在鼠标释放消息处理函数中,需要计算鼠标释放位置与对象当前位置之间的距离和方向,以便更新对象的位置。

4.更新对象位置:根据计算得到的拖拽方向和距离,将对象的位置进行更新。

三、MFC 对象拖拽编程实例以下是一个简单的 MFC 对象拖拽编程实例:1.创建一个 MFC 应用程序,添加一个 CButton 控件和一个 CEdit 控件。

2.为 CButton 控件添加鼠标点击消息处理函数,判断点击的按钮是否为拖拽源对象。

3.为 CEdit 控件添加鼠标点击和释放消息处理函数,判断点击的编辑框是否为拖拽目标对象。

4.在鼠标释放消息处理函数中,计算拖拽方向和距离,并更新编辑框的位置。

四、总结MFC 对象拖拽是 Windows 应用程序中常见的交互功能之一。

通过捕获鼠标消息、判断拖拽对象、计算拖拽方向和距离以及更新对象位置等步骤,可以实现对象的拖拽功能。

MFC中拖动有边框和无边框

MFC中拖动有边框和无边框

MFC中拖动有边框和无边框拖动不带标题栏的窗体时出现虚框1. 设置系统性能-视觉效果-拖拉时显示窗口内容:为非选中状态2. 程序中使用消息:[DllImport("user32.dll",EntryPoint="SendMessage")]public static extern int SendMessage(int hWnd,int wMsg,int wParam,int lParam);[DllImport("user32.dll",EntryPoint="ReleaseCapture")]public static extern int ReleaseCapture();public const int WM_SysCommand = 0x0112;public const int SC_MOVE = 0xF012;private void Form1_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e){ReleaseCapture();SendMessage(this.Handle.ToInt32(),WM_SysCommand,SC_ MOVE,0);}不出现边框在VC++论坛里有人提问说:“我拖动我的窗口,只拖动一个虚线框,如何在拖动窗口时显示窗口内容?”有人告诉提问人更改系统的显示属性:在“效果”里的“拖动窗口时显示内容”前打勾。

还真成了,呵呵……就这么完事了么?当然没有。

回头想想Winamp的拖动窗口,就是在没有更改显示属性的情况下实现拖动时显示窗口内容。

到底怎么做的呢?先了解一下窗口移动的过程:WM_MOVING -> WM_MOVING -> WM_MOVING ->WM_M OVING ->WM_MOVE窗口的移动过程激发了无数个WM_MOVING,在移动的最后激发WM_MOVE(表示移动完毕,见鬼~,既然是移动完毕为什么不用过去式呢?)通常情况下,WM_MOVING的时候正是上面所说拖动虚框的时候,这个时候窗口并未真正的移动。

用MFC实现文件拖放(获得文件路径)

用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函数中添加如下代码:

mfc 取消窗口 拖动边框

mfc 取消窗口 拖动边框

mfc 取消窗口拖动边框(原创实用版)目录1.MFC 简介2.MFC 中的窗口和边框3.如何使用 MFC 创建窗口4.如何使用 MFC 取消窗口5.如何使用 MFC 拖动边框正文一、MFC 简介MFC,全称 Microsoft Foundation Class,是微软提供的一套用于开发 Windows 应用程序的 C++类库。

它包含了大量的预定义类和函数,可以简化 Windows 应用程序的开发过程。

MFC 基于窗口操作系统,支持创建各种窗口和控件,提供了丰富的图形用户界面功能。

二、MFC 中的窗口和边框在 MFC 中,窗口是一个基本的界面元素,可以通过窗口类(如CWindow)或其派生类(如 CFrame)创建。

窗口由一个标题栏、菜单栏、工具栏和状态栏组成,其中标题栏包含了窗口的标题和关闭按钮。

边框是窗口的边缘部分,可以拖动以调整窗口的大小。

三、如何使用 MFC 创建窗口使用 MFC 创建窗口的过程如下:1.创建一个 CWindow 的实例。

2.调用成员函数 Create,传入窗口类名、窗口标题和窗口样式等参数。

3.显示窗口,调用成员函数 ShowWindow。

四、如何使用 MFC 取消窗口要取消一个窗口,可以使用 DestroyWindow 函数。

首先,需要获取窗口的句柄,然后调用 DestroyWindow 函数并传入窗口句柄作为参数。

五、如何使用 MFC 拖动边框要拖动边框,需要处理窗口的消息,具体步骤如下:1.重载 CWindow 的 WndProc 函数。

2.在 WndProc 函数中处理 WM_NCHITTEST 消息,判断鼠标是否在窗口标题栏上。

3.如果鼠标在标题栏上,处理 WM_MOUSEMOVE 和 WM_LBUTTONDOWN 消息,记录鼠标位置。

4.处理 WM_LBUTTONUP 消息,根据鼠标位置计算窗口的新大小。

5.调用成员函数 SetWindowPos,设置窗口的新位置和大小。

MFC实现对话框编辑控件上拖拽文件

MFC实现对话框编辑控件上拖拽文件

MFC实现对话框编辑控件上拖拽⽂件本⽂实例为⼤家分享了MFC实现对话框编辑控件上拖拽⽂件的具体代码,供⼤家参考,具体内容如下步骤1、重载CEdit类2、添加编辑框控件⾸先,重载CEdit类,定义⼀个派⽣类CDragEdit类,并重载它的WM_CREATE⽅法,在其中添加DragAcceptFile(TRUE); ⽅法。

// CDragEdit.h#pragma onceclass CDragEdit : public CEdit{DECLARE_DYNAMIC(CDragEdit)public:CDragEdit();virtual ~CDragEdit();protected:DECLARE_MESSAGE_MAP()public:afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);afx_msg void OnDropFiles(HDROP hDropInfo);};然后,利⽤类向导为CDragEdit类添加WM_DROPFILE消息相应函数;//CDragEdit.cppint CDragEdit::OnCreate(LPCREATESTRUCT lpCreateStruct){if (CEdit::OnCreate(lpCreateStruct) == -1)return -1;// TODO: 在此添加您专⽤的创建代码DragAcceptFiles(TRUE);return 0;}void CDragEdit::OnDropFiles(HDROP hDropInfo){UINT count;TCHAR filePath[MAX_PATH] = { 0 };count = DragQueryFile(hDropInfo, -1, NULL, 0);if (1 == count){DragQueryFile(hDropInfo, 0, filePath, sizeof(filePath));this->SetWindowTextW(filePath);UpdateData(FALSE);DragFinish(hDropInfo); //拖放成功后,释放内存}else{CString szFilePath;for (UINT i = 0; i < count; i++){int pahtLen = DragQueryFile(hDropInfo, i, filePath, sizeof(filePath));szFilePath = szFilePath + filePath + _T("\r\n");}this->SetWindowTextW(szFilePath);UpdateData(FALSE);DragFinish(hDropInfo);}//MFCDlg.h#program once#include "CDragEdit.h"class CMFDlg : public CDialogEx{……………………public:CDragEdit m_DragEdit;}最后,设置⽂本框控件属性[Accept Files]、[multiline]值为True.以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。

mfc 示列框的事件用法

mfc 示列框的事件用法

mfc 示列框的事件用法MFC (Microsoft Foundation Classes) 是 Microsoft 提供的一套 C++ 类库,用于简化 Windows 应用程序的开发。

MFC 提供了一套丰富的类和函数,用于处理 Windows 消息、控件、文档和视图等。

下面是一个简单的 MFC 示例,展示了一个基于对话框的应用程序中如何使用控件事件。

1. 创建一个新的 MFC 对话框应用程序:在 Visual Studio 中,选择 "File" -> "New" -> "Project"。

在模板列表中,选择 "MFC Application"。

输入项目名称和位置,然后点击 "OK"。

2. 添加一个编辑框控件:在对话框编辑器中,从工具箱拖动一个"Edit Box" 控件到对话框上。

3. 处理编辑框的 "Text Changed" 事件:打开对话框类的头文件 (通常是 ``)。

在类声明中添加一个函数声明,例如:`afx_msg void OnEnChangeEdit1();`。

在类声明中添加一个消息映射宏,例如:`BEGIN_MESSAGE_MAP(CYourDialogName, CDialogEx) ...ON_EN_CHANGE(IDC_EDIT1, &CYourDialogName::OnEnChangeEdit1) END_MESSAGE_MAP()`。

4. 实现 "Text Changed" 事件处理函数:打开对话框类的源文件 (通常是 ``)。

在类的实现部分,添加函数的实现,例如:`void CYourDialogName::OnEnChangeEdit1() { ... }`。

在此函数中,你可以添加代码来处理编辑框内容变化时需要执行的操作。

mfc中clistctrl操作

mfc中clistctrl操作

mfc中clistctrl操作MFC中CListCtrl操作一、简介MFC(Microsoft Foundation Classes)是微软公司提供的一组C++类库,用于开发Windows应用程序。

CListCtrl是MFC中的一个控件类,用于显示列表数据。

本文将介绍如何在MFC中使用CListCtrl进行数据的增删改查操作。

二、创建CListCtrl控件在MFC应用程序中,可以通过拖拽方式或代码方式创建CListCtrl 控件。

拖拽方式是将CListCtrl控件拖拽到对话框上,然后在属性窗口中进行相应设置;代码方式是在对话框类的头文件中添加成员变量,并在OnInitDialog函数中进行初始化。

三、设置列表风格和列标题在CListCtrl控件创建完成后,需要设置列表的风格和列标题。

可以使用SetExtendedStyle函数设置风格,常用的风格包括网格线、全行选中和显示图标等。

使用InsertColumn函数添加列标题,可以设置标题文本和宽度等属性。

四、添加列表项和子项使用InsertItem函数可以添加列表项,可以设置项文本和图标等属性。

使用SetItemT ext函数可以设置子项文本。

可以通过循环添加多个列表项和子项。

五、获取和修改列表项和子项的值使用GetItemText函数可以获取列表项和子项的文本值。

使用SetItemText函数可以修改列表项和子项的文本值。

可以通过循环遍历列表项和子项来获取和修改多个值。

六、删除列表项和子项使用DeleteItem函数可以删除列表项,可以通过传入列表项的索引来删除指定的项。

使用DeleteAllItems函数可以删除所有列表项。

七、排序列表项可以通过调用SortItems函数对列表项进行排序。

需要为SortItems函数提供一个比较函数,用于指定排序规则。

八、其他操作除了上述的基本操作外,CListCtrl还提供了其他常用的操作功能,例如设置列表项的图标、获取选中项的索引、设置行高等。

MFC学习小范例(编辑框控件的使用)

MFC学习小范例(编辑框控件的使用)

大家所熟知的编辑框即是QQ聊天窗口的输入编辑框,同样,MFC中的编辑框也是类似的东西,下面请看这个程序实现之后的截图分为上下两个编辑框窗口,上面的窗口实现输入,而点击显示后实现的是下面窗口的显示,类似于QQ聊天窗口的发送,确定和取消实现的是关闭程序。

请看截图:第一个截图是我在编辑框中输入一行语句,当然可以实现多行输入,也可以实现汉语的输入,下面的截图是我点击显示之后出现的运行画面。

源代码如下:编辑框控件的使用.cpp// 编辑框控件的使用.cpp : 定义应用程序的类行为。

//#include "stdafx.h"#include "编辑框控件的使用.h"#include "编辑框控件的使用Dlg.h"#ifdef _DEBUG#define new DEBUG_NEW#endif// C编辑框控件的使用AppBEGIN_MESSAGE_MAP(C编辑框控件的使用App, CWinApp) ON_COMMAND(ID_HELP, &CWinApp::OnHelp)END_MESSAGE_MAP()// C编辑框控件的使用App 构造C编辑框控件的使用App::C编辑框控件的使用App(){// TODO: 在此处添加构造代码,// 将所有重要的初始化放置在InitInstance中}// 唯一的一个C编辑框控件的使用App 对象C编辑框控件的使用App theApp;// C编辑框控件的使用App 初始化BOOL C编辑框控件的使用App::InitInstance(){// 如果一个运行在Windows XP 上的应用程序清单指定要// 使用ComCtl32.dll 版本 6 或更高版本来启用可视化方式,//则需要InitCommonControlsEx()。

否则,将无法创建窗口。

INITCOMMONCONTROLSEX InitCtrls;InitCtrls.dwSize = sizeof(InitCtrls);// 将它设置为包括所有要在应用程序中使用的// 公共控件类。

MFC教程对话框的编辑

MFC教程对话框的编辑

第五章对话框5.1 使用资源编辑器编辑对话框在Windows 开发中弹出对话框是一种常用的输入/输出手段,同时编辑好的对话框可以保存在资源文件中。

Visual C++提供了对话框编辑工具,利用编辑工具可以方便的添加各种控件到对话框中,而且利用ClassWizard 可以方便的生成新的对话框类和映射消息。

首先资源列表中按下右键,可以在弹出菜单中选择“插入对话框”,如图1。

然后再打开该对话框进行编辑,你会在屏幕上看到一个控件板,如图2。

你可以将所需要添加的控件拖到对话框上,或是先选中后再在对话框上用鼠标画出所占的区域。

接下来我们在对话框上产生一个输入框,和一个用于显示图标的图片框。

之后我们使用鼠标右键单击产生的控件并选择其属性,如图3。

我们可以在属性对话框中编辑控件的属性同时也需要指定控件ID,如图4,如果在选择对话框本身的属性那么你可以选择对话框的一些属性,包括字体,外观,是否有系统菜单等等。

最后我们编辑图片控件的属性,如图5,我们设置控件的属性为显示图标并指明一个图标ID。

接下来我们添加一些其他的控件,最后的效果如图6。

按下CtrlT可以测试该对话框。

此外在对话框中还有一个有用的特性,就是可以利用Tab 键让输入焦点在各个控件间移动,要达到这一点首先需要为控件设置在Tab 键按下时可以接受焦点移动的属性Tab Stop,如果某一个控件不打算利用这一特性,你需要清除这一属性。

然后从菜单“Layout”选择Tab Order 来确定焦点移动顺序,如图7。

使用鼠标依此点击控件就可以重新规定焦点移动次序。

最后按下CtrlT进行测试。

最后我们需要为对话框产生新的类,ClassWizard 可以替我们完成大部分的工作,我们只需要填写几个参数就可以了。

在编辑好的对话框上双击,然后系统回询问是否添加新的对话框,选择是并在接下来的对话框中输入类名就可以了。

ClassWizard 会为你产生所需要的头文件和CPP 文件。

mfc列表框控件的使用

mfc列表框控件的使用

MFC列表框控件的使用1. 介绍MFC(Microsoft Foundation Classes)是微软公司提供的一套用于开发Windows 桌面应用程序的C++类库。

MFC列表框控件是其中的一种常用控件,它可以用来显示和编辑列表中的项。

在本文中,我们将学习如何使用MFC列表框控件来创建、显示和操作列表中的数据项。

2. 创建列表框控件首先,我们需要在对话框资源中添加一个列表框控件。

打开Visual Studio,创建一个新的MFC应用程序项目,并选择对话框作为应用程序类型。

然后,在资源视图中双击IDD_DIALOG1以打开对话框编辑器。

在工具箱中找到列表框控件(List Box),并将其拖放到对话框上。

3. 设置属性选中刚刚添加的列表框控件,在属性窗口中可以设置其各种属性。

3.1 样式(Style)样式属性定义了列表框的外观和行为。

常见的样式包括:•单选(Single):只能选择一个项。

•多选(Multiple):可以选择多个项。

•排列(Sort):自动按字母顺序排序。

•水平滚动条(Horizontal Scrollbar):显示水平滚动条。

•垂直滚动条(Vertical Scrollbar):显示垂直滚动条。

3.2 数据源(Data)数据源属性定义了列表框中显示的数据项。

可以通过以下几种方式设置数据源:•字符串数组(String Array):将一个字符串数组赋给列表框。

•整数数组(Integer Array):将一个整数数组赋给列表框,每个整数对应一个数据项。

•数据库记录集(Database Recordset):将数据库查询结果赋给列表框。

3.3 绑定变量(Bound Variable)绑定变量属性定义了与列表框关联的变量。

当用户选择某个项时,该变量会被更新。

可以使用以下几种类型的变量:•字符串变量(String Variable):保存选中项的文本。

•整数变量(Integer Variable):保存选中项的索引。

mfc 对象拖拽 编程

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 编程中一个常见的功能,通过本文的介绍,相信你已经掌握了实现该功能的方法。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

用MFC实现文件拖放到编辑框
一、用CFormView实现的对话框
如图1是用CFormView实现的对话框,这是一个文档-视图结构的应用程序,它有一个主框架。

(一)运行AppWizard产生名为Drag1的项目
单击Visual C++File菜单中的New命令,选择Project选项中的MFC AppWizard(exe)图标,键入Drag1作为项目名字。

步骤1中选择Single Document按钮,步骤4中取消工具栏、打印等设置,步骤6中将基类CView改成CFormView,这一步是必须的,否则就做不到支持
文件拖放功能。

其余均采用默认设置项。

(二)我们不需要显示菜单,因此,利用菜单编辑器将全部菜单去掉。

(三)利用对话框编辑器来修改IDD_DRAG1_FROM对话框,如图1示样式。

(四)利用ClassWizard为CDrag1View类加入消息控制
单击View菜单中的ClassWizard命令,在MFC ClassWizard的Message框中选择OnUpDate,并单击Add Function按钮。

(五)类似第4步,利用ClassWizard为CMainFrame类加入OnDropFile函数。

这一步就使程序具有了文件拖放功能。

(六)编辑工程
1、显示文件名
void CDrag1View::OnUpdate(CView* pSender, LPARAM lHint, CObject* pHint)
{
// TODO: Add your specialized code here and/or call the base class
CDragDoc *pDoc=GetDocument();
SetDlgItemText(IDC_EDIT1,pDoc->GetPathName());
}
2、实现拖放功能
BOOL CDrag1App::InitInstance()
{
……
// Enable drag/drop open
m_pMainWnd->DragAcceptFiles();
return TRUE;
}
好了,就这么简单,你几乎没做什么代码输入工作程序就完成了。

可如果我们现在建立
一个基于对话框的应用程序,由于没有了主框架结构,这时要实现同样的功能,上述方
法是行不通的,只好自己来做了。

二、基于对话框的应用
(一)建立基于对话框的应用程序Drag2
从File菜单选择New对话,键入Drag2作为项目名并单击OK。

在第一步中选中Dialog Bas ed单选按钮,其它接受所有默认选项。

(二)利用对话框编辑器来修改IDD_DRAG2_GIALOG对话框,如图2示样式。

注意,prope
rty中选"Accept Files"。

(三)利用ClassWizard创建CDropEdit新类,然后再添加OnCreate、OnDropFiles函数,并编辑如下:
1、DropEdit.h文件
BOOL m_bUseDir;
……
2、DropEdit.cpp文件
……
#include <sys/types.h>
#include <sys/stat.h>
CDropEdit::CDropEdit()
{
m_bUseDir=FALSE;
}
……
int CDropEdit::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CEdit::OnCreate(lpCreateStruct) == -1)
return -1;
DragAcceptFiles(TRUE);
return 0;
}
void CDropEdit::OnDropFiles(HDROP dropInfo)
{
WORD wNumFilesDropped = DragQueryFile(dropInfo, -1, NULL, 0);
CString firstFile="";
for (WORD x = 0 ; x < wNumFilesDropped; x++) {
WORD wPathnameSize = DragQueryFile(dropInfo, x, NULL, 0);
char * npszFile = (char *) LocalAlloc(LPTR, wPathnameSize += 1);
if (npszFile == NULL) continue;
DragQueryFile(dropInfo, x, npszFile, wPathnameSize);
if (firstFile=="")
firstFile=npszFile;
LocalFree(npszFile);
}
DragFinish(dropInfo);
CString expandedFile = ExpandShortcut(firstFile);
if (expandedFile!="")
firstFile=expandedFile;
struct _stat buf;
int result = _stat( firstFile, &buf );
if( result == 0 ) {
if ((buf.st_mode & _S_IFDIR) == _S_IFDIR) {
if (m_bUseDir)
SetWindowText(firstFile);
} else if ((buf.st_mode & _S_IFREG) == _S_IFREG) {
if (!m_bUseDir)
SetWindowText(firstFile);
}
}
}
CString CDropEdit::ExpandShortcut(CString &inFile)
{
CString outFile = "";
ASSERT(inFile != _T(""));
IShellLink* psl;
HRESULT hres;
LPTSTR lpsz = inFile.GetBuffer(MAX_PATH);
hres = ::CoCreateInstance(CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER, IID_IShellLink, (LPVOID*) &psl);
if (SUCCEEDED(hres))
{
IPersistFile* ppf;
hres = psl->QueryInterface(IID_IPersistFile, (LPVOID*) &ppf);
if (SUCCEEDED(hres))
{
WORD wsz[MAX_PATH];
::MultiByteToWideChar(CP_ACP, 0, lpsz, -1, wsz, MAX_PATH);
hres = ppf->Load(wsz, STGM_READ);
if (SUCCEEDED(hres)) {
WIN32_FIND_DATA wfd;
// find the path from that
HRESULT hres = psl->GetPath(outFile.GetBuffer(MAX_PATH),
MAX_PATH,
&wfd,
SLGP_UNCPRIORITY);
outFile.ReleaseBuffer();
}
ppf->Release();
}
psl->Release();
}
inFile.ReleaseBuffer();
return outFile;
}
(四)将#include <afxole.h>加到stdafx.h文件中
(五)在CDrag2App的InitInstance中加入
::CoInitialize(NULL);
(六)在CDrag2App的ExitInstance中加入
::CoUninitialize();
(七)将#include "DropEdit.h"加入Drag2Dlg.h中
(八)在CDrag2Dlg构造函数中加入
CdropEdit m_dropEdit;
在OnInitDialog中加入
m_dropEdit.SubclassDlgItem(IDC__EDIT1, this);
现在大功告成,可以运行程序了,本程序拖动文件时必须将文件拖到对话框的编辑框中,这一点不同于Drag1应用只要将文件拖到对话框中即行,有读者能对此改进的请赐教。

本文程序均在VC6.0下通过。

相关文档
最新文档