2024年4月28日发(作者:)

西安科技大学

《VC++程序设计》

实验报告

题 目 记事本功能实现

院、系(部) 计算机科学与技术

专业及班级

学 号

姓 名

日 期

1 题目要求

本实验目的是通过所学知识对文档进行操作。可以实现文字的复制、保存、

粘贴、剪贴、字体设置、背景设置等功能。在保证实现基本公能的同时尽量界面

友好。

2 功能需求

此记事本的基本功能是实现对文字的编辑、字体设置等功能。

(1) 对文档内的文字可以进行粘贴、复制、剪贴、删除等功能;

(2) 可以对背景进行设置;

(3) 可以对字体进行设置(字体和文字大小等);

3

总体设计

3.1 实现步骤

1、 首先创建基于对话框的工程,建立空白的单文档;

2、 定义所需的变量、宏、消息映射以及函数声明等;

3、 按照要求逐个实现具体的函数功能,如文字的复制粘贴、删除、字体的设置等。

3.2 模块划分

记事本功能模块

基本功能 特殊功能

退

4 详细设计

4.1 主要代码

1

(1) 初始化各个控件

void CEditDemoDlg::initData()

{

}

(2) 文字的剪贴、复制与删除实现代码

void CEditDemoDlg::OnEditCut()

{

}

void CEditDemoDlg::OnEditCopy()

{

}

void CEditDemoDlg::OnEditPaste()

{

CRect rect;

GetClientRect(&rect);

m_(this); //创建状态栏

m_icators(indicators,3); //设置状态栏Pane的数量

adaptStatusBarWidth(rect);

m_bShowStatusBar = false;

AdaptWindowPostion();

pathName = _T("");

// TODO: Add your command handler code here

//直接调用类CEdit的成员函数cut()

((CEdit*)(this->GetDlgItem(IDC_EDIT)))->Cut();

// TODO: Add your command handler code here

//直接调用类CEdit的成员函数copy()

((CEdit*)(this->GetDlgItem(IDC_EDIT)))->Copy();

// TODO: Add your command handler code here

//调用类CEdit的成员函数paste()

2

}

((CEdit*)(this->GetDlgItem(IDC_EDIT)))->Paste();

void CEditDemoDlg::OnEditDel()

{

}

(3) 查找等功能

void CEditDemoDlg::OnEditSerach()

{

}

void CEditDemoDlg::OnEditSerachNext()

{

// TODO: Add your command handler code here

//直接调用类CEdit的成员函数Clear()

((CEdit*)(this->GetDlgItem(IDC_EDIT)))->Clear();

// TODO: Add your command handler code here

//查找替换对话框是非模式对话框,不能使用domodal

if(NULL != m_dlgFindReplace)

{

}

else

{

}

m_dlgFindReplace = new CFindReplaceDialog;

m_dlgFindReplace->Create(TRUE, _T(""), _T(""), FR_DOWN, this);

m_dlgFindReplace->m_tSize = sizeof(FINDREPLACE);

m_dlgFindReplace->m_ner = this->m_hWnd;

m_dlgFindReplace->SetFocus();

// TODO: Add your command handler code here

if(NULL != m_dlgFindReplace)

3

}

{

}

else

{

}

m_dlgFindReplace = new CFindReplaceDialog;

m_dlgFindReplace->Create(TRUE, _T(""), _T(""), FR_DOWN, this);

m_dlgFindReplace->m_tSize = sizeof(FINDREPLACE);

m_dlgFindReplace->m_ner = this->m_hWnd;

m_dlgFindReplace->SetFocus();

void CEditDemoDlg::OnEditReplace()

{

}

long CEditDemoDlg::OnFindReplace(WPARAM wParam, LPARAM lParam)

{

}

void CEditDemoDlg::OnEditGo()

{

// TODO: Add your command handler code here

m_dlgFindReplace = new CFindReplaceDialog;

m_dlgFindReplace->Create(FALSE,NULL);

m_dlgFindReplace->ShowWindow(SW_SHOW);

CString m_strSource;

this->GetDlgItemText(IDC_EDIT,m_strSource);

CString strFind = m_dlgFindReplace->GetFindString();

int len = gth();

return len;

// TODO: Add your command handler code here

4

}

//MessageBox(_T("转到"),_T("转到下列行"),MB_APPLMODAL);

CGotoDlg cGotoDlg = new CGotoDlg;

l();

//自动换行

void CEditDemoDlg::OnFormatAutoLine()

{

// TODO: Add your command handler code here

DWORD style = m_le();

if

(AfxGetMainWnd()->GetMenu()->GetMenuState(ID_FORMAT_AUTO_LINE,MF_CHEC

KED))

{

AfxGetMainWnd()->GetMenu()->CheckMenuItem(ID_FORMAT_AUTO_LINE,MF_

UNCHECKED);

m_Style(0,

WS_HSCROLL,SWP_NOSIZE);

}

else

style = m_le();

ES_AUTOHSCROLL |

{

AfxGetMainWnd()->GetMenu()->CheckMenuItem(ID_FORMAT_AUTO_LINE,MF_

CHECKED);

m_Style(ES_AUTOHSCROLL

WS_HSCROLL,0,SWP_NOSIZE);

}

5

|

}

style = m_le();

UpdateWindow();

void CEditDemoDlg::OnUpdateViewStatus(CCmdUI* pCmdUI)

{

if

(AfxGetMainWnd()->GetMenu()->GetMenuState(ID_VIEW_STATUS,MF_CHECKED))

{

}

else

{

m_bShowStatusBar = true;

// TODO: Add your command update UI handler code here

if(m_bShowStatusBar)

{

m_bShowStatusBar = false;

// pCmdUI->SetCheck(1);

// pCmdUI->SetCheck(0);

}

AfxGetMainWnd()->GetMenu()->CheckMenuItem(ID_VIEW_STATUS,MF_UNCHE

CKED);

}

else

{

AfxGetMainWnd()->GetMenu()->CheckMenuItem(ID_VIEW_STATUS,MF_CHECK

ED);

}

void CEditDemoDlg::OnSize(UINT nType, int cx, int cy)

{

6

}

CDialog::OnSize(nType, cx, cy);

// TODO: Add your message handler code here

CRect rect;

GetClientRect(&rect);

/*

//设置状态栏Pane的大小

//m_eInfo(0,IDS_SAVE_STATUS,SBPS_NORMAL,()-10

0);

//This is where we actually draw it on the screen

//m_eInfo(1,IDS_TIME,SBPS_STRETCH,0);

//m_eInfo(2,IDS_LINE,SBPS_STRETCH,0);

RepositionBars(AFX_IDW_CONTROLBAR_FIRST,AFX_IDW_CONTROLBAR_LAST,I

DS_SAVE_STATUS);

//m_tusBarCtrl().SetBkColor(RGB(212,208,200));//设置背

景颜色

//获得父窗口的客户区矩形

GetClientRect(&rect);

CRect mRect;

if(m_bar)

{

}

CEdit* pEdit=(CEdit*)(GetDlgItem(IDC_EDIT));

if(pEdit)

{

}

7

m_dowRect(&mRect);

-= ();

pEdit->MoveWindow(&rect);

}

*/

adaptStatusBarWidth(rect);

AdaptWindowPostion();

void CEditDemoDlg::OnHelpAbout()

{

//关闭或者开启状态栏

void CEditDemoDlg::OnViewStatus()

{

}

void CEditDemoDlg::OnFileAnothersave()

{

// TODO: Add your command handler code here

//对文件对话框进行初始化

CString sFileName = _T("Test");

// TODO: Add your command handler code here

AdaptWindowPostion();

//弹出关于对话框

CAboutDlg dlgAbout;

l();

}

// TODO: Add your command handler code here

CFileDialog dlgFile(FALSE, "txt",

NULL,OFN_FILEMUSTEXIST|OFN_HIDEREADONLY|OFN_NONETWORKBUTTON ,_T("文本

8

文件(*.txt)|*.txt|所有文件|*.*||"), this);

}

void CEditDemoDlg::OnFileOpen()

{

// TODO: Add your command handler code here

//对文件对话框进行初始化

CString sFileName = _T("Test");

//开始显示文件对话框

if(l() == IDOK)

{

}

pathName = hName();

UpdateData(TRUE);

ofstream txt(pathName);

if(())

{

}

else

{

}

txt << m_Edit;

();

UpdateData(FALSE);

MessageBox("Open file failed.");

return;

CFileDialog dlgFile(TRUE, "txt",

NULL,OFN_FILEMUSTEXIST|OFN_HIDEREADONLY,_T("文本文件(*.txt)|*.txt||"),

this);

9

}

//开始显示文件对话框

if(l() == IDOK)

{

}

pathName = hName();

UpdateData(TRUE);

ifstream txt(pathName);

if(())

{

}

string str;

m_Edit = "";

while(!())

{

}

();

UpdateData(FALSE);

//Change the window's title to the opened file's title.

CString fileName = eTitle();

SetWindowText(fileName);

getline(txt, str);

m_Edit += str.c_str();

m_Edit += _T("xdxa");

MessageBox("Open file failed.");

return;

void CEditDemoDlg::OnFileSave()

{

// TODO: Add your command handler code here

10

if(pathName != _T(""))//如果当前路径有文件,直接保存

{

CFile file(pathName,CFile::modeWrite|CFile::modeCreate);

CString str;

GetDlgItemText(IDC_EDIT,str);

(fer(gth()),gth());

();

}

else//否则直接另存为

{

OnFileAnothersave();

}

}

void CEditDemoDlg::OnFilePagecfg()

{

// TODO: Add your command handler code here

//页面设置

CPageSetupDialog m_Cpagecfg(PSD_MARGINS

PSD_INWININIINTLMEASURE,this);

if(m_l() == IDOK)

{ }

}

void CEditDemoDlg::OnFilePrint()

{

// TODO: Add your command handler code here

CPrintDialog m_dlgPrint(FALSE);

m_l();

11

|

/*

CPrintDialog m_dlgPrint1(FALSE, PD_ALLPAGES | PD_COLLATE |

PD_NOPAGENUMS | PD_HIDEPRINTTOFILE);

m_l();

PD_SELECTION | CPrintDialog m_dlgPrint2(FALSE,

PD_USEDEVMODECOPIES);

}

(4)设置背景颜色

BOOL CEditDemoApp::InitInstance()

{

// Standard initialization

AfxEnableControlContainer();

m_l();

*/

// If you are not using these features and wish to reduce the size

// of your final executable, you should remove from the following

// the specific initialization routines you do not need.

CEditDemoApp::SetDialogBkColor(RGB(0, 255, 0),RGB(255,0,255 ));//调用

背景颜色设置函数

}

4.2 效果展示

12

5 心得体会

13

此次实验报告的主要内容是实现类似windows记事本的功能,能够完成诸

如剪贴、复制、粘贴以及字体设置等功能。在课堂上老师已经将大致的流程讲解

完毕我们只需要增添其余的功能。但是想象中的与事件中的完全两码事,会遇到

很多的由于自己的粗心以及逻辑上的错误都会是程序出现问题。

此次主要基于CDilog基类进行扩充,一些函数的实现都是不顺利的,都会

出现一些问题。但最后都得到了解决。最深的感触是自己练习太少,以后应该提

高。

14