可视化编程作业 SDI应用程序设计.docx

上传人:b****5 文档编号:7469681 上传时间:2023-05-11 格式:DOCX 页数:27 大小:818.33KB
下载 相关 举报
可视化编程作业 SDI应用程序设计.docx_第1页
第1页 / 共27页
可视化编程作业 SDI应用程序设计.docx_第2页
第2页 / 共27页
可视化编程作业 SDI应用程序设计.docx_第3页
第3页 / 共27页
可视化编程作业 SDI应用程序设计.docx_第4页
第4页 / 共27页
可视化编程作业 SDI应用程序设计.docx_第5页
第5页 / 共27页
可视化编程作业 SDI应用程序设计.docx_第6页
第6页 / 共27页
可视化编程作业 SDI应用程序设计.docx_第7页
第7页 / 共27页
可视化编程作业 SDI应用程序设计.docx_第8页
第8页 / 共27页
可视化编程作业 SDI应用程序设计.docx_第9页
第9页 / 共27页
可视化编程作业 SDI应用程序设计.docx_第10页
第10页 / 共27页
可视化编程作业 SDI应用程序设计.docx_第11页
第11页 / 共27页
可视化编程作业 SDI应用程序设计.docx_第12页
第12页 / 共27页
可视化编程作业 SDI应用程序设计.docx_第13页
第13页 / 共27页
可视化编程作业 SDI应用程序设计.docx_第14页
第14页 / 共27页
可视化编程作业 SDI应用程序设计.docx_第15页
第15页 / 共27页
可视化编程作业 SDI应用程序设计.docx_第16页
第16页 / 共27页
可视化编程作业 SDI应用程序设计.docx_第17页
第17页 / 共27页
可视化编程作业 SDI应用程序设计.docx_第18页
第18页 / 共27页
可视化编程作业 SDI应用程序设计.docx_第19页
第19页 / 共27页
可视化编程作业 SDI应用程序设计.docx_第20页
第20页 / 共27页
亲,该文档总共27页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

可视化编程作业 SDI应用程序设计.docx

《可视化编程作业 SDI应用程序设计.docx》由会员分享,可在线阅读,更多相关《可视化编程作业 SDI应用程序设计.docx(27页珍藏版)》请在冰点文库上搜索。

可视化编程作业 SDI应用程序设计.docx

可视化编程作业SDI应用程序设计

 

 

可视化程序设计语言

实验五SDI应用程序设计

 

学号:

12020229

姓名:

何博

指导教师:

李家军

 

2015年5月

 

作业题目:

实验五SDI应用程序设计

 

(1)任务描述:

编写一个SDI风格的MFC应用程序,要求主窗口菜单项中有一个菜单项“输入图形参数”,点击后会弹出一个对话框,其中有标签“输入圆的半径”,后面是一个编辑框控件,下一行是标签“圆心的横坐标:

”,后面是一个编辑框,下一行是标签“圆心的纵坐标:

”,后面是一个编辑框。

下一行是两个按纽,“确认输入”,“放弃输入”,电击“确认按纽”后对话框关闭,在编辑框中输入的数据应该保存到文挡对象中有关的变量中,点击“放弃按纽”后对话框关闭,在编辑框中输入的数据不保存到文档对象中,如果数据发生变化,在视中指定位置上为中心处,会显示出一个指定半径的圆,并在圆的正下方显示:

“面积是:

xxxx”的字符串。

你可以在主菜单中增加选择画笔、画刷样式的菜单项,并实现相应的功能。

但基本功能应保证完成。

 

实验步骤:

1、创建工程文件,在资源视图中,添加对话框资源。

为对话框添加类,类名DlgInput,基类CDialog。

向对话框中加入3个编辑窗控件,并分别添加变量X,Y,R。

2、为CMY_SDI类添加成员变量m_X,m_Y,m_R。

3、文档变量初始化

CMY_SDIDoc:

:

CMY_SDIDoc()

:

m_X(200)

m_Y(200)

m_R(50)

{

//TODO:

在此添加一次性构造代码

}

BOOLCSDIbookDoc:

