VC++程序设计试题作业.docx

上传人:b****5 文档编号:24684241 上传时间:2023-05-31 格式:DOCX 页数:47 大小:307.94KB
下载 相关 举报
VC++程序设计试题作业.docx_第1页
第1页 / 共47页
VC++程序设计试题作业.docx_第2页
第2页 / 共47页
VC++程序设计试题作业.docx_第3页
第3页 / 共47页
VC++程序设计试题作业.docx_第4页
第4页 / 共47页
VC++程序设计试题作业.docx_第5页
第5页 / 共47页
点击查看更多>>
下载资源
资源描述

VC++程序设计试题作业.docx

《VC++程序设计试题作业.docx》由会员分享,可在线阅读,更多相关《VC++程序设计试题作业.docx(47页珍藏版)》请在冰豆网上搜索。

VC++程序设计试题作业.docx

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画

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

当前位置:首页 > 农林牧渔 > 林学

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

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