VC++记事本实验报告.docx

上传人:b****9 文档编号:23425687 上传时间:2023-05-17 格式:DOCX 页数:24 大小:100.77KB
下载 相关 举报
VC++记事本实验报告.docx_第1页
第1页 / 共24页
VC++记事本实验报告.docx_第2页
第2页 / 共24页
VC++记事本实验报告.docx_第3页
第3页 / 共24页
VC++记事本实验报告.docx_第4页
第4页 / 共24页
VC++记事本实验报告.docx_第5页
第5页 / 共24页
点击查看更多>>
下载资源
资源描述

VC++记事本实验报告.docx

《VC++记事本实验报告.docx》由会员分享,可在线阅读,更多相关《VC++记事本实验报告.docx(24页珍藏版)》请在冰豆网上搜索。

VC++记事本实验报告.docx

VC++记事本实验报告

 

西安科技大学计算机学院

VC++程序设计实验报告

 

题目科学计算器

学号

专业及班级计科0804

姓名

日期2010-11-03

一、

实验内容

参考Windows自带记事本,做一个超级记事本程序,使其具有添加字体颜色、背景颜色、等设置。

通过这个过程掌握如何使用VC++设计文本程序,熟练VC++中的一些编程技巧。

二、设计思路

1.文档类的方法

CDocument类提供了文档类所需要的最基本的功能实现。

它提供的方法主要有一般方法和虚拟方法。

表2-1是CDocument中的一般方法。

方法

说明

GetTitle()

SetTitle()

GetPathName()

SetPathName()

GetDocTemplate()

AddView()

RemoveView()

UpdateAllViews()

DisconnectViews()

GetFile()

获得文档标题

设置文档标题

获得文档数据文件的路径字符串

设置文档数据文件的路径字符串

获得指向描述文档类型的文档模板的指针

向与文档相关联的视图列表添加指定的视图

从文档视图列表中删除视图

通知所有视图文档已被修改,应该重画

使文档与视图分离

获得指向CFile类型的指针

表2-1CDocument中的一般方法

CDocument类提供的虚拟方法,使应用程序可以重写虚拟函数来提供CDocument派生类中的方法。

CDocument的虚拟方法的具体说明如表2-2所示。

方法

说明

OnNewDocument()

OnOpenDocument()

OnSaveDocument()

OnCloseDocument()

CanCloseFrame()

PreCloseFrame()

DeleteContents()

ReleaseFile()

SaveModified()

IsModified()

SetModifiedFlag()

GetFirstViewPosition()

GetNextView()

由MFC调用来建立文档

由MFC调用来打开文档

由MFC调用来保存文档

由MFC调用来关闭文档

确定观察文档的框架窗口是否被允许关闭

在关闭框架窗口过程中调用该函数以询问用户要求

在未撤销文档对象时删除文档数据

释放文件以允许其他应用程序使用

查询文档的修改状态并存储修改的文档

确定文档从它最后一次存储后是否被修订过

设置文档从它最后一次存储后是否被修订过的布尔值

获得视图列表头的位置

获得视图列表的下一个视图

表2-2CDocument中的虚拟方法

2.文档的建立、打开或保存。

建立或者打开文档的流程如图2-3所示。

保存文档的流程如图2-4所示。

 

 

 

图2-3建立或打开文档

 

图2-4保存文档

2.视图类的方法

表2-5所示是CView中的一般方法。

方法

说明

GetDocument()

DoPreparePrinting()

获得指向与视图相关联的文档的指针

初始化视图窗口

表2-5CView中的一般方法

CView类提供的虚拟方法使应用程序可以重写它们来提供CView派生类中的方法。

CView的虚拟方法的具体说明如表2-6所示。

方法

说明

IsSelected()

OnScroll()

OnInitialUpdate()

OnDraw()

OnUpdate()

OnPrepareDC()

确定文档是否被选中

当操作视图窗口的滚动条时被调用

第一次更新视图窗口时被调用

重绘视图窗口时被调用

更新视图窗口时被调用

在调用OnDraw()前修改设备环境表

表2-6CView中的虚拟方法

3.视图类的派生类

CEditView类

CRichCEditView类

CTreeView类

CListView类

CScrollView类

三、代码实现

A.主要代码实现

1.在“帮助\关于…”对话框中添加系统信息

(1)打开项目EditSoft

(2)选择“Project\AddtoProject\ComponentsandControls…”将出现组件和控件库对话框,双击部件文件夹(VisualC++Components),选择SystemInfoforAboutDlg,双击。

在弹出的对话框上击确定,将返回到“ComponentsandControlsGallery”,单击“Close”,插入过程完成。

(3)修改对话框资源,为“IDD_ABOUTBOX”增加两个静态文本控件用以进行信息提示,一个是“物理内存”,另一个是“硬盘可用空间”。

(4)再添加两个静态文本控件,给定ID分别为“IDC_PHYSICAL_MEM”和“IDC_DISK_SPACE”。

按“Ctrl+T”预览对话框。

(5)修改CAboutDlg的初始化函数BOOLCAboutDlg:

:

OnInitDialog(),然后编译运行。

添加如下代码:

//TODO:

AddastaticcontroltoyourAboutBoxtoreceivethememory

//information.Initializethecontrolwithcodelikethis:

SetDlgItemText(IDC_PHYSICAL_MEM,strFreeMemory);

//Filldiskfreeinformation

//TODO:

AddastaticcontroltoyourAboutBoxtoreceivethememory

//information.Initializethecontrolwithcodelikethis:

SetDlgItemText(IDC_DISK_SPACE,strFreeDiskSpace);

//Setsthecaptionortextofacontrolownedbyawindowordialogbox.

2.为应用程序做一个每日提示(在程序启动时显示)

(1)打开工程项目EditSoft;

(2)选择“Project\AddtoProject\ComponentsandControls…”将出现组件和控件库对话框,双击部件文件夹(VisualC++Components),选择Tipoftheday,双击。

出现插入部件确认对话框,选择“确定”,出现部件类的实现文件和头文件的文件名对话框,保留缺省值,选择“OK”按钮。

(3)将返回到“ComponentsandControlsGallery”,单击“Close”,插入过程完成。

(4)编译、连接并运行。

(5)运行时发现屏幕上显示“提示文件”在指定目录中不存在的信息(Tipsfiledoesnotexistintheprescribeddirectory),并且下一提示“NextTip”按钮变灰。

为什么?

(6)打开类CTipDlg类的构造函数,发现,每日提示部件是在读入了一个称为“tips.txt”的文本文件后,将文本文件的内容赋给一个变量FILE*m_pStream,然后在成员函数voidCTipDlg:

:

GetNextTipString(CString&strNext)中读入一个个字符串m_strTip,再通过一个静态文本空间,通过对话框数据交换技术显示出来的。

(7)因此,我们必须编辑一个纯文本文件“tips.txt”,加入项目目录中。

3.为应用程序增加一个日历

(1)打开EditSoft,打开ResourceView\Dialog,右键单击对话框(Dialog)标识,弹出一个浮动菜单,选择插入对话框(InsertDialog)菜单,系统将生成一个IDD_DIALOG1对话框,将其ID修改为IDD_DIALOGCALENDAR。

(2)编辑对话框外观。

打开菜单:

View\FullScreen,对话框资源将呈现在整个屏幕中。

调整大小到合适位置。

选择“Cancel”,按下键盘“Del”键删除。

将“OK”按钮拖动到对话框的下方。

在控件工具栏上找到“MonthCalendar”控件,拖到对话框上,调整位置大小。

(3)在日历控件上单击右键,选择属性,选择“扩展样式(ExtendStyles)”,选择“Clientedge”和“ModalFrame”复选框。

按Enter返回。

(4)修改对话框的英文标题为汉字。

右键单击新建对话框,选择“属性”菜单项,选择常用(General)选项页,ID为IDD_DIALOGCALENDAR,修改其标题。

同样方法修改汉化“OK”按键。

(5)为新建对话框生成一个类。

双击对话框(或右键单击选择ClassWizard菜单项。

ClassWizard检测到这是一个新建的对话框资源,立即询问是否新建一个类或者选择一个已有的类。

在弹出的的对话框中采用缺省设置(Createanewclass)击OK。

在弹出的NewClass对话框中输入类名CCalendarDlg,其它保持默认值。

(6)为启动日历对话框新建一个菜单。

打开ResourceView的菜单资源,左键双击ID标识IDR_MAINFRAME,在帮助菜单的下拉式空白框中双击左键,在弹出的对话框中输入ID:

ID_HELP_CALENDARDLG,Caption:

日历。

(7)为启动日历对话框定义一个快捷键。

打开ResourceView的加速键编辑器(Accelerator),选择新建加速键。

在ID中输入:

ID_HELP_CALENDARDLG,在键值(Key)中输入H,其它选项保留缺省值。

(8)在视图类的头文件中加入日历对话框类的头文件引用:

#include“CalendarDlg.h”.

(9)增加ID_HELP_CALENDARDLG消息的消息处理函数。

添加如下代码:

voidCEditSoftView:

:

OnHelpCalenderdlg()

{

CCalendarDlgdlg;

dlg.DoModal();

}

(10)编译连接并执行。

4.使EditSoft应用程序成为多文档程序

单文档和多文档程序重要的区别就是文档模板和框架。

(1)在应用类增加文档模板成员变量CMultiDocTemplate*m_pDocTemplate;

(2)在应用类的构造函数中添加如下代码:

m_pDocTemplate=NULL;

(3)在应用类的初始化函数InitInstance中作修改。

删除原来的单文档模板,新建一个多文档模板。

m_pDocTemplate=newCMultiDocTemplate(

IDR_MAINFRAME,RUNTIME_CLASS(CEditSoftDoc),

RUNTIME_CLASS(CMainFrame),

RUNTIME_CLASS(CEditSoftView));

AddDocTemplate(m_pDocTemplate);

(4)在框架类中重载函数LoadFrame,添加代码。

if(!

CFrameWnd:

:

LoadFrame(nIDResource,dwDefaultStyle,pParentWnd,pContext))

returnFALSE;

CWinApp*pApp=AfxGetApp();

if(pApp->m_pMainWnd==NULL)

pApp->m_pMainWnd=this;

returnTRUE;

(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->DestroyWindow();

}

else

m_pDocTemplate->InitialUpdateFrame(pFrame,pDoc,TRUE);

}

else

deletepDoc;

}

if(pFrame==NULL||pDoc==NULL)

AfxMessageBox(AFX_IDP_FAILED_TO_CREATE_DOC);

5.在应用程序的状态条上显示时间

(1)打开EditSoft工程项目

(2)打开CMainFrame的实现文件“MainFrm.cpp”,找到窗口创建函数:

intCMainFrame:

:

OnCreate(LPCREATESTRUCTlpCreateStruct)

加入以下代码:

//设置状态条的第三个框的宽度为100

m_wndStatusBar.SetPaneInfo(2,ID_SEPARATOR,SBPS_NORMAL,100);

//定义显示时间字符串

charstrMsg[250];

//取得当前时间

CTimetime=CTime:

:

GetCurrentTime();

//将时间格式转换成字符串

sprintf(strMsg,"启动时刻:

%02d:

%02d:

%02d",

time.GetHour(),time.GetMinute(),time.GetSecond());

//显示时间

m_wndStatusBar.SetPaneText(2,strMsg);

6.使应用程序窗口左上角标题栏上的应用程序图标动起来

(1)编辑三个图标资源

(2)为类CMainFrame增加时间成员变量。

public:

CTimem_tstart;

CTimem_tnow;

(3)为CMainFrame添加成员函数

voidCMainFrame:

:

LoadNewIcon(UINTnIconID)

{

HICONhIconNew=AfxGetApp()->LoadIcon(nIconID);

HICONhIconOld=(HICON)GetClassLong(m_hWnd,GCL_HICON);

ASSERT(hIconNew);

ASSERT(hIconOld);

if(hIconNew!

=hIconOld)

{

DestroyIcon(hIconOld);

SetClassLong(m_hWnd,GCL_HICON,(long)hIconNew);

RedrawWindow(NULL,NULL,RDW_FRAME|RDW_ERASE|RDW_INVALIDATE);

}

}

(4)在主框架类的intCMainFrame:

:

OnCreate(LPCREATESTRUCTlpCreateStruct)函数中添加一个定时器。

SetTimer(0,500,NULL);

(5)为框架类添加WM_TIMER的消息处理函数。

voidCMainFrame:

:

OnTimer(UINTnIDEvent)

{

staticinticons[]={IDI_ICON1,IDI_ICON2,IDI_ICON3};

staticlongindex=0;

LoadNewIcon(icons[index++%3]);

}

7.使应用程序支持拖放功能

(1)打开EditSoft工程项目

(2)打开BOOLCEditSoftApp:

:

InitInstance(),在其中添加以下代码:

m_pMainWnd->DragAcceptFiles();//拖放文件

returnTRUE;

}

8.建立一个文件打开、保存对话框

(1)建立一个以对话框为基础的应用程序,或新建一个对话框。

添加一个按钮,为按钮添加消息处理函数。

(2)在对话框类声明中添加一个字符串变量,以存放文本:

Public:

CStringm_txtString;

(3)在按钮消息处理函数中加入如下代码:

charszFilter[]="TxtFile(*.txt)|*.txt|AllFiles(*.*)|*.*||";

TCHARbuffer[256];

staticintnIndex=1;

CStringPathName;

CStringm_txtString;

CFileDialogFileDlg(TRUE,NULL,NULL,OFN_HIDEREADONLY,szFilter);

FileDlg.m_ofn.nFilterIndex=(DWORD)nIndex;

if(FileDlg.DoModal()==IDOK)

{

PathName=FileDlg.GetPathName();

PathName.MakeUpper();

nIndex=(int)FileDlg.m_ofn.nFilterIndex;

CStdioFilefile(PathName,CFile:

:

modeRead|CFile:

:

typeText);

longcount=0;

longlength=file.GetLength();

longpos=0;

do{

memset(buffer,0,sizeof(buffer));

count=file.Read(buffer,sizeof(buffer)-1);

m_txtString+=buffer;

pos+=count;

}while(count==sizeof(buffer)-1);

UpdateData(FALSE);

}

(4)编译、连接运行。

B.EditSoft.cpp文件

//EditSoft.cpp:

Definestheclassbehaviorsfortheapplication.

//

#include"stdafx.h"

#include"EditSoft.h"

#include"MainFrm.h"

#include"EditSoftDoc.h"

#include"EditSoftView.h"

#include"resource.h"

#include

#include

#ifdef_DEBUG

#definenewDEBUG_NEW

#undefTHIS_FILE

staticcharTHIS_FILE[]=__FILE__;

#endif

/////////////////////////////////////////////////////////////////////////////

//CEditSoftApp

BEGIN_MESSAGE_MAP(CEditSoftApp,CWinApp)

ON_COMMAND(CG_IDS_TIPOFTHEDAY,ShowTipOfTheDay)

//{{AFX_MSG_MAP(CEditSoftApp)

ON_COMMAND(ID_APP_ABOUT,OnAppAbout)

ON_COMMAND(ID_FILE_NEW,OnFileNew)

//}}AFX_MSG_MAP

//Standardfilebaseddocumentcommands

ON_COMMAND(ID_FILE_NEW,CWinApp:

:

OnFileNew)

ON_COMMAND(ID_FILE_OPEN,CWinApp:

:

OnFileOpen)

//Standardprintsetupcommand

ON_COMMAND(ID_FILE_PRINT_SETUP,CWinApp:

:

OnFilePrintSetup)

END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////

//CEditSoftAppconstruction

CEditSoftApp:

:

CEditSoftApp()

{

//TODO:

addconstructioncodehere,

m_pDocTemplate=NULL;

//PlaceallsignificantinitializationinInitInstance

}

/////////////////////////////////////////////////////////////////////////////

//TheoneandonlyCEditSoftAppobject

CEditSoftApptheApp;

/////////////////////////////////////////////////////////////////////////////

//CEditSoftAppinitialization

BOOLCEditSoftApp:

:

InitInstance()

{

AfxEnableControlContainer();

m_pDocTemplate=newCMultiDocTemplate(

IDR_MAINFRAME,RUNTIME_CLASS(CEditSoftDoc),

RUNTIME_CLASS(CMainFrame),

RUNTIME_CLASS(CEditSoftView));

AddDocTemplate(m_pDocTemplate);

//Standardinitialization

//Ifyouarenotusingthesefeaturesandwishtoreducethesize

//ofyourfinalexecutable,youshouldremovefromthefollowing

//thespecificinitializationroutinesyoudonotneed.

#ifdef_AFXDLL

Enable3dControls();//CallthiswhenusingMFCinasharedDLL

#else

Enable3dControlsStatic

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 幼儿教育 > 育儿知识

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1