VC++程序设计试题作业.docx
- 文档编号:11345666
- 上传时间:2023-05-31
- 格式:DOCX
- 页数:47
- 大小:307.94KB
VC++程序设计试题作业.docx
《VC++程序设计试题作业.docx》由会员分享,可在线阅读,更多相关《VC++程序设计试题作业.docx(47页珍藏版)》请在冰点文库上搜索。
VC++程序设计试题作业
四、使用MFC编写带菜单和工具栏的文本框编辑程序,支持复制、剪切和粘贴功能,以及文件打开、保存功能。
(20分)
资源列表:
编程资源
资源类别
标题
ID
关联变量类型
关联变量名称
MENU
菜单
IDR_MENU1
MENU
DIALOG
对话框
NotePad
IDD_NOTEPAD_DIALOG
DIALOG
CNotePadDlg
菜单-打开
子菜单
打开
ID_FILE_OPEN
CFileDialog
filedlg
菜单-保存
子菜单
保存
ID_FILE_SAVE
CFile
file
菜单-另存为
子菜单
另存为
ID_FILE_SAVE_AS
CFileDialogCFile
filedlg
file
菜单-退出
子菜单
退出
ID_FILE_EXIT
EndDialog
EndDialog
菜单-复制
子菜单
复制
ID_EDIT_COPY
CEdit*
pEdit
菜单-粘贴
子菜单
粘贴
ID_EDIT_PASTE
CEdit*
pEdit
菜单-剪切
子菜单
剪切
ID_EDIT_CUT
CEdit*
pEdit
菜单-删除
子菜单
删除
ID_EDIT_CLEAR
CEdit*
pEdit
菜单-撤销
子菜单
撤销
ID_EDIT_UNDO
CEdit*
pEdit
程序运行效果:
主界面:
打开、保存、另存为效果:
复制、粘贴、剪切效果:
除此之外还实现了全选功能、删除功能,可以全选文本内容和删除内容,还实现了撤销等功能。
程序主要代码:
//重载OnClose()实现X的退出功能
voidCNotePadDlg:
:
OnClose()
{
OnFileExit();//这里调用菜单下的退出函数
//EndDialog(IDCANCEL);
//CDialog:
:
OnClose();
}
//实现菜单栏目下复制的功能
voidCNotePadDlg:
:
OnEditCopy()
{
CEdit*pEdit=(CEdit*)GetDlgItem(IDC_TEXT);
pEdit->Copy();
}
//实现菜单栏目下删除的功能
voidCNotePadDlg:
:
OnEditClear()
{
CEdit*pEdit=(CEdit*)GetDlgItem(IDC_TEXT);
pEdit->Clear();
}
//实现菜单栏目下撤销的功能
voidCNotePadDlg:
:
OnEditUndo()
{
CEdit*pEdit=(CEdit*)GetDlgItem(IDC_TEXT);
pEdit->Undo();
}
//实现菜单栏目下剪切的功能
voidCNotePadDlg:
:
OnEditCut()
{
CEdit*pEdit=(CEdit*)GetDlgItem(IDC_TEXT);
pEdit->Cut();
}
//实现菜单栏目下全选的功能
voidCNotePadDlg:
:
OnEditSelectAll()
{
CEdit*pEdit=(CEdit*)GetDlgItem(IDC_TEXT);
pEdit->SetSel(0,-1);
}
//实现菜单栏目下粘贴的功能
voidCNotePadDlg:
:
OnEditPaste()
{
CEdit*pEdit=(CEdit*)GetDlgItem(IDC_TEXT);
pEdit->Paste();
}
//实现菜单栏目下时间的功能
voidCNotePadDlg:
:
OnEditDate()
{
CTimet=CTime:
:
GetCurrentTime();
CStringstr=t.Format("%Y年%m月%d日%H:
%M:
%S");
CEdit*pEdit=(CEdit*)GetDlgItem(IDC_TEXT);
pEdit->ReplaceSel(str,TRUE);
}
//实现移动窗口大小的功能;记得修改窗口属性当中的值
voidCNotePadDlg:
:
OnSize(UINTnType,intcx,intcy)
{
CDialog:
:
OnSize(nType,cx,cy);
CWnd*pEdit=GetDlgItem(IDC_TEXT);
if(pEdit)
pEdit->MoveWindow(0,0,cx,cy);
}
//实现菜单下退出的功能
voidCNotePadDlg:
:
OnFileExit()
{
if(Prompt()==0)//如果等于0,代表选择了取消,那么不关闭对话框
{
//不做任何处理
}
else//如果不等于0那么代表选择了否直接关闭对话框
{
EndDialog(IDCANCEL);
}
}
//实现菜单栏目下打开的功能
voidCNotePadDlg:
:
OnFileOpen()
{
//过滤器
LPCTSTRszFilter="文本文件(*.txt)|*.txt|所有文件(*.*)|*.*||";
//打开一个文件选择对话框TRUE代表打开文件
CFileDialogfiledlg(TRUE,"txt","11",OFN_PATHMUSTEXIST|OFN_FILEMUSTEXIST,
szFilter);
if(IDCANCEL==filedlg.DoModal())
return;
//打开文件并显示到IDC_TEXT当中
OpenFile(filedlg.GetPathName(),filedlg.GetFileName());
}
//实现菜单栏目下保存的功能
voidCNotePadDlg:
:
OnFileSave()
{
//如果要保存的文件是第一次保存,那么就转换到另存为
if(m_szCurrentFile.GetLength()==0)
{
OnFileSaveAs();
return;
}
CFilefile;
if(file.Open(m_szCurrentFile,CFile:
:
modeWrite|CFile:
:
modeCreate)==0)
{
OnFileSaveAs();
return;
}
CStringszText;
GetDlgItemText(IDC_TEXT,szText);//得到Edit控件里面的内容
file.Write(szText,szText.GetLength());//写入file对象
file.Close();//关闭对象
CEdit*pEdit=(CEdit*)GetDlgItem(IDC_TEXT);
pEdit->SetModify(FALSE);//FALSE表示文本没有改变;这里直接保存,点击退出的时候不要再提示改变
}
//实现菜单栏目下另存为的功能
voidCNotePadDlg:
:
OnFileSaveAs()
{
LPCTSTRszFilter="文本文件(*.txt)|*.txt|所有文件(*.*)|*.*||";
//初始化文件对话框FALSE代表保存文件
CFileDialogfiledlg(FALSE,"txt","11",OFN_OVERWRITEPROMPT|OFN_PATHMUSTEXIST|
OFN_FILEMUSTEXIST|OFN_CREATEPROMPT,szFilter);
//打开文件对话框
if(IDCANCEL==filedlg.DoModal())
return;
//得到文件对话框中选择文件的路径名
CStringszFile=filedlg.GetPathName();
//声明一个CFile对象
CFilefile;
//打开文件
if(file.Open(szFile,CFile:
:
modeWrite|CFile:
:
modeCreate)==0)
{
MessageBox(filedlg.GetFileName()+"保存文件时失败!
",NULL,MB_ICONEXCLAMATION);
return;
}
//当前文件为该文件,保存下来
m_szCurrentFile=szFile;
CStringstrText;
//得到IDC_TEXT控件里面的内容
GetDlgItemText(IDC_TEXT,strText);
//文件写入,第一个参数是要写入的内容,第二个是写入内容的长度
file.Write(strText,strText.GetLength());
file.Flush();//上面的解释跟清除了,我看这个就明白了,相信你也一样
file.Close();//关闭文件,删除对象!
CEdit*pEdit=(CEdit*)GetDlgItem(IDC_TEXT);
pEdit->SetModify(FALSE);
SetTitle();
}
//处理文件修改的情况
BOOLCNotePadDlg:
:
Prompt()
{
CEdit*pEdit=(CEdit*)GetDlgItem(IDC_TEXT);
if(pEdit->GetModify())//如果文件被修改
{
CStringstr;
if(m_szCurrentFile.IsEmpty())//如果当前的文件为空,则str=无标题
str="无标题";
else
str=m_szCurrentFile;//否则就是现在打开文件的Path
intnRet=MessageBox(str+"\r\n已经被修改,是否保存?
","提示消息",
MB_YESNOCANCEL|MB_ICONEXCLAMATION);
if(IDCANCEL==nRet)//如果选择了取消,那么不做任何处理,也不关闭对话框(在退出函数中做处理)
returnFALSE;
if(IDNO==nRet)//如果选择了否直接关闭对话框(在退出函数当中做处理)
returnTRUE;
else//如果选择了是保存文件
OnFileSave();
}
returnTRUE;
}
//设置上面的标题
voidCNotePadDlg:
:
SetTitle()
{
CStringstr;
if(m_szCurrentFile.IsEmpty())
str="无标题";
else
str=m_szCurrentFile;
inti=str.ReverseFind('\\');//反向找到\\
if(i>0)
str=str.Mid(i+1);//从\\位置处截出str后面的内容
SetWindowText(str);
五、使用API编写绘图程序如下图。
(20分)
要求:
在“形状”列表框中选择要绘制图形,在“笔颜色”下拉列表框选择画笔的颜色,在“刷子颜色”下拉列表框中选择画刷的颜色。
在“线型”组合框选择画笔的线型,在“填充类型”中选择画刷填充类型。
单击“绘图”按钮按照前面的选项绘制图形,单击“退出”按钮退出程序。
资源列表:
资源名称
资源类别
标题
ID号
关联变量
消息响应函数
变量类型
变量名称
绘图形状
列表框控件
形状
IDC_LIST1
CString
m_DrawType;
afx_msgvoidOnSelchangeList1();
笔颜色
下拉框控件
笔颜色
IDC_COMBO1
CString
m_outColor
afx_msgvoidonRadioBtnGroup1Clicked();
刷子颜色
下拉框控件
刷子颜色
IDC_COMBO2
CString
m_inColor
afx_msgvoidonRadioBtnGroup2Clicked();
线型
Radiobutton
实线
IDM_LINE_STYLE_SOLID
Int
m_penType
afx_msgvoidonRadioBtnGroup1Clicked();
Radiobutton
虚线
IDM_LINE_STYLE_DASH
Radiobutton
点线
IDM_LINE_STYLE_DOT
Radiobutton
点划线
IDM_LINE_STYLE_DASHDOT
填充类型
Radiobutton
实体刷子
PS_SOLID
Int
m_brushType
afx_msgvoidonRadioBtnGroup2Clicked();
Radiobutton
交叉线
HS_CROSS
Radiobutton
主对角线型
HS_FDIAGONAL
Radiobutton
附对角线型
HS_BDIAGONAL
程序运行效果:
(以黑色为背景)
绘制线:
绘制圆:
绘制矩形:
绘制圆角矩形
程序代码:
变量定义部分:
protected:
HICONm_hIcon;
CBrushm_brush;//用于自定义颜色
CDCm_memDC;//屏幕DC兼容的内存DC
CBitmapm_Bmp;//位图
CWnd*m_pDrawWnd;//用于保存静态文本框的对象指针
//初始化和双缓冲相关的数据
voidInitialDBB();
//双缓冲内存上绘图
voidDrawOnMem();
//在静态区域画图
voidDrawOnStaticArea();
//更改颜色的消息响应函数
afx_msgHBRUSHOnCtlColor(CDC*pDC,CWnd*pWnd,UINTnCtlColor);
//生成的消息映射函数
virtualBOOLOnInitDialog();
afx_msgvoidOnSysCommand(UINTnID,LPARAMlParam);
afx_msgvoidOnPaint();
afx_msgHCURSOROnQueryDragIcon();
DECLARE_MESSAGE_MAP()
public:
//控制笔颜色的下拉框列表变量
CComboBoxm_Combobox1;
//控制刷子颜色的下拉框列表变量
CComboBoxm_Combobox2;
//形状列表
CListBoxm_ShapeList;
//画笔类型,即轮廓(索引)
intm_penType;
//画刷类型,即填充颜色类型
intm_brushType;
afx_msgvoidOnBnClickedOk();
afx_msgvoidOnBnClickedCancel();
afx_msgvoidonRadioBtnGroup1Clicked();
afx_msgvoidonRadioBtnGroup2Clicked();
//绘制的图形类型
CStringm_DrawType;
afx_msgvoidOnSelchangeList1();
afx_msgvoidOnCbnSelchangeCombo1();
afx_msgvoidOnCbnSelchangeCombo2();
//bool变量,用于控制绘图按钮点击后绘图
boolisDraw;
//外轮廓颜色
CStringm_outColor;
//内填充颜色
CStringm_inColor;
COLORREFoutColor;
COLORREFinColor;
CPenmyPen;
CBrushmyBrush;
其他主要代码:
//双缓冲内存上绘图
voidCfiveDlg:
:
DrawOnMem()
{
CRectrect;
//画图部分--------------------------------------------------------------
if(isDraw==true)
{
CBrush*pOldBrush=m_memDC.SelectObject(&myBrush);
//设置绘制图形
CRectdrawRect;
drawRect.left=rect.left+30;
drawRect.right=rect.right-30;
drawRect.top=rect.top+30;
drawRect.bottom=rect.bottom-30;
if(m_DrawType=="Circle")
{
m_memDC.Ellipse(drawRect);//画椭圆
}
if(m_DrawType=="Rectangle")
{
m_memDC.Rectangle(drawRect);//画矩形
}
if(m_DrawType=="Line")//画线
{
m_memDC.MoveTo(rect.right-40,rect.bottom-40);
m_memDC.LineTo(rect.left+40,rect.top+40);
}
if(m_DrawType=="RoundRectangle")//画圆角矩形
{
CRectr;
r=CRect(CPoint(40,40),CSize(150,12));
m_memDC.RoundRect(drawRect,CPoint(50,50));//CPoint(50,50))表示圆角的幅度
}
m_memDC.SelectObject(pOldPen);
m_memDC.SelectObject(pOldBrush);
}
}
//在静态区域画图
voidCfiveDlg:
:
DrawOnStaticArea()
{
CWnd*pWnd=GetDlgItem(IDC_STATIC);//获得静态文本框的窗口对象
CRectrect;
pWnd->GetClientRect(&rect);
CDC*pDC=pWnd->GetDC();//
DrawOnMem();
//一次性的将内存设备环境上绘制完毕的图形"贴"到屏幕上
pDC->BitBlt(0,0,rect.Width(),rect.Height(),&m_memDC,0,0,SRCCOPY);
pWnd->ReleaseDC(pDC);//
}
//绘图按钮
voidCfiveDlg:
:
OnBnClickedOk()
{
//TODO:
在此添加控件通知处理程序代码
isDraw=true;//点击绘制按钮后,才绘制图形
OnSelchangeList1();
OnCbnSelchangeCombo1();
OnCbnSelchangeCombo2();
onRadioBtnGroup1Clicked();
onRadioBtnGroup2Clicked();
Invalidate();//重绘窗口
/*CDialogEx:
:
OnOK();*/
}
//取消按钮
voidCfiveDlg:
:
OnBnClickedCancel()
{
//TODO:
在此添加控件通知处理程序代码
isDraw=false;
CDialogEx:
:
OnCancel();
}
//radio画笔样式切换选择事件
voidCfiveDlg:
:
onRadioBtnGroup1Clicked()
{
//TODO:
在此添加控件通知处理程序代码
UpdateData(true);//更新界面值到变量中,必须有这句话,值才变化
switch(m_penType)
{
case0:
myPen.CreatePen(PS_SOLID,3,outColor);
break;
case1:
myPen.CreatePen(PS_DASH,3,outColor);
break;
case2:
myPen.CreatePen(PS_DOT,3,outColor);
break;
case3:
myPen.CreatePen(PS_DASHDOT,3,outColor);
break;
default:
break;
}
}
//radio刷子样式切换选择事件
voidCfiveDlg:
:
onRadioBtnGroup2Clicked()
{
//TODO:
在此添加控件通知处理程序代码
UpdateData(true);//更新界面值到变量中,必须有这句话,值才变化
switch(m_brushType)
{
case0:
myBrush.CreateSolidBrush(inColor);
break;
case1:
myBrush.CreateHatchBrush(HS_CROSS,inColor);
break;
case2:
myBrush.CreateHatchBrush(HS_FDIAGONAL,inColor);
break;
case3:
myBrush.CreateHatchBrush(HS_BDIAGONAL,inColor);
break;
}
}
//listBox切换选择事件
voidCfiveDlg:
:
OnSelchangeList1()
{
//TODO:
在此添加控件通知处理程序代码
CStringstrText;
intnCurSel;
nCurSel=m_ShapeList.GetCurSel();//获取当前选中列表项
m_ShapeList.GetText(nCurSel,strText);//获取选中列表项的字符串
m_DrawType=strText;//赋给变量
}
//combobox1画
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- VC 程序设计 试题 作业