:

OnNewDocument()

{

if(!

CDocument:

:

OnNewDocument())

//TODO:

在此添加重新初始化代码

//(SDI文档将重用该文档)

m_X=200;

m_Y=200;

m_R=50;

returnTRUE;

}

4、通过对话框来改变CMY_SDIDoc的成员变量m_X,m_Y,m_R

在资源视图中,编辑菜单栏,加入NEW菜单,并加入子菜单改变图形参数,并添加事件处理向导,消息类型选择COMMAND,类列表中选择CMY_SDIDoc,处理函数名OnChange。

在CMY_SDIDoc,cpp中加入头文件DlgInput.h。

voidCSDIbookDoc:

:

OnChange()

{

//TODO:

在此添加命令处理程序代码

DlgInputdlg;

if(dlg.DoModal()==IDOK)//调用DoModal()函数显示该模式对话框

{

m_R=dlg.R;

m_X=dlg.X;

m_Y=dlg.Y;

UpdateAllViews(NULL);//刷新视图

}

}

5、视图的输出在MY_SDI程序视图类CMY_SDIView类的OnDraw成员函数中,添加如下代码

voidCSDIbookView:

:

OnDraw(CDC*pDC)

{

CSDIbookDoc*pDoc=GetDocument();

ASSERT_VALID(pDoc);

if(!

pDoc)

return;

//TODO:

在此处为本机数据添加绘制代码

CRectrectClient;

GetClientRect(rectClient);

CSizesizeClient=rectClient.Size();

intR=pDoc->m_R;

intX=pDoc->m_X;

intY=pDoc->m_Y;

HBRUSHhBrush;

HPENhPen;

hPen=CreatePen(PS_SOLID,2,RGB(0,255,0));

hBrush=CreateHatchBrush(HS_BDIAGONAL,RGB(255,0,0));//画刷

(CBrush*)pDC->SelectObject(hBrush);

(CPen*)pDC->SelectObject(hPen);

pDC->Ellipse(X-R,Y-R,X+R,Y+R);

}

 

6、文档串行化

通过重载CMY_SDIDoc类的Serialize函数来完成串行化。

代码如下

voidCSDIbookDoc:

:

Serialize(CArchive&ar)

{

if(ar.IsStoring())

{

//TODO:

在此添加存储代码

ar<

ar<

ar<

}

else

{

//TODO:

在此添加加载代码

ar>>m_R;

ar>>m_X;

ar>>m_Y;

}

}

}

 

程序结果:

初始运行

初始参数

 

更改参数

更改后结果

 

实验程序

//DlgInput.cpp:

实现文件

//

#include"stdafx.h"

#include"SDIbook.h"

#include"DlgInput.h"

#include"afxdialogex.h"

#include"DlgInput.h"

 

//DlgInput对话框

IMPLEMENT_DYNAMIC(DlgInput,CDialog)

DlgInput:

:

DlgInput(CWnd*pParent/*=NULL*/)

:

CDialog(DlgInput:

:

IDD,pParent)

R(50)

X(200)

Y(200)

{

}

DlgInput:

:

~DlgInput()

{

}

voidDlgInput:

:

DoDataExchange(CDataExchange*pDX)

{

CDialog:

:

DoDataExchange(pDX);

DDX_Text(pDX,IDC_EDIT1,R);

DDX_Text(pDX,IDC_EDIT2,X);

DDX_Text(pDX,IDC_EDIT3,Y);

}

 

BEGIN_MESSAGE_MAP(DlgInput,CDialog)

ON_EN_CHANGE(IDC_EDIT1,&DlgInput:

:

OnEnChangeEdit1)

ON_BN_CLICKED(IDOK,&DlgInput:

:

OnBnClickedOk)

ON_BN_CLICKED(IDCANCEL,&DlgInput:

:

OnBnClickedCancel)

END_MESSAGE_MAP()

 

//DlgInput消息处理程序

 

voidDlgInput:

:

OnEnChangeEdit1()

