《VC++ 程序设计4.ppt》由会员分享,可在线阅读,更多相关《VC++ 程序设计4.ppt(57页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、VC+入门与提高主讲教师:贾澎涛第六章 应用实例之一编写一个具有实用功能的字处理软件本篇经典1.文档和视图是怎样联系起来的?2.如何为程序添加查找、替换等功能?3.为什么在某些程序新创建的菜单中只输入了一个菜单ID标识就可以实现某一种功能?4.为什么在应用程序的菜单中有的菜单是灰的?5.怎样为程序添加一个浮动菜单?6.如何在“帮助关于”对话框中添加系统信息?7.怎样为应用程序做一个每日提示(在程序启动时显示)?8.如何动态修改菜单?9.怎样为应用程序增加一个日历?10.如何使EditSoft应用程序成为多文档程序?11.怎样修改应用程序标题栏上的显示文字?12.怎样使应用程序以最大化窗口显示?
2、13.怎样在应用程序的状态条上显示时间?14.如何使应用程序窗口左上角标题栏上的应用程序图标动起来?15.怎样使应用程序支持拖放功能?16.怎样建立一个文件打开、保存对话框?17.如何使用字体、颜色对话框?18.如何处理文字输入?19.如何在字处理编辑器中增加一个插入符?20.如何使应用程序窗口滚动?21.如何处理方向键、翻页键等虚键操作?22.如何实现字符串的复制、粘贴?23.如何为文档增加打印功能?24.如何实现应用程序数据的读出和写入?6.1 程序创建过程(1)用AppWizard新建一个项目,EditSoft。(2)在第1步选择单文档类型。(3)在应用程序生成向导的第2、3步选择保留缺
3、省值。(4)在第4步改扩展名(通过选择高级选项,你可以用AppWizard设定支持的文本文档的扩展名为TXT)。(5)第5步选择保留缺省值.(6)MFC AppWizardStep 6是生成EditSoft应用程序的关键,在应用程序新生成的类的列表框中选择视图类(CEditSoftView),在基类名在基类名(Base Class)Base Class)下拉列表下拉列表框选择框选择CEditViewCEditView类,类,其与保留缺省值。(7)选择完成,编译连接并执行EditSoft程序。1.文档和视图是怎样联系起来的?在文档视图结构的应用程序中,文档类和视图类常常需要进行相互之间数据的交换
4、和引用,这就需要采用一种办法实现两者见数据的通信。视图对象通常只有一个与之相联系的文档对象,利用它所包含的成员函数GetDocument()函数可以在视图类中得到与之相联系的文档。在几乎所有视图类的显示函数OnDraw(CDC*pDC)中,都有一个指向文档类的指针。利用它我们就可以对文档类的成员函数以及公共数据成员进行访问。打开EditSoft应用程序的视图类CEditSoftView的实现文件“EditSoftView.cpp”,找到以下代码:void CEditSoftView:OnDraw(CDC*pDC)CEditSoftDoc*pDoc=GetDocument();/获取文档数据获取
5、文档数据ASSERT_VALID(pDoc);/TODO:add draw code for native data here/CView:GetDocumentCDocument*GetDocument()const;Callthisfunctiontogetapointertotheviewsdocument.Thisallowsyoutocallthedocumentsmemberfunctions.同样在应用程序的文档类CDocument中也有一个UpdateAllViews()成员函数,用来向视图类传递消息。一旦文档数据发生了变化,所有与该文档相关联的视图都通过此函数取得通知,对其所
6、显示的的数据进行更新。/CDocument:UpdateAllViewsvoid UpdateAllViews(CView*pSender,LPARAM lHint=0L,CObject*pHint=NULL);Call this function after the document has been modified.2.如何为程序添加查找、替换等功能?添加查找功能添加查找功能(1)打开ResourceView,打开IDR_MAINFRAME;(2)为“编辑”菜单添加“查找”菜单项,并将ID设为“ID_EDIT_FIND”,注意提示(prompt)编辑框的变化。(3)编译、连接运行。添加替
7、换功能添加替换功能(1)打开ResourceView,打开IDR_MAINFRAME;(2)为“编辑”菜单添加“替换”菜单项,并将ID设为“ID_EDIT_REPLACE”,注意提示(prompt)编辑框和标题框的变化。(3)编译、连接运行。练习n按照上述办法在“编辑”菜单下加入以下菜单:ID标识菜单名功能ID_EDIT_CLEAR删除删除选定的内容ID_EDIT_CLEAR_ALL全部删除删除应用程序中所有的内容ID_EDIT_REPEAT重复重复上一步操作ID_EDIT_REDO恢复恢复上一步操作ID_EDIT_SELECT_ALL 全部选择选择应用程序中的所有内容3.为什么在某些程序新创
8、建的菜单中只输入了一个菜单ID标识就可以实现某一种功能?在前面我们为EditSoft应用程序所增加的任何功能都只在资源编辑中添加了菜单ID标识,而没有添加任何执行代码,但应用程序的每一个菜单仍然具有应有的功能。为什么呢?MFC定义的消息进程继承类似于类的继承树。如果一个类没有提供某个特殊消息的消息处理函数,则消息通过树传到父类,进程持续下去直至消息映射所有的基类都被搜索一遍。如果没有一个类处理该消息,它就由缺省进程处理。在EditSoft应用程序中,由于其视图类是从CEditView基类继承而来,在类CEditView中已经对诸如“查找”、“替换”等功能进行了处理。即使在CEditSoftVi
9、ew中没有对这些功能进行处理,所定义的ID标识仍将使MFC追溯到其基类CEditView和CView的消息处理函数,由基类的处理函数代为响应。MFC为进一步扩展其重复使用性,它为大多数Windows应用程序中的应用很广的命令提供了缺省操作,大多数缺省操作的命令同时也被包含在由AppWizard产生的缺省菜单中。以下是在MFC中有缺省操作的菜单命令:n文件菜单:New,Open,Close,Save,Page Setup,Print,Print Preview,Exit等;n编辑菜单:Clear,Clear All,Copy,Cut,Find,Paste,Repeat,Replace,Undo,
10、Redo等。n视图菜单:Toolbar,Statusbar等n窗口菜单:Arrange Casecade,Tile,Horizontal tile,Vertical tile等;n帮助菜单:Index,Using,Help,About等。4.为什么在应用程序的菜单中有的菜单是灰的?n命令更新机制命令更新机制:在程序显示一个菜单前,先检查该菜单的所有条件,再决定如何显示该菜单。nON_UPDATE_COMMAND_UI 宏:负责将用户界面元素和命令更新程序连接起来。nCCmdUI(参看MSDN)5.怎样为程序添加一个浮动菜单?n方法一(1)在资源编辑器中编辑一个菜单资源,使用缺省的也可。(2)打
11、开ClassWizard,为一个窗口类或其派生类添加消息“WM_CONTEXTMENU”。(3)在系统生成的消息处理函数中添加如下代码:CMenu*pFileMenu=GetMenu()-GetSubMenu(2);ClientToScreen(&point);pFileMenu-TrackPopupMenu (TPM_CENTERALIGN|TPM_LEFTBUTTON,point.x,point.y,this);如果是新建的菜单,则只需添加如下代码(其中IDR_MENU1是新建菜单ID)CMenu menu;menu.LoadMenu(IDR_MENU1);CMenu*pFileMenu=
12、menu.GetSubMenu(0);ClientToScreen(&point);pFileMenu-TrackPopupMenu(TPM_LEFTALIGN|TPM_RIGHTBUTTON,point.x,point.y,this);/CMenu:TrackPopupMenuBOOL TrackPopupMenu(UINT nFlags,int x,int y,CWnd*pWnd,LPCRECT lpRect=NULL);RemarksDisplays a floating pop-up menu at the specified location and tracks the selec
13、tion of items on the pop-up menu.A floating pop-up menu can appear anywhere on the screen.方法二(1)新建一个项目(2)选择“ProjectAdd to ProjectComponents and Controls”将出现组件和控件库对话框,双击部件文件夹(Visual C+Components),选择Pop-up Menu,双击。(3)在询问是否加入Pop-Menu部件,单击确定,确认加入该控件(4)在弹出的对话框中选择要加入的类及菜单ID,单击“OK”完成练习为一个新建项目添加浮动菜单。要求采用两种方
14、法。6.如何在“帮助关于”对话框中添加系统信息?(1)打开项目EditSoft(2)选择“ProjectAdd to ProjectComponents and Controls”将出现组件和控件库对话框,双击部件文件夹(Visual C+Components),选择System Info for About Dlg,双击。在弹出的对话框上击确定,将返回到“Components and Controls Gallery”,单击“Close”,插入过程完成。(3)修改对话框资源,为“IDD_ABOUTBOX”增加两个静态文本控件用以进行信息提示,一个是“物理内存”,另一个是“硬盘可用空间”。(4
15、)再添加两个静态文本控件,给定ID分别为“IDC_PHYSICAL_MEM”和“IDC_DISK_SPACE”。按“Ctrl+T”预览对话框。(5)修改CAboutDlg的初始化函数BOOL CAboutDlg:OnInitDialog(),然后编译运行。添加如下代码:/TODO:Add a static control to your About Box to receive the memory/information.Initialize the control with code like this:SetDlgItemText(IDC_PHYSICAL_MEM,strFreeMemo
16、ry);/Fill disk free information/TODO:Add a static control to your About Box to receive the memory/information.Initialize the control with code like this:SetDlgItemText(IDC_DISK_SPACE,strFreeDiskSpace);/Sets the caption or text of a control owned by a window or dialog box.7.怎样为应用程序做一个每日提示(在程序启动时显示)?(
17、1)打开工程项目EditSoft;(2)选择“ProjectAdd to ProjectComponents and Controls”将出现组件和控件库对话框,双击部件文件夹(Visual C+Components),选择Tip of the day,双击。出现插入部件确认对话框,选择“确定”,出现部件类的实现文件和头文件的文件名对话框,保留缺省值,选择“OK”按钮。(3)将返回到“Components and Controls Gallery”,单击“Close”,插入过程完成。(4)编译、连接并运行。(5)运行时发现屏幕上显示“提示文件”在指定目录中不存在的信息(Tips file do
18、es not exist in the prescribed directory),并且下一提示“Next Tip”按钮变灰。为什么?(6)打开类CTipDlg类的构造函数,发现,每日提示部件是在读入了一个称为“tips.txt”的文本文件后,将文本文件的内容赋给一个变量FILE m_pStream,然后在成员函数void CTipDlg:GetNextTipString(CString&strNext)中读入一个个字符串m_strTip,再通过一个静态文本空间,通过对话框数据交换技术显示出来的。(7)因此,我们必须编辑一个纯文本文件“tips.txt”,加入项目目录中。汉化每日提示界面(1)
19、汉化标题栏文字。在ResourceView下打开IDD_TIP,右键单击对话框标题栏,选择属性Properties),在弹出的对话框的标题栏(Caption)中输入汉字“每日提示”。(2)用同样方法汉化“Show Tips on Start”为“在启动时是否显示”。(3)用同样方法汉化“Next Tip”和“Close”按钮为“下一提示”和“关闭”。(4)汉化“Did you know”提示文字。在ResourceView下打开“String Table”标识,找到ID标识为“CG_IDS_DIDYOUKNOW”的标识,双击。在弹出的对话框的标题编辑框中输入“你知道吗”。用同样的方法汉化Tip
20、s file does not exist in the prescribed directory。8.如何动态修改菜单?每日提示控件在程序菜单的尾部加了一个“Help下拉式菜单。下面的代码就是每日提示控件为在菜单栏中添加菜单而在类CMainFrame的实现文件”MainFrm.cpp”中增加的代码。参看void CMainFrame:OnInitMenu(CMenu*pMenu)这个菜单似乎同前面的帮助菜单不协调,它应该放置在“帮助”菜单的子菜单中,因此我们修改函数void CMainFrame:OnInitMenu(CMenu*pMenu),添加如下代码pMenu=GetMenu()-Ge
21、tSubMenu(3);/取得框架菜单的第4项“帮助”编译运行查看运行结果。仿照前面汉化“CG_IDS_TIPOFTHEDAYMENU”和“CG_IDS_TIPOFTHEDAYHELP”。MFC提供的菜单类CMenu为动态修改菜单提供了几个有用的函数GetSubMenu():得到菜单内的弹出式菜单(子菜单)GetMenuItemCount():取得菜单内菜单项的个数AppendMenu():在菜单的尾部添加一个菜单项Insertmenu():在菜单内某一个位置插入一个菜单项DeleteMenu():删除一个菜单项ModifyMenu():修改一个菜单项以上的成员函数用法参看教材8.1节及MSD
22、N。练习(1)新建一个项目,为其“帮助关于”对话框添加系统信息。(2)为该程序做一个每日提示。(3)动态的为该项目添加菜单项。9.怎样为应用程序增加一个日历?在VC+6.0中,微软公司为广大程序员提供了丰富的控件,控件是系统封装的能完成特定功能的单元。使用控件不仅能使界面美观、标准,而且可以大大的减少编程的工作量。(控件的介绍参看教材第11、12章。)在这里我们通过对日历控件的学习,使大家可以掌握控件的使用方法。添加日历控件的步骤(1)打开EditSoft,打开ResourceViewDialog,右键单击对话框(Dialog)标识,弹出一个浮动菜单,选择插入对话框(Insert Dialog
23、)菜单,系统将生成一个IDD_DIALOG1对话框,将其ID修改为IDD_DIALOGCALENDAR。(2)编辑对话框外观。打开菜单:ViewFull Screen,对话框资源将呈现在整个屏幕中。调整大小到合适位置。选择“Cancel”,按下键盘“Del”键删除。将“OK”按钮拖动到对话框的下方。在控件工具栏上找到“Month Calendar”控件,拖到对话框上,调整位置大小。(3)在日历控件上单击右键,选择属性,选择“扩展样式(Extend Styles)”,选择“Client edge”和“Modal Frame”复选框。按Enter返回。(4)修改对话框的英文标题为汉字。右键单击新建
24、对话框,选择“属性”菜单项,选择常用(General)选项页,ID为IDD_DIALOGCALENDAR,修改其标题。同样方法修改汉化“OK”按键。(5)为新建对话框生成一个类。双击对话框(或右键单击选择ClassWizard菜单项。ClassWizard检测到这是一个新建的对话框资源,立即询问是否新建一个类或者选择一个已有的类。在弹出的的对话框中采用缺省设置(Create a new class)击OK。在弹出的New Class对话框中输入类名CCalendarDlg,其它保持默认值。(6)为启动日历对话框新建一个菜单。打开ResourceView的菜单资源,左键双击ID标识IDR_MAI
25、NFRAME,在帮助菜单的下拉式空白框中双击左键,在弹出的对话框中输入ID:ID_HELP_CALENDARDLG,Caption:日历。(7)为启动日历对话框定义一个快捷键。打开ResourceView的加速键编辑器(Accelerator),选择新建加速键。在ID中输入:ID_HELP_CALENDARDLG,在键值(Key)中输入H,其它选项保留缺省值。(8)在视图类的头文件中加入日历对话框类的头文件引用:#include“CalendarDlg.h”.(9)增加ID_HELP_CALENDARDLG消息的消息处理函数。添加如下代码:void CEditSoftView:OnHelpCa
26、lenderdlg()CCalendarDlg dlg;dlg.DoModal();(10)编译连接并执行。10.如何使EditSoft应用程序成为多文档程序?n单文档和多文档程序重要的区别就是文档模板和框架。(1)增加文档模板成员变量CMultiDocTemplate*m_pDocTemplate;(2)在应用类的构造函数中添加如下代码:m_pDocTemplate=NULL;(3)在应用类的初始化函数InitInstance中作修改。删除原来的单文档模板,新建一个多文档模板。m_pDocTemplate=new CMultiDocTemplate(IDR_MAINFRAME,RUNTIME
27、_CLASS(CEditSoftDoc),RUNTIME_CLASS(CMainFrame),RUNTIME_CLASS(CEditSoftlView);AddDocTemplate(m_pDocTemplate);(4)在框架类中重载函数LoadFrame,添加代码。if(!CFrameWnd:LoadFrame(nIDResource,dwDefaultStyle,pParentWnd,pContext)return FALSE;CWinApp*pApp=AfxGetApp();if(pApp-m_pMainWnd=NULL)pApp-m_pMainWnd=this;return TRUE
28、;(5)为应用类添加ID_FILE_NEW的消息映射,添加如下代码,编译连接。ASSERT(m_pDocTemplate!=NULL);CDocument*pDoc=NULL;CFrameWnd*pFrame=NULL;pDoc=m_pDocTemplate-CreateNewDocument();if(pDoc!=NULL)pFrame=m_pDocTemplate-CreateNewFrame(pDoc,NULL);if(pFrame!=NULL)m_pDocTemplate-SetDefaultTitle(pDoc);if(!pDoc-OnNewDocument()pFrame-Dest
29、royWindow();elsem_pDocTemplate-InitialUpdateFrame(pFrame,pDoc,TRUE);elsedelete pDoc;if(pFrame=NULL|pDoc=NULL)AfxMessageBox(AFX_IDP_FAILED_TO_CREATE_DOC);11.怎样修改应用程序标题栏上的显示文字?n缺省情况下,应用程序标题栏上显示“无标题”,实际上,它是一个用字符创表示的结构。nEditSoftnnEditSonnnEditSoft.DocumentnEditSo Documentn该字符串分成了7段,每段用n分开,各段意义如下:IDR_MAI
30、NFRAME用途通用应用程序释义EditSoft单文档程序窗口标题WindowTitle空白文档名的根部DocNameEditSoFile/New对话框正文FileNewName空白通用对话框的文件过滤器正文FilterName空白通用对话框的文件过滤器扩展名FilterExtEditSoft.DocumentOLE等应用程序用RegFileTypedEditSo DocumentOLE等应用程序用RegFileTypeName要修改标题栏的内容或文件打开(关闭)对话框的过滤器中的显示内容,只须在字符串表编辑器对此项目进行重新编辑即可。(1)打开String Table,找到IDR_MAINF
31、RAME,双击。(2)在弹出的String Properties对话框Caption中输入:文本编辑器nEditnEditSonnn nEditSoft.DocumentnEditSo Document(3)编译连接并执行。该字符串的设置还可通过MFC AppWizardStep 4 of 6的“Advanced”进行设置。12.怎样使应用程序以最大化窗口显示?方法一:通过MFC AppWizardStep 4 of 6的“Advanced”进行设置。方法二:通过在函数BOOL CMainFrame:PreCreateWindow(CREATESTRUCT&cs)中修改代码实现。BOOL CM
32、ainFrame:PreCreateWindow(CREATESTRUCT&cs)cs.cx=GetSystemMetrics(SM_CXSCREEN);cs.cy=GetSystemMetrics(SM_CYSCREEN);return TRUE;方法三:另一种方法是在将应用程序类的InitInstance()中的ShowWindow()函数,改成下面这样。pMainFrame-ShowWindow(SW_SHOWMAXIMIZEDSW_SHOWMAXIMIZED);pMainFrame-UpdateWindow();说明The CREATESTRUCT structure defines
33、the initialization parameters passed to the window procedure of an application.The GetSystemMetrics function retrieves various system metrics(widths and heights of display elements)and system configuration settings.All dimensions retrieved by GetSystemMetrics are in pixels.SM_CXSCREEN,SM_CYSCREEN Wi
34、dth and height,in pixels,of the screen of the primary display monitor.13.怎样在应用程序的状态条上显示时间?(1)打开EditSoft工程项目(2)打开CMainFrame的实现文件“MainFrm.cpp”,找到窗口创建函数:int CMainFrame:OnCreate(LPCREATESTRUCT lpCreateStruct),加入以下代码:/设置状态条的第三个框的宽度为100m_wndStatusBar.SetPaneInfo(2,ID_SEPARATOR,SBPS_NORMAL,100);/定义显示时间字符串c
35、har strMsg250;/取得当前时间CTime time=CTime:GetCurrentTime();/将时间格式转换成字符串sprintf(strMsg,启动时刻:%02d:%02d:%02d,time.GetHour(),time.GetMinute(),time.GetSecond();/显示时间m_wndStatusBar.SetPaneText(2,strMsg);说明nm_wndStatusBar是CStatusBar对象,在Mainfrm.h中定义。nCStatusBar:SetPaneInfo void SetPaneInfo(int nIndex,UINT nID,U
36、INT nStyle,int cxWidth);Sets the specified indicator pane to a new ID,style,and width.nCStatusBar:SetPaneText BOOL SetPaneText(int nIndex,LPCTSTR lpszNewText,BOOL bUpdate=TRUE);Sets the pane text to the string pointed to by lpszNewText练习n在状态栏内显示鼠标位置n为程序的视图类添加WM_MOUSEMOVE窗口消息处理函数,添加如下代 CMainFrame*pFr
37、ame=(CMainFrame*)(AfxGetApp()-m_pMainWnd);pFrame-m_wndStatusBar.SetPaneInfo(2,ID_SEPARATOR,SBPS_NORMAL,50);char strMsg25;/定义显示鼠标字符串sprintf(strMsg,%03d,%03d,point.x,point.y);/把鼠标点拷贝到缓冲区pFrame-m_wndStatusBar.SetPaneText(2,strMsg);/显示鼠标在视图类中添加框架类头文件MainFrm.h修改框架类的m_wndStatusBar为公有数据类型。14.如何使应用程序窗口左上角标题
38、栏上的应用程序图标动起来?(1)编辑四个图标资源(2)为类CMainFrame增加时间成员变量。public:CTime m_tstart;CTime m_tnow;(3)为CMainFrame添加成员函数void CMainFrame:LoadNewIcon(UINT nIconID)HICON hIconNew=AfxGetApp()-LoadIcon(nIconID);HICON hIconOld=(HICON)GetClassLong(m_hWnd,GCL_HICON);ASSERT(hIconNew);ASSERT(hIconOld);if(hIconNew!=hIconOld)De
39、stroyIcon(hIconOld);SetClassLong(m_hWnd,GCL_HICON,(long)hIconNew);RedrawWindow(NULL,NULL,RDW_FRAME|RDW_ERASE|RDW_INVALIDATE);(4)在主框架类的int CMainFrame:OnCreate(LPCREATESTRUCT lpCreateStruct)函数中添加一个定时器。SetTimer(0,200,NULL);(5)为框架类添加WM_TIMER的消息处理函数。void CMainFrame:OnTimer(UINT nIDEvent)CTime t=CTime:Get
40、CurrentTime();m_tnow=t;CTimeSpan ts=m_tnow-m_tstart;if(ts.GetTotalSeconds()=5)m_tstart=m_tnow;if(ts.GetTotalSeconds()DragAcceptFiles();/拖放文件return TRUE;/*CWnd:DragAcceptFilesvoidDragAcceptFiles(BOOL bAccept=TRUE);Call this member function from within a window,using a CWnd pointer,in your application
41、s CWinApp:InitInstance function to indicate that the window accepts dropped files from the Windows File Manager or Windows Explorer.*/16.怎样建立一个文件打开、保存对话框?文件打开、保存对话框就是一个文件操作对话框类CFileDialog,CFileDialog类用于实现文件选择对话框,以支持文件的打开和保存操作。用户要打开或保存文件,就会和文件选择对话框打交道。文件选择对话框的创建过程与一般对话框的类似,首先是在堆栈上构建一个CFileDialog对象,然后
42、调用CFileDialog:DoModal()来启动对话框。文件对话框的构造函数为CFileDialog(BOOL bOpenFileDialog,LPCTSTR lpszDefExt=NULL,LPCTSTR lpszFileName=NULL,DWORD dwFlags=OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,LPCTSTR lpszFilter=NULL,CWnd*pParentWnd=NULL);其中,参数的含义如下:nbOpenFileDialog:如果参数bOpenFileDialog的值为TRUE,将创建Open(打开文件)对话框,否则就创建Sa
43、ve As(保存文件)对话框。nlpszDefExt用来指定缺省的文件扩展名。nlpszFileName用于规定初始文件名。ndwFlags用于设置对话框的一些属性。nlpszFilter指向一个过滤字符串,用户如果只想选择某种或某几种类型的文件,就需要指定过滤字符串。npParentWnd是指向父窗口或拥有者窗口的指针。n过滤字符串有特定的格式,它实际上是由多个子串组成,每个子串由两部分组成,第一部分是过滤器的字面说明,如“Text file(*.txt)”,第二部分是用于过滤的匹配字符串,如“*.txt”,子串的两部分用竖线字符“|”分隔开。各子串之间也要用“|”分隔,且整个串的最后两个字
44、符必须是两个连续的竖线字符“|”。一个典型的过滤字符串如下面所示:char szFilter=“All files(*.*)|*.*|Text files(*.txt)|*.txt|Word documents(*.doc)|*.doc|”;n常用函数 函数名函数名 用途用途 GetPathName返回一个包含有全路径文件名的CString对象。GetFileName 返回一个包含有文件名(不含路径)的CString对象。GetFileExt返回一个只含文件扩展名的CString对象。GetFileTitle 返回一个只含文件名(不含扩展名)的CString对象。步骤(1)建立一个以对话框为基
45、础的应用程序,或新建一个对话框。添加一个按钮,为按钮添加消息处理函数。(2)在对话框类声明中添加一个字符串变量,以存放文本:Public:CString m_txtString;(3)在按钮消息处理函数中加入如下代码:(4)编译、连接运行。char szFilter=Txt File(*.txt)|*.txt|All Files(*.*)|*.*|;TCHAR buffer256;static int nIndex=1;CStringPathName;CString m_txtString;CFileDialog FileDlg(TRUE,NULL,NULL,OFN_HIDEREADONLY,
46、szFilter);FileDlg.m_ofn.nFilterIndex=(DWORD)nIndex;if(FileDlg.DoModal()=IDOK)PathName=FileDlg.GetPathName();PathName.MakeUpper();nIndex=(int)FileDlg.m_ofn.nFilterIndex;CStdioFile file(PathName,CFile:modeRead|CFile:typeText);long count=0;long length=file.GetLength();long pos=0;domemset(buffer,0,sizeof(buffer);count=file.Read(buffer,sizeof(buffer)-1);m_txtString+=buffer;pos+=count;while(count=sizeof(buffer)-1);UpdateData(FALSE);练习n通过设置不同的参数,分别调用打开、保存对话框。