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


发布评论