可视化编程作业 SDI应用程序设计_第1页
可视化编程作业 SDI应用程序设计_第2页
可视化编程作业 SDI应用程序设计_第3页
可视化编程作业 SDI应用程序设计_第4页
可视化编程作业 SDI应用程序设计_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 可视化程序设计语言实验五SDI应用程序设计学 号: 12020229 姓 名: 何博 指导教师: 李家军 2015 年 5 月作业题目:实验五 SDI应用程序设计(1)任务描述: 编写一个SDI风格的MFC应用程序,要求主窗口菜单项中有一个菜单项“输入图形参数”,点击后会弹出一个对话框,其中有标签“输入圆的半径”,后面是一个编辑框控件,下一行是标签“圆心的横坐标:”,后面是一个编辑框,下一行是标签“圆心的纵坐标:”,后面是一个编辑框。下一行是两个按纽,“确认输入”,“放弃输入”,电击“确认按纽”后对话框关闭,在编辑框中输入的数据应该保存到文挡对象中有关的变量中,点击“放弃按纽”后对话框关闭,

2、在编辑框中输入的数据不保存到文档对象中,如果数据发生变化,在视中指定位置上为中心处,会显示出一个指定半径的圆,并在圆的正下方显示:“面积是: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(

3、50)/ TODO: 在此添加一次性构造代码BOOL CSDIbookDoc:OnNewDocument()if (!CDocument:OnNewDocument()/ TODO: 在此添加重新初始化代码/ (SDI 文档将重用该文档)m_X=200;m_Y=200;m_R=50;return TRUE;4、 通过对话框来改变CMY_SDIDoc的成员变量m_X,m_Y,m_R在资源视图中,编辑菜单栏,加入NEW菜单,并加入子菜单改变图形参数,并添加事件处理向导,消息类型选择COMMAND,类列表中选择CMY_SDIDoc,处理函数名OnChange。在CMY_SDIDoc,cpp中加入头文

4、件DlgInput.h。void CSDIbookDoc:OnChange()/ TODO: 在此添加命令处理程序代码DlgInput dlg;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成员函数中,添加如下代码void CSDIbookView:OnDraw(CDC* pDC)CSDIbookDoc* pDoc = GetDocument();ASSERT_VA

5、LID(pDoc);if (!pDoc)return;/ TODO: 在此处为本机数据添加绘制代码CRect rectClient;GetClientRect(rectClient);CSize sizeClient=rectClient.Size();int R=pDoc->m_R;int X=pDoc->m_X;int Y=pDoc->m_Y;HBRUSH hBrush;HPEN hPen;hPen=CreatePen(PS_SOLID,2,RGB(0,255,0); hBrush=CreateHatchBrush(HS_BDIAGONAL,RGB(255,0,0); /

6、画刷(CBrush*)pDC->SelectObject(hBrush);(CPen*)pDC->SelectObject(hPen);pDC->Ellipse(X-R,Y-R,X+R,Y+R);6、 文档串行化通过重载CMY_SDIDoc类的Serialize函数来完成串行化。代码如下void CSDIbookDoc:Serialize(CArchive& ar)if (ar.IsStoring()/ TODO: 在此添加存储代码ar<<m_R;ar<<m_X;ar<<m_Y;else/ TODO: 在此添加加载代码ar>&

7、gt;m_R;ar>>m_X;ar>>m_Y;程序结果:初始运行初始参数更改参数更改后结果实验程序/ DlgInput.cpp : 实现文件/#include "stdafx.h"#include "SDI book.h"#include "DlgInput.h"#include "afxdialogex.h"#include "DlgInput.h"/ DlgInput 对话框IMPLEMENT_DYNAMIC(DlgInput, CDialog)DlgInput:Dl

8、gInput(CWnd* pParent /*=NULL*/): CDialog(DlgInput:IDD, pParent), R(50), X(200), Y(200)DlgInput:DlgInput()void DlgInput: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

9、)ON_EN_CHANGE(IDC_EDIT1, &DlgInput:OnEnChangeEdit1)ON_BN_CLICKED(IDOK, &DlgInput:OnBnClickedOk)ON_BN_CLICKED(IDCANCEL, &DlgInput:OnBnClickedCancel)END_MESSAGE_MAP()/ DlgInput 消息处理程序void DlgInput:OnEnChangeEdit1()/ TODO: 如果该控件是 RICHEDIT 控件,它将不/ 发送此通知,除非重写 CDialog:OnInitDialog()/ 函数并调用 CRi

10、chEditCtrl().SetEventMask(),/ 同时将 ENM_CHANGE 标志“或”运算到掩码中。/ TODO: 在此添加控件通知处理程序代码void DlgInput:OnBnClickedOk()/ TODO: 在此添加控件通知处理程序代码CDialog:OnOK();void DlgInput:OnBnClickedCancel()/ TODO: 在此添加控件通知处理程序代码CDialog:OnCancel();/ SDI bookDoc.cpp : CSDIbookDoc 类的实现/#include "stdafx.h"/ SHARED_HANDLE

11、RS 可以在实现预览、缩略图和搜索筛选器句柄的/ ATL 项目中进行定义,并允许与该项目共享文档代码。#ifndef SHARED_HANDLERS#include "SDI book.h"#include "DlgInput.h"#endif#include "SDI bookDoc.h"#include <propkey.h>#ifdef _DEBUG#define new DEBUG_NEW#endif/ CSDIbookDocIMPLEMENT_DYNCREATE(CSDIbookDoc, CDocument)BE

12、GIN_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()BOOL CSDIbookDoc:OnNewDocument()if (!CDocument:OnNewDocument()return FALSE;/

13、 TODO: 在此添加重新初始化代码/ (SDI 文档将重用该文档)m_X=200;m_Y=200;m_R=50;return TRUE;/ CSDIbookDoc 序列化void CSDIbookDoc:Serialize(CArchive& ar)if (ar.IsStoring()/ TODO: 在此添加存储代码ar<<m_R;ar<<m_X;ar<<m_Y;else/ TODO: 在此添加加载代码ar>>m_R;ar>>m_X;ar>>m_Y;#ifdef SHARED_HANDLERS/ 缩略图的支持vo

14、id CSDIbookDoc:OnDrawThumbnail(CDC& dc, LPRECT lprcBounds)/ 修改此代码以绘制文档数据dc.FillSolidRect(lprcBounds, RGB(255, 255, 255);CString strText = _T("TODO: implement thumbnail drawing here");LOGFONT lf;CFont* pDefaultGUIFont = CFont:FromHandle(HFONT) GetStockObject(DEFAULT_GUI_FONT);pDefaultGU

15、IFont->GetLogFont(&lf);lf.lfHeight = 36;CFont fontDraw;fontDraw.CreateFontIndirect(&lf);CFont* pOldFont = dc.SelectObject(&fontDraw);dc.DrawText(strText, lprcBounds, DT_CENTER | DT_WORDBREAK);dc.SelectObject(pOldFont);/ 搜索处理程序的支持void CSDIbookDoc:InitializeSearchContent()CString strSea

16、rchContent;/ 从文档数据设置搜索内容。/ 内容部分应由“;”分隔/ 例如: strSearchContent = _T("point;rectangle;circle;ole object;");SetSearchContent(strSearchContent);void CSDIbookDoc:SetSearchContent(const CString& value)if (value.IsEmpty()RemoveChunk(PKEY_Search_Contents.fmtid, PKEY_Search_Contents.pid);elseCMF

17、CFilterChunkValueImpl *pChunk = NULL;ATLTRY(pChunk = new CMFCFilterChunkValueImpl);if (pChunk != NULL)pChunk->SetTextValue(PKEY_Search_Contents, value, CHUNK_TEXT);SetChunkValue(pChunk);#endif / SHARED_HANDLERS/ CSDIbookDoc 诊断#ifdef _DEBUGvoid CSDIbookDoc:AssertValid() constCDocument:AssertValid(

18、);void CSDIbookDoc:Dump(CDumpContext& dc) constCDocument:Dump(dc);#endif /_DEBUG/ CSDIbookDoc 命令void CSDIbookDoc:OnChange()/ TODO: 在此添加命令处理程序代码DlgInput dlg;if(dlg.DoModal()=IDOK)m_R=dlg.R;m_X=dlg.X;m_Y=dlg.Y;UpdateAllViews(NULL);/ SDI bookView.cpp : CSDIbookView 类的实现/#include "stdafx.h"

19、;/ SHARED_HANDLERS 可以在实现预览、缩略图和搜索筛选器句柄的/ ATL 项目中进行定义,并允许与该项目共享文档代码。#ifndef SHARED_HANDLERS#include "SDI book.h"#endif#include "SDI bookDoc.h"#include "SDI bookView.h"#ifdef _DEBUG#define new DEBUG_NEW#endif/ CSDIbookViewIMPLEMENT_DYNCREATE(CSDIbookView, CView)BEGIN_MESS

20、AGE_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:CS

21、DIbookView()/ TODO: 在此处添加构造代码CSDIbookView:CSDIbookView()BOOL CSDIbookView:PreCreateWindow(CREATESTRUCT& cs)/ TODO: 在此处通过修改/ CREATESTRUCT cs 来修改窗口类或样式return CView:PreCreateWindow(cs);/ CSDIbookView 绘制void CSDIbookView:OnDraw(CDC* pDC)CSDIbookDoc* pDoc = GetDocument();ASSERT_VALID(pDoc);if (!pDoc)

22、return;/ TODO: 在此处为本机数据添加绘制代码CRect rectClient;GetClientRect(rectClient);CSize sizeClient=rectClient.Size();int R=pDoc->m_R;int X=pDoc->m_X;int Y=pDoc->m_Y;HBRUSH hBrush;HPEN hPen;hPen=CreatePen(PS_SOLID,2,RGB(0,255,0); hBrush=CreateHatchBrush(HS_BDIAGONAL,RGB(255,0,0); /画刷(CBrush*)pDC->S

23、electObject(hBrush);(CPen*)pDC->SelectObject(hPen);pDC->Ellipse(X-R,Y-R,X+R,Y+R);/ CSDIbookView 打印void CSDIbookView:OnFilePrintPreview()#ifndef SHARED_HANDLERSAFXPrintPreview(this);#endifBOOL CSDIbookView:OnPreparePrinting(CPrintInfo* pInfo)/ 默认准备return DoPreparePrinting(pInfo);void CSDIbookVi

24、ew:OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)/ TODO: 添加额外的打印前进行的初始化过程void CSDIbookView:OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)/ TODO: 添加打印后进行的清理过程void CSDIbookView:OnRButtonUp(UINT /* nFlags */, CPoint point)ClientToScreen(&point);OnContextMenu(this, point);void CSDIbookView

25、:OnContextMenu(CWnd* /* pWnd */, CPoint point)#ifndef SHARED_HANDLERStheApp.GetContextMenuManager()->ShowPopupMenu(IDR_POPUP_EDIT, point.x, point.y, this, TRUE);#endif/ CSDIbookView 诊断#ifdef _DEBUGvoid CSDIbookView:AssertValid() constCView:AssertValid();void CSDIbookView:Dump(CDumpContext& dc

26、) constCView:Dump(dc);CSDIbookDoc* CSDIbookView:GetDocument() const / 非调试版本是内联的ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CSDIbookDoc);return (CSDIbookDoc*)m_pDocument;#endif /_DEBUG/ CSDIbookView 消息处理程序实验六综合设计作业任务描述编写一个电话号码管理系统,要求:(1) 将联系人姓名及电话号码存放到数据库的表格内;(2) 可以实现:输入联系人姓名,查询得到电话号码的功能;添加一条联系人姓名及

27、电话号码记录的功能;删除当前联系人姓名及电话号码记录的功能;(3) 利用MFC的数据库编程、SDI编程、对话框与控件的相关知识完成设计。1、 设计步骤(1) 构造数据库用Microsoft Access创建一个数据库,其中包含一个数据表用来存放联系人的姓名及电话号码。记录及字段名如下:(2) 创建ODBC数据源选择Microsoft Access Driver (*.mdb)驱动程序,安装数据源如下:(3) 在MFC AppWizard中选择数据源用MFC AppWizard创建一个单文档应用程序;向导提示“您要包含数据库吗?”时,选择“查看数据库使用文件支持”,这时,创建的文档类将全面支持文档操作和数据库操作;点击“数据源”按钮,选

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论