{

//TODO:

如果该控件是RICHEDIT控件,它将不

//发送此通知,除非重写CDialog:

:

OnInitDialog()

//函数并调用CRichEditCtrl().SetEventMask(),

//同时将ENM_CHANGE标志“或”运算到掩码中。

//TODO:

在此添加控件通知处理程序代码

}

 

voidDlgInput:

:

OnBnClickedOk()

{

//TODO:

在此添加控件通知处理程序代码

CDialog:

:

OnOK();

}

 

voidDlgInput:

:

OnBnClickedCancel()

{

//TODO:

在此添加控件通知处理程序代码

CDialog:

:

OnCancel();

}

 

//SDIbookDoc.cpp:

CSDIbookDoc类的实现

//

#include"stdafx.h"

//SHARED_HANDLERS可以在实现预览、缩略图和搜索筛选器句柄的

//ATL项目中进行定义,并允许与该项目共享文档代码。

#ifndefSHARED_HANDLERS

#include"SDIbook.h"

#include"DlgInput.h"

#endif

#include"SDIbookDoc.h"

#include

#ifdef_DEBUG

#definenewDEBUG_NEW

#endif

//CSDIbookDoc

IMPLEMENT_DYNCREATE(CSDIbookDoc,CDocument)

BEGIN_MESSAGE_MAP(CSDIbookDoc,CDocument)

ON_COMMAND(ID_NEW_32771,&CSDIbookDoc:

:

OnChange)

END_MESSAGE_MAP()

 

//CSDIbookDoc构造/析构

CSDIbookDoc:

:

CSDIbookDoc()

:

m_X(200)

m_Y(200)

m_R(50)

{

//TODO:

在此添加一次性构造代码

}

CSDIbookDoc:

:

~CSDIbookDoc()

{

}

BOOLCSDIbookDoc:

:

OnNewDocument()

{

if(!

CDocument:

:

OnNewDocument())

returnFALSE;

//TODO:

在此添加重新初始化代码

//(SDI文档将重用该文档)

m_X=200;

m_Y=200;

m_R=50;

returnTRUE;

}

 

//CSDIbookDoc序列化

voidCSDIbookDoc:

:

Serialize(CArchive&ar)

{

if(ar.IsStoring())

{

//TODO:

在此添加存储代码

ar<

ar<

ar<

}

else

{

//TODO:

在此添加加载代码

ar>>m_R;

ar>>m_X;

ar>>m_Y;

}

}

#ifdefSHARED_HANDLERS

//缩略图的支持

voidCSDIbookDoc:

:

OnDrawThumbnail(CDC&dc,LPRECTlprcBounds)

{

//修改此代码以绘制文档数据

dc.FillSolidRect(lprcBounds,RGB(255,255,255));

CStringstrText=_T("TODO:

implementthumbnaildrawinghere");

LOGFONTlf;

CFont*pDefaultGUIFont=CFont:

:

FromHandle((HFONT)GetStockObject(DEFAULT_GUI_FONT));

pDefaultGUIFont->GetLogFont(&lf);

lf.lfHeight=36;

CFontfontDraw;

fontDraw.CreateFontIndirect(&lf);

CFont*pOldFont=dc.SelectObject(&fontDraw);

dc.DrawText(strText,lprcBounds,DT_CENTER|DT_WORDBREAK);

dc.SelectObject(pOldFont);

}

//搜索处理程序的支持

voidCSDIbookDoc:

:

InitializeSearchContent()

{

CStringstrSearchContent;

//从文档数据设置搜索内容。

//内容部分应由“;”分隔

//例如:

strSearchContent=_T("point;rectangle;circle;oleobject;");

SetSearchContent(strSearchContent);

}

voidCSDIbookDoc:

:

SetSearchContent(constCString&value)

{

if(value.IsEmpty())

{

RemoveChunk(PKEY_Search_Contents.fmtid,PKEY_Search_Contents.pid);

}

else

{

CMFCFilterChunkValueImpl*pChunk=NULL;

ATLTRY(pChunk=newCMFCFilterChunkValueImpl);

if(pChunk!

=NULL)

{

pChunk->SetTextValue(PKEY_Search_Contents,value,CHUNK_TEXT);

SetChunkValue(pChunk);

}

}

}

#endif//SHARED_HANDLERS

//CSDIbookDoc诊断

#ifdef_DEBUG

voidCSDIbookDoc:

:

AssertValid()const

{

CDocument:

:

AssertValid();

}

voidCSDIbookDoc:

:

Dump(CDumpContext&dc)const

{

CDocument:

:

Dump(dc);

}

#endif//_DEBUG

 

//CSDIbookDoc命令

 

voidCSDIbookDoc:

:

OnChange()

{

//TODO:

在此添加命令处理程序代码

DlgInputdlg;

if(dlg.DoModal()==IDOK)

{

m_R=dlg.R;

m_X=dlg.X;

m_Y=dlg.Y;

UpdateAllViews(NULL);

}

}

 

//SDIbookView.cpp:

CSDIbookView类的实现

//

#include"stdafx.h"

//SHARED_HANDLERS可以在实现预览、缩略图和搜索筛选器句柄的

//ATL项目中进行定义,并允许与该项目共享文档代码。

#ifndefSHARED_HANDLERS

#include"SDIbook.h"

#endif

#include"SDIbookDoc.h"

#include"SDIbookView.h"

#ifdef_DEBUG

#definenewDEBUG_NEW

#endif

 

//CSDIbookView

IMPLEMENT_DYNCREATE(CSDIbookView,CView)

BEGIN_MESSAGE_MAP(CSDIbookView,CView)

//标准打印命令

ON_COMMAND(ID_FILE_PRINT,&CView:

:

OnFilePrint)

ON_COMMAND(ID_FILE_PRINT_DIRECT,&CView:

:

OnFilePrint)

ON_COMMAND(ID_FILE_PRINT_PREVIEW,&CSDIbookView:

:

OnFilePrintPreview)

ON_WM_CONTEXTMENU()

ON_WM_RBUTTONUP()

END_MESSAGE_MAP()

//CSDIbookView构造/析构

CSDIbookView:

:

CSDIbookView()

{

//TODO:

在此处添加构造代码

}

CSDIbookView:

:

~CSDIbookView()

{

}

BOOLCSDIbookView:

:

PreCreateWindow(CREATESTRUCT&cs)

{

//TODO:

在此处通过修改

//CREATESTRUCTcs来修改窗口类或样式

returnCView:

:

PreCreateWindow(cs);

}

//CSDIbookView绘制

voidCSDIbookView:

:

OnDraw(CDC*pDC)

{

CSDIbookDoc*pDoc=GetDocument();

ASSERT_VALID(pDoc);

if(!

pDoc)

return;

//TODO:

在此处为本机数据添加绘制代码

CRectrectClient;

GetClientRect(rectClient);

CSizesizeClient=rectClient.Size();

intR=pDoc->m_R;

intX=pDoc->m_X;

intY=pDoc->m_Y;

HBRUSHhBrush;

HPENhPen;

hPen=CreatePen(PS_SOLID,2,RGB(0,255,0));

hBrush=CreateHatchBrush(HS_BDIAGONAL,RGB(255,0,0));//画刷

(CBrush*)pDC->SelectObject(hBrush);

(CPen*)pDC->SelectObject(hPen);

pDC->Ellipse(X-R,Y-R,X+R,Y+R);

}

 

//CSDIbookView打印

 

voidCSDIbookView:

:

OnFilePrintPreview()

{

#ifndefSHARED_HANDLERS

AFXPrintPreview(this);

#endif

}

BOOLCSDIbookView:

:

OnPreparePrinting(CPrintInfo*pInfo)

{

//默认准备

returnDoPreparePrinting(pInfo);

}

voidCSDIbookView:

:

OnBeginPrinting(CDC*/*pDC*/,CPrintInfo*/*pInfo*/)

{

//TODO:

添加额外的打印前进行的初始化过程

}

voidCSDIbookView:

:

OnEndPrinting(CDC*/*pDC*/,CPrintInfo*/*pInfo*/)

{

//TODO:

添加打印后进行的清理过程

}

voidCSDIbookView:

:

OnRButtonUp(UINT/*nFlags*/,CPointpoint)

{

ClientToScreen(&point);

OnContextMenu(this,point);

}

voidCSDIbookView:

:

OnContextMenu(CWnd*/*pWnd*/,CPointpoint)

{

#ifndefSHARED_HANDLERS

theApp.GetContextMenuManager()->ShowPopupMenu(IDR_POPUP_EDIT,point.x,point.y,this,TRUE);

#endif

}

 

//CSDIbookView诊断

#ifdef_DEBUG

voidCSDIbookView:

:

AssertValid()const

{

CView:

:

AssertValid();

}

voidCSDIbookView:

:

Dump(CDumpContext&dc)const

{

CView:

:

Dump(dc);

}

CSDIbookDoc*CSDIbookView:

:

GetDocument()const//非调试版本是内联的

{

ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CSDIbookDoc)));

return(CSDIbookDoc*)m_pDocument;

}

#endif//_DEBUG

 

//CSDIbookView消息处理程序

实验六

综合设计作业任务描述

编写一个电话号码管理系统,要求:

(1)将联系人姓名及电话号码存放到数据库的表格内;

(2)可以实现:

输入联系人姓名,查询得到电话号码的功能;

添加一条联系人姓名及电话号码记录的功能;

删除当前联系人姓名及电话号码记录的功能;

(3)利用MFC的数据库编程、SDI编程、对话框与控件的相关知识完成设计。

1、设计步骤

(1)构造数据库

用MicrosoftAccess创建一个数据库,其中包含一个数据表用来存放联系人的姓名及电话号码。

记录及字段名如下:

(2)创建ODBC数据源

选择MicrosoftAccessDriver(*.mdb)驱动程序,安装数据源如下:

(3)在MFCAppWizard中选择数据源

用MFCAppWizard创建一个单文档应用程序;

向导提示“您要包含数据库吗?

”时,选择“查看数据库使用文件支持”,这时,创建的文档类将全面支持文档操作和数据库操作;

点击“数据源”按钮,选择ODBC数据源tel,再将要使用的表tel选中。

(4)编辑实现各项功能

浏览:

为表单资源模板添加控件如下:

为“姓名:

”、“电话号码:

”静态文本后的编辑框添加变量,这时选择系统自定义的变量m_pSet->m_friendname、m_pSet->m_friendtel,其与数据库的字段关联。

编译运行即可逐条浏览数据库内记录,这是MFCAppWizard创建的功能,并不是我们增加消息,添加消息代码实现的功能。

查询:

为“请输入姓名:

”静态文本后的编辑框添加变量m_strQuery,如下:

为“查询”按钮添加“单击”消息映射,如下:

在“查询”消息映射函数中添加处理函数,如下:

编译运行即可实现输入联系人姓名,查询得到电话号码的功能,显示在“您所查询的记录:

”区域。

增加与删除记录:

所设计功能为:

当按下“添加一条新记录”按钮时,弹出一个对话框,对话框中有编辑框和“确定”按钮;可在编辑框输入联系人姓名及电话号码,按“确定”按钮后,添加一条新记录;

当按下“删除当前记录”按钮时,删除“您所查询的记录:

”区的记录。

添加一个对话框,将表单资源模板“您所查询的记录:

”区的所有控件复制到对话框中,如下:

为对话框创建一个类,为对话框中编辑框添加变量,为对话框中“确定”按钮添加“单击”消息映射:

在“确定”消息映射函数中添加处理函数,如下:

为表单资源模板中“添加一条新记录”按钮、“删除当前记录”按钮添加“单击”消息映射,并添加相应的处理函数,如下:

还需在视文件中包含对话框类的头文件,如下:

编译运行程序,即可完成任务描述中的功能。

2、程序运行结果

初始的数据库录入:

输入联系人姓名,查询得到电话号码:

 

添加一条联系人记录,并查找该联系人:

 

删除一个联系人,再查找改

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

当前位置:首页 > 成人教育 > 成考

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2