MFC控件及功能实现分析_第1页
MFC控件及功能实现分析_第2页
MFC控件及功能实现分析_第3页
MFC控件及功能实现分析_第4页
MFC控件及功能实现分析_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、目录1、表格控件的使用 CListCtrl 12、CString 转 Char 数组和指针、 Int 等数据类型 13、消息窗口的使用 MessageBox() AfxMessageBox() 24 、编辑框 CEdit 使用 25、按钮的使用 36、Flash 控件的使用 57、为VC界面加载ssk皮肤 58、窗口菜单的使用 59、窗口添加右击菜单 510、为静态文本添加动态显示时间 611、状态栏的使用 612、改变VC对话框的颜色实现 713、为MFC寸话框添加背景图片 914、进度条的使用 915、下拉列表框 CComboBoX勺使用 1016、使用Vc读取数据库中的数据实现 1117

2、、VC下删除、复制和移动文件实现 1218、VC与MFC组合键的使用 1519、VC中线程的使用 1620、MFC实现打开和连接一个文件、一个程序、一个网页 1721、VC中常用文件操作 1722、MFC中画直线和曲线 1823、将十进制数转化为指定长度的二进制数 2024、实现VC程序打包201、 表格控件的使用 CListCtrl将表格控件托到窗口后,将properies中style中的view改为report,在classwizard中的 menber variables添加对应的 con troll变量 m_list,在 On I ni tDialog()中初始化表格:/初始化 Lis

3、tctrl 表头m_list.SetBkColor(RGB(255, 255, 255);/ 设置背景颜色 m_list.SetTextColor(RGB(0,0,0);/ 设置文本颜色 m_list.SetTextBkColor(RGB(255, 151, 240); / 设置文本背景颜色m_list.SetExtendedStyle(LVS_EX_FLATSB|LVS_EX_FULLROWSELECT|LVS_EX_HEADERDRAGDROP|LVS_EX_ONECLICKACTIVm_list.InsertColumn(0,_T(m_list.InsertColumn(1,_T(m_l

4、ist.InsertColumn(2,_T(ATE|LVS_EX_GRIDLINES);/ 设置表格风格序号 ),LVCFMT_IMAGE|LVCFMT_LEFT);/设置列名信源符号 );/ 设置列名概 率 );m_list.SetColumnWidth(0,60); / 设置列宽 m_list.SetColumnWidth(1,120);往表格中插入数据:for(i=0;iGetDlgCtrlID()=IDC_EDIT1)pDC-SetTextColor(RGB(255,125,0);/ 设置字体颜色设置编辑框和静态框为透明效果:HBRUSH CloginDlg:OnCtlColor(CD

5、C* pDC, CWnd* pWnd, UINT nCtlColor)HBRUSH hbr = CDialog:OnCtlColor(pDC, pWnd, nCtlColor); if(nCtlColor=CTLCOLOR_STATIC)/ 对所有的 STATIC 控件的属性进行设定 pDC-SetBkMode(TRANSPARENT); return (HBRUSH):GetStockObject(NULL_BRUSH); if(nCtlColor=CTLCOLOR_EDIT) / 对所有的 STATIC 控件的属性进行设定 pDC-SetBkMode(TRANSPARENT); retur

6、n (HBRUSH):GetStockObject(NULL_BRUSH);return hbr; 将文件内容读入到编辑框:在打开文件按钮添加代码CFileDialog dlg(true,NULL,*.txt,OFN_FILEMUSTEXIST|OFN_HIDEREADONLY,/ 构造文Text Files (*.txt;*.doc;*.docx)|*.txt;*.doc;*.docx|All CompressFiles (*.*)|*.*|,this); 件打开对话框CString strPath,strText=,s; if(dlg.DoModal() = IDOK) strPath =

7、 dlg.GetPathName();/ 获得文件路径CStdioFile file2;if(!file2.Open( strPath,CFile:modeRead) / 打开文件 return;while(true)/ 按行循环读取文件内容存入 s if(!file2.ReadString(s) break;strText=strText+s; m_edit1=strText;UpdateData(false);5、按钮的使用按钮添加图片:第一种:Button 属性页里 Style 的 Bitmap 点上CBitmap Bitmap;Bitmap.LoadBitmap(IDB_BITMAP1

8、);HBITMAP hBitmap=(HBITMAP)Bitmap.Detach();CButton *pButton=(CButton*)GetDlgItem(IDCANCEL); pButton-SetBitmap(hBitmap); 感觉效果不是很好。因为图片不会自动拉伸。第二种:可以采用 CButtonST 控件,挺好用的,比 MFC 的那些封装好用。 第三种:把 button 按钮属性设置为 ower draw 然后映射 onDrawItem 消息 在 ondraw 函数内自己绘制就可以了void CUi6Dlg:OnDrawItem(int nIDCtl, LPDRAWITEMST

9、RUCT lpDrawItemStruct)if(nIDCtl = IDC_HELLO_CFAN)/绘制按钮框架UINT uStyle = DFCS_BUTTONPUSH;/是否按下去了?if (lpDrawItemStruct-itemState & ODS_SELECTED) uStyle |= DFCS_PUSHED;CDC dc; dc.Attach(lpDrawItemStruct-hDC); dc.DrawFrameControl(&lpDrawItemStruct-rcItem, DFC_BUTTON, uStyle);/输出文字 dc.SelectObject(&m_Font)

10、;dc.SetTextColor(RGB(0, 0, 255);dc.SetBkMode(TRANSPARENT);CString sText;m_HelloCFan.GetWindowText(sText);dc.TextOut(lpDrawItemStruct-rcItem.left + 20, lpDrawItemStruct-rcItem.top + 20, sText); /是否得到焦点if(lpDrawItemStruct-itemState & ODS_FOCUS)/画虚框CRect rtFocus = lpDrawItemStruct-rcItem; rtFocus.Defla

11、teRect(3, 3);dc.DrawFocusRect(&rtFocus);return;CDialog:OnDrawItem(nIDCtl, lpDrawItemStruct);第四种:1, 按钮属性 Onwer Drew 选上,按钮 ID: IDC_BUTTON12,定义 private 变量:CBitmapButton m_button;3,在初始化里边m_button.LoadBitmaps(IDB_BITMAP1, IDB_BITMAP2);/IDB_BITMAP1: 平时; IDB_BITMAP2 :按下 m_button.SubclassDlgItem(IDC_BUTTON1

12、, this);m_button.SizeToContent();设置按钮显示的文字代码:GetDlgItem(IDC_BUTTON2)-SetWindowText( 开始编码 );6、 Flash 控件的使用工具(T)-ActiveX Control Test Container- 弹出对话框File-Register Controls- 弹出对话框 找到 C:WINDOWSsystem32MacromedlashFlash10e.ocx ,打开 弹出MFC ClassWizard框里为 FLASH 的 ID 添加映射:选择 IDC_SHOCKWA VEFLASH1、FSCommand、Ad

13、d Function,弹出Add Member Function选OK在MFC ClassWizard框里第2页Member Variables,为FLASH的ID添加类,弹出提示对话框选择确定, 我们定义类名字,为 m_flash ,基类为 CShockwaveFlash播放按钮 代码:为视图资源里的 播放 按钮消息响应函数修改代码void CTest0407Dlg:OnOK() / 对应 播放 按钮/ TODO: Add extra validation here/CDialog:OnOK();m_flash.LoadMovie(0,c:VCtu12.swf); / 播放 FLASH 文件

14、,路径 C:VCtu12.swf m_flash.Play();7、为VC界面加载ssk皮肤到网上下载这三个文件 skinppwtl.dll , SkinPPWTL.h , SkinPPWTL.lib 放到工程下,我的百度网盘下载连接 (http://netdisk/singlepublic?fid=564282_89891 9684 )在界面的 .cpp 中添加头文件 SkinPPWTL.h ,在 InitInstance() 中添加 skinppLoadSkin(skinxp_corona.ssk);/ 初始化皮肤xp_corona.ssk,按Alt+F7,选择连

15、接,添加 SkinPPWTL.lib确认即可。8、窗口菜单的使用在资源框中选中工程,右击选择 insert-menu 创建菜单,右击窗口,选择 properties-general-menu ; 为子菜单添加事件:右击子菜单选择 - MFC ClassWizard, 弹出一个对话框, -select a exist class- 选择创建的类如 CMyDlg ;在 Message maps 中选择对应子菜单的 ID ,在 Messages 选择 command-add function- 确定 -edit code 即可 二级菜单的使用:选择一个子菜单右击选择 -properties-gene

16、ral-Pop-up 即可9、窗口添加右击菜单按照上面的方法添加一个菜单, MFC ClassWizard 中 Messages 添加 WM_OnRButtonDown 事件,在 OnRButtonDown(UINT nFlags, CPoint point) 函数中添加代码:void CMyDlg:OnRButtonDown(UINT nFlags, CPoint point)CMenu menu;menu.LoadMenu(IDR_MENU2);/ 载入刚才创建的菜单CMenu*pContextMenu=menu.GetSubMenu(0);CPoint point1;GetCursorP

17、os(&point1);/ 获得鼠标焦点 pContextMenu-TrackPopupMenu(TPM_LEFTALIGN|TPM_RIGHTBUTTON,point1.x,point1.y,this);/AfxG etMainWnd()CDialog:OnRButtonDblClk(nFlags, point);10、为静态文本添加动态显示时间在窗口拖入一个静态框, ID 改为 IDC_time, 在 OnInitDialog() 中添加 SetTimer(1,1000,NULL); 在 MFC ClassWizard 中 Messages 添加 WM_TIMER 事件,在 OnTimer

18、(UINT nIDEvent) 函数中添加代码: void CMyDlg:OnTimer(UINT nIDEvent)CString str;CTime t;t=CTime:GetCurrentTime();str.Format(%02d-%02d-%02d %02d:%02d:%02d,t.GetYear(),t.GetMonth(),t.GetDay(),t.GetHour(),t.GetMi nute(),t.GetSecond();GetDlgItem(IDC_time)-SetWindowText(str);CDialog:OnTimer(nIDEvent);11、状态栏的使用1)

19、添加字符串在工作区中选择 Resource View标签,转到资源编辑窗口,双击String Table“ String Table”项条目打开打开串表资源的编辑器。选择最下面的空白项并双击,或选择某个串后按In sert”键,将弹出String Properties ”对话框。在ID”框中输入串标识符IDS_limin和IDS_TIME和值,在“ Caption ”框内输入标题字符的内容,串值为系统自 动设定。为 Dlg 类添加成员变量 CStatusBar m_Bar;在 Dlg 类中添加 static UINT indicators=IDS_limin,IDS_TIME;2) .在 Dl

20、g 类 OnInitDialg 中添加如下代码/* 创建状态栏 */m_StatusBar.Create(this);默认 ID/设置状态栏m_bar.Create(this);在当前窗口创建状态栏m_bar.SetIndicators(indicators,2);/ 将状态栏分成两列 m_bar.SetPaneInfo(0,IDS_limin,SBPS_NORMAL,rect.Width()-150);m_bar.SetPaneInfo(1,IDS_TIME,SBPS_STRETCH,0);/* 显示状态栏 */RepositionBars(AFX_IDW_CONTROLBAR_FIRST,

21、AFX_IDW_CONTROLBAR_LAST,0);/ 显示状态栏/* 状态栏随对话框窗口大小而变化*/关于此方法请查阅 界面技巧 之 控件大小随窗口而调整 m_Bar.SetOwner(this);m_Bar.SetResize(AFX_IDW_STATUS_BAR,PK_BOTTOM_LEFT,PK_BOTTOM_RIGHT);/AFX_IDW_STAT US_BAR 为状态栏默认的 ID 【思路总结】创建CStatusBar类变量;创建状态栏create ;添加面板set In dicators ;设置面板宽度 SetPa nel nfo;设置面板文本 SetPaneText;显示状态

22、栏 RepositionBars ;状态栏显示时间:为 CMainFrame 类的 OnTimer() 函数添加如下代码:语 句 “ tmCurr=CTime:GetCurrentTime(); ” 用 于 获 取 系 统 当 前 时 间 , 再 通 过 语 句 “ strTime= tmCurr.Format(%H:%M:%S); ”将时间格式化后赋给字符串 strTime 。最后通过状态栏类 CStatusBar 成员函 数 SetPaneText()将字符串 strTime 显示到 ID_INDICATOR_TIME 所指示的窗格中。 m_bar.SetPaneText(1, strTi

23、me);12、改变VC对话框的颜色实现 新建一个基于 Dialog 的 MFC AppWizard 应用程序 ExampleDlg 。 在 CExampleDlgApp :InitInstance() 中添加如下代码:BOOL CExampleDlgApp: : InitInstance ( )CExampleDlgDlg dlg; m_pMainWnd = &dlg;/先于 DoModal() 调用,将对话框设置为蓝色背景、红色文本SetDialogBkColor(RGB(0,0,255),RGB(255,0,0);int nResponse = dlg.DoModal(); 编译并运行,此

24、时对话框的背景色和文本色已发生了改变。值得注意的 是:在调用 DoModal() 之前必须先调用 SetDialogBkColor ,且此方法是将改变 应用程序中所有的对话框颜色,并不能针对某一个指定的对话框。-方法二:重载 On Pa int(),即WM_PAINT消息。有关代码如下(以上例工程为准):void CExampleDlgDlg:OnPaint()if (IsIconic()elseCRect rect;CPaintDC dc(this);GetClientRect(rect); dc.FillSolidRect(rect,RGB(0,255,0); / 设置为绿色背景CDial

25、og:OnPaint(); 方法三:重载 OnCtlColor (CDC* pDC, CWnd* pWnd, UINT nCtlColor) ,即 WM_CTLCOLOR 消息。具体步骤如下(以上例工程为准) : 在 CExampleDlgDlg 的头文件中,添加一 CBrush 的成员变量:class CExampleDlgDlg : public CDialogprotected:CBrush m_brush; 在 OnInitDialog() 函数中添加如下代码:BOOL CExampleDlgDlg:OnInitDialog()/ TODO: Add extra initializat

26、ion herem_brush.CreateSolidBrush(RGB(0, 255, 0); / 生成一绿色刷子-利用 ClassWizard 重载 OnCtlColor(),即 WM_CTLCOLOR 消息:HBRUSH CExampleDlgDlg:OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)/* 这里不必编写任何代码!* 下行代码要注释掉* HBRUSH hbr = CDialog:OnCtlColor(pDC, pWnd, nCtlColor);*/return m_brush; / 返加绿色刷子 方法四:还是重载 OnCtlCo

27、lor (CDC* pDC, CWnd* pWnd, UINT nCtlColor) ,即 WM_CTLCOLOR 消息。具体步骤如下(以上例工程为准) :-步骤、同上方法三中的步骤、。 步骤利用 ClassWizard 重载 OnCtlColor( )(即 WM_CTLCOLOR 消息)时则有 些不同:HBRUSH CExampleDlgDlg:OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)HBRUSH hbr = CDialog:OnCtlColor(pDC, pWnd, nCtlColor);/在这加一条是否为对话框的判断语句if(nCt

28、lColor =CTLCOLOR_DLG)return m_brush; / 返加绿色刷子return hbr;13、为MFC对话框添加背景图片先在资源框中加载一张 bmp 的位图,在 OnPaint() 函数中添加代码void CMyView:OnPaint()CPaintDC dc(this); / device context for paintingCRect rect;GetClientRect(&rect);CDC dcMem;dcMem.CreateCompatibleDC(&dc);CBitmap bmpBackground;bmpBackground.LoadBitmap(I

29、DB_pic1);/ 选择的背景图片的 IDBITMAP bitmap;bmpBackground.GetBitmap(&bitmap);CBitmap *pbmpOld=dcMem.SelectObject(&bmpBackground);dc.StretchBlt(0,0,rect.Width(),rect.Height(),&dcMem,0,0,bitmap.bmWidth,bitmap.bmHeight,SRCCOPY);/ Do not call CRecordView:OnPaint() for painting messages14 、进度条的使用(一)进度条的主要功能进度条控制

30、( Progress Control )主要用来进行数据读写、文件拷贝和磁盘格式等操作时的工作进度提 示情况,如安装程序等,伴随工作进度的进展,进度条的矩形区域从左到右利用当前活动窗口标题条的颜 色来不断填充。进度条控制在 MFC 类库中的封装类为 CProgressCtrl ,通常仅作为输出类控制,所以其操作主要是设 置进度条的范围和当前位置,并不断地更新当前位置。进度条的范围用来表示整个操作过程的时间长度, 当前位置表示完成情况的当前时刻。SetRange()函数用来设置范围,初始范围为0-100 , SetPos()函数用来设置当前位置,初始值为0, SetStep()函数用来设置步长,

31、初始步长为10,Steplt()函数用来按照当前步长更新位置,OfsetPos()函数用来直接将当前位置移动一段距离。如果范围或位置发生变化,那么进度条将 自动重绘进度区域来及时反映当前工作的进展情况。进度条的对象结构进度条控制的建立方法CProgressCtrl &ProgressCtrl 建立进度条控制对象结构Create 建立进度条控制对象并绑定对象进度条控制类 CprogressCtrl:Create 的调用格式如下:BOOL Create( DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UlNT nlD);其中参数dwStyle

32、用来确定进度条控制的控制风格;参数rect用来确定进度条控制的大小和位置;参数 pParentWnd 用来确定进度条父窗口指针;参数 nlD 用来确定进度条控制的控制符 lD 值。2、进度条控制的类属性进度条控制的类属性包括设置进度条最大最小控制范围SetRange、设置进度条当前位置 SetPos、设置进度条当前位置偏移值 OffsetPos 和设置进度条控制增量值SetStep。3、进度条控制的操作方法 进度条控制的操作方法主要是使进度条控制并重绘进度条的 StepIt 函数。 进度条控制的应用技巧示例1、利用应用程序向导 AppWizard 生成基于对象框的应用程序 CProgDlg ;

33、2、在对话框中设置进度条和静态文本控制,其 ID 分别为 IDC_PROG 和 IDCPERCENT ; 在对话框初始代码中增加控制的范围和位置:在 ProgDlg.h 中设置两个数据成员,用来表示进度条的最大值和步长:/ProgDlg.hclass CProgDlg:public Cdialog /其它代码public:int m_nMax,m_nStep; /其它代码(2)在 ProgDlg.cpp 中设置初始状态BOOL CProgDlg:OnInitDialog() Cdialog:OnInitDialog();/其它代码/TODO:Add extra initialization h

34、ereCProgressCtrl *pProgCtrl=(CProgressCtrl*)GetDlgItem(IDC_PROG);pProgCtrl-SetRange(0,200);/ 设置进度条范围/其它代码 m_nMax=200;m_nStep=10;SetTimer(1,1000,NULL);/ 设置进度条更新时钟return TRUE;m_progress.SendMessage(PBM_SETBKCOLOR, 0, RGB(rand()%255,rand()%255,rand()%255);/ 设置进度条 的颜色(3) 完善 WM_TIMER 消息处理,使进度条按照当前步长进行更新,

35、同时完成进度条的百分比显示:void CProgDlg:OnTimer(UINT nIDEvent) /TODO:Add your message handler?CProgressCtrl *pProgCtrl=(CProgressCtrl*)GetDlgItem(IDC_PROG);int nPrePos=pProgCtrl-StepIt();/ 取得更新前位置char test10;int nPercent=(int)(nPrePos+m_nStep)/m_nMax*100+0.5); wsprintf(test,?%d%?,nPercent);GetDlgItem(IDC_PERCEN

36、T)-SetWindowText(text);Cdialog:OnTimer(nIDEvent);15、下拉列表框CComboBo的使用将 Combo Box 拖入窗口,在 MFC ClassWizard 中 Member Varibles 添加变量 m_combo, 在 OnInitDialog() 中 添加 m_combo.SetCurSel(0); 使其显示第一个数据; 往列表中添加数据:1) 选择 properties-Data 输入一个数据,按 Ctrl+Enter 换行继续添加下移个数据;2) 在代码中动态添加, (CComboBox*)GetDlgItem(IDC_COMBO)-

37、InsertString(i,str); 获取列表选中的数据所在位置: int in=m_combo.GetCurSel();16、使用 Vc 读取数据库中的数据实现CDatabase 对象表示到数据源的连接, 通过它可以操作数据源。 数据源是位于一些数据库管理系统(DBMS)的数据的指定实例,包括MicrosoftSQLServer, MicrosoftAccess , BorlanddBASE和 XBASE 在应用中可以同时使一个或多个CDatabase对象活动。如果在处理数据访问对象(DAO)类而不是开放数据库连接(ODBC)类,可使用类CDaoDatabaseo为使用CDatabase

38、,构造一个CDatabase对象并调用它的 OpenEx成员函数。这打开了一个连接。在接着构造 CRecordset对象以操纵连接的数据源时,向CDatabase对象传递记录集构造程序指针。完成使用连接时调用Close成员函数并销毁 CDatabase对象。Close关闭以前没有关闭的任何记录集。#include1. 建立连接:要建立与数据源的连接,首先应构造一个CDatabase对象,然后再调用 CDatabase的Open成员函数 Open 函数负责建立连接,其声明为:virtual BOOL Open( LPCTSTRlpszDSN, BOOL bExclusive = FALSE,BO

39、OL bReadOnly = FALSE,LPCTSTR lpszConnect = ODBC; , BOOL bUseCursorLib = TRUE ); throw( CDBException, CMemoryException );说明:1) 参数lpszDSN指定了数据源名(构造数据源的方法将在后面介绍) ,在lpszConnect参数中 也可包括数据源名,此时 lpszDSN必需为NULL,若在函数中未提供数据源名且使 lpszDSN为NULL,则 会显示一个数据源对话框,用户可以在该对话框中选择一个数据源。2) 参数bExclusive说明是否独占数据源,由于目前版本的类库还不支

40、持独占方式,故该参数的值应该是FALSE这说明数据源是被共享的。3) 参数bReadOnly若为TRUE则对数据源的连接是只读的。4) 参数lpszConnect指定了一个连接字符串,连接字符串中可以包括数据源名、用户帐号(ID)和口令等信息,字符串中的“ODBC表示要连接到一个 ODBC数据源上。5) 参数bUseCursorLib若为TRUE,则会装载光标库,否则不装载,快照需要光标库,动态集 不需要光标库。6) 若连接成功,函数返回TRUE,若返回FALSE则说明用户在数据源对话框中按了Cancel按钮。若函数内部出现错误,则框架会产生一个异常。例子:1) CDatabase m_db;

41、 /在文档类中嵌入一个 CDatabase对象2) / 连接到一个名为 Student Registration 的数据源m_db.Open(Student Registration);3) /在连接数据源的同时指定了用户帐号和口令m_db.Open(NULL,FALSE,FALSE,ODBC;DSN=Student Registration;UID=ZYF;PWD=1234);4) m_db.Open(NULL); / 将弹出一个数据源对话框2. 要从一个数据源中脱离,可调用函数Close。在脱离后,可以再次调用 Open函数来建立一个新的连接。3. 调用IsOpen可判断当前是否有一个连接

42、。4. 调用 GetConnect 可返回当前的连接字符串。5. 相关函数声明:virtual void Close( );BOOL IsOpe n( ) con st; /返回TRUE则表明当前有一个连接 const CString& GetConnect( ) const;6. CDatabase的析构函数会调用Close,所以只要删除了CDatabase对象就可以与数据源脱离。代码实现:CDatabase database;/ 定义数据对象database.Open(liminlist,FALSE,FALSE,ODBC;,FALSE)打开 ODBC数据源 CRecordset set(&

43、database);CString str1,str2,str3,str4,str5,str6,str7,str8,str9,str10,str11;str.Format(select * from 联系人 );if(set.IsOpen()/ 判断数据源是否打开set.Close(); set.Open(CRecordset:dynaset,str);while(!setsEOF()循环读取数据到表格m_list.InsertItem(i,);si.Format(%d,i+1); m_list.SetItemText(i,0,si);set.GetFieldValue(bianhao,str

44、1); m_list.SetItemText(i,1,str1);set.GetFieldValue(sname,str2); m_list.SetItemText(i,2,str2);set.MoveNext();i+;set.Close();/ 关闭数据17、VC下删除、复制和移动文件实现bool DeleteFile(char * lpszPath)SHFILEOPSTRUCT FileOp=0;FileOp.fFlags = FOF_ALLOWUNDO |/ 允许放回回收站FOF_NOCONFIRMATION; /不/ 出现确认对话框FileOp.pFrom = lpszPath;Fi

45、leOp.pTo = NULL;/ 一定要是 NULL FileOp.wFunc = FO_DELETE;/ 删除操作return SHFileOperation(&FileOp) = 0;/ 复制文件或文件夹bool CopyFile(char *pTo,char *pFrom) SHFILEOPSTRUCT FileOp=0;FileOp.fFlags = FOF_NOCONFIRMATION| / 不出现确认对话框FOF_NOCONFIRMMKDIR ; /需要时直接创建一个文件夹 ,不需用户确定FileOp.pFrom = pFrom; FileOp.pTo = pTo;FileOp.

46、wFunc = FO_COPY; return SHFileOperation(&FileOp) = 0; / 移动文件或文件夹 bool MoveFile(char *pTo,char *pFrom) SHFILEOPSTRUCT FileOp=0;FileOp.fFlags = FOF_NOCONFIRMATION| / 不出现确认对话框FOF_NOCONFIRMMKDIR ; /需要时直接创建一个文件夹 ,不需用户确定 FileOp.pFrom = pFrom;FileOp.pTo = pTo; FileOp.wFunc = FO_MOVE;return SHFileOperation(

47、&FileOp) = 0;/ 从命名文件或文件夹 bool ReNameFile(char *pTo,char *pFrom) SHFILEOPSTRUCT FileOp=0; FileOp.fFlags = FOF_NOCONFIRMATION;/ 不出现确认对话框 FileOp.pFrom = pFrom; FileOp.pTo = pTo; FileOp.wFunc = FO_RENAME; return SHFileOperation(&FileOp) = 0;应用举例 : DeleteFile(d:PID00);/ 删除一个文件夹 DeleteFile(d:PID.dsp0d:PID

48、.dsw00); / 删除多个文件临时程序 00);/ 把临时程序 文件夹放到 d 盘下面临 时程 序 临时 程序 PID.dsw0); / 把 PID.dsp和PID.dsw俩个文件放到 d盘下面把PID文件夹从命名为 NewName注意:,如果你想把临时程序00的文件夹复制到 D盘下,并从命名为NewName,应该这临时程序 *.*00); / 把 临时程序 文件夹复制到 d 盘下并从命名为 NewName下面这个类方便你复制多个文件或文件夹,仅作参考/ 连接多个路径的类class JOINFILEPATHprivate:int pos;char* MultipleFilePath;pub

49、lic:JOINFILEPATH()pos=0;MultipleFilePath=new charMAX_PATH*10;memset(MultipleFilePath,0,MAX_PATH*10);JOINFILEPATH() delete MultipleFilePath; void join(char *FilePath)while(*FilePath!=0)MultipleFilePathpos+=*FilePath+;pos+;char * GetMultipleFilePath() return MultipleFilePath;/ 应用举例 :JOINFILEPATH FilePath;临时程序 PIDPID.dsp);临时程序 PIDPID.dsw);CopyFile(d:00,FilePath.GetMultipleFilePath();1 pFrom和pTo最好以00结尾(把存放路径的字符串初始化为0),不然有可能会出错,中间的每一个路径用 0 隔开2 pFrom所指向的文件或文件夹

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论