ImageVerifierCode 换一换
格式:DOC , 页数:19 ,大小:513.53KB ,
资源ID:8878830      下载积分:10 金币
快捷注册下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

开通VIP
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.zixin.com.cn/docdown/8878830.html】到电脑端继续下载(重复下载【60天内】不扣币)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

开通VIP折扣优惠下载文档

            查看会员权益                  [ 下载后找不到文档?]

填表反馈(24小时):  下载求助     关注领币    退款申请

开具发票请登录PC端进行申请

   平台协调中心        【在线客服】        免费申请共赢上传

权利声明

1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:0574-28810668;投诉电话:18658249818。

注意事项

本文(MFC单文档应用程序练习ok.doc)为本站上传会员【仙人****88】主动上传,咨信网仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知咨信网(发送邮件至1219186828@qq.com、拔打电话4009-655-100或【 微信客服】、【 QQ客服】),核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载【60天内】不扣币。 服务填表

MFC单文档应用程序练习ok.doc

1、MFC单文档应用程序 1. 一个简单的单文档应用程序 文件->新建项目->MFC应用程序 ,出现窗口按“下一步”,出现下面窗口 选择单文档 点 "调试—>运行",最后运行界面为下图: 一个简单的单文档应用程序向导自动建立五个类: 向导自动建立的类 相应源文件 其他源文件 相应头文件 其他头文件 CAboutDlg StdAfx.cpp StdAfx.h CXxxApp Xxx.cpp Xxx.rc Xxx.h Resource.h CXxxView XxxView.cpp XxxView.h CXxxDoc

2、 XxxDoc.cpp XxxDoc.h CMainFrame MainFrame.cpp MainFrame.h 视(View) 显示用户程序的数据及处理用户与文档的交互 文档对象 永久存储 (磁盘文件) MainFrame 框架窗口 文档—视结构 每个类的主要函数: void CAboutDlg::DoDataExchange(CDataExchange* pDX) int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateSt

3、ruct)//创建窗体的工具栏,状态栏等 BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs) BOOL CXxxApp::InitInstance() void CXxxApp::OnAppAbout() BOOL CXxxDoc::OnNewDocument()//初始化文档字符数据、字体信息等 void CXxxDoc::Serialize(CArchive& ar) BOOL CXxxView::PreCreateWindow(CREATESTRUCT& cs) void CXxxView:

4、OnDraw(CDC* pDC) BOOL CXxxView::OnPreparePrinting(CPrintInfo* pInfo)//弹出打印对话框 void CXxxView::OnBeginPrinting(CDC* pDC, CPrintInfo* pInfo) void CXxxView::OnEndPrinting(CDC* pDC, CPrintInfo* pInfo) CXxxDoc* CXxxView::GetDocument() // non-debug version is inline 创建单文档应用程序的一般步骤: l

5、利用AppWizard创建应用程序框架 l 在文档内中声明保存文档数据所需要数据对象 l 完成文档类的OnNewDocument函数,初始化新文档 l 完成文档类的Serialize函数,保持和加载文档数据 l 完成视类的OnInitialUpdate函数,初始化显示 l 完成视类的OnDraw函数,显示当前文档内容 l 在视类中加入可以使用户编辑文档数据所需的代码 2.简单文本和图形输出 建立一个简单的单文档应用程序SimpleTextPicture,通过修改OnDraw函数在视(View)中输出信息或画图。 找到函数OnDraw(CDC* /*pDC*/),改为OnD

6、raw(CDC* pDC); OnDraw函数在SimpleTextPicture.cpp文件中,专门用于输出信息或画图。负责视图显示功能(包括打印、显示、预览等) 例2.1 显示正方形和文本 void CSimpleTextPictureView::OnDraw(CDC* pDC) { CSimpleTextPictureDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); // TODO: add draw code for native data here pDC->TextOut(10,120,_T("Hello Worl

7、d!")); pDC->Rectangle(20,20,100,100); } 在AppWizard生成的OnDraw函数中加入以黑体字给出的两行代码,运行程序,显示如下: 例2.2显示彩色图形和文本 void CSimpleTextPictureView::OnDraw(CDC* pDC) { CSimpleTextPictureDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); // TODO: add draw code for native data here CPen pen; CBrush br

8、ush; pen.CreatePen(PS_SOLID, 3, RGB(250,0,0)); brush.CreateSolidBrush(RGB(0,250,0)); pDC->SelectObject(pen); pDC->SelectObject(brush); pDC->Ellipse(100,200,300,300); DeleteObject(pen); DeleteObject(brush); CString str(_T("Hello World!")); //用UNICODE编码 pDC->SetTextColor(RGB(0,0,250))

9、 pDC->TextOut(120,150,str); pDC->SetTextColor(RGB(125,125,125)); double a[]={31.4,888.54}; char ch[10]; CString str1; str1.Format(_T("%f"),a[0]); pDC->TextOut(20,40,str1); str1.Format(_T("%f"),a[1]); pDC->TextOut(20,60,str1); } 3.滚动字幕 创建一个简单的单文档应用程序Xxx2; [1] 在Xxx2View.h中

10、添加代码如下: public: virtual ~CXxx2View(); #ifdef _DEBUG virtual void AssertValid() const; virtual void Dump(CDumpContext& dc) const; #endif protected: private: int n;//定义变量 [2] 在CXxx2View构造函数中初始化变量n CXxx2View::CXxx2View() { // TODO: add construction code here n=0; } [3] 在Xxx2View.c

11、pp文件中修改OnDraw函数: void CXxx2View::OnDraw(CDC* pDC) { CXxx2Doc* pDoc = GetDocument(); ASSERT_VALID(pDoc); if (!pDoc) return; pDC->SetTextColor(RGB(0,0,235)); pDC->SetBkMode(TRANSPARENT); CFont font; font.CreateFont(28,15,0,0,FW_NORMAL,false,false,false,DEFAULT_CHARSET,OUT_DEVI

12、CE_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,DEFAULT_PITCH,_T("隶书")); pDC->SelectObject(&font); pDC->TextOut(n,100,_T("世上无难事,只要肯登攀!")); n=n+20; RECT r; GetClientRect(&r); //获得窗口 if(n>r.right-r.left)//窗口如果n> 右坐标减去左坐标 n=0; } [4]添加三条消息映射,并加入相应代码。 通过菜单命令:视图/类视图,找到CXxx2View类,在CXxx2V

13、iew类上点击“右键->属性”,找到消息按扭,如下图: 点击 void CXxx2View::OnLButtonDblClk(UINT nFlags, CPoint point) { //鼠标左双击函数 // TODO: Add your message handler code here and/or call default SetTimer(1,500,NULL); CView::OnLButtonDblClk(nFlags, point);

14、 } void CXxx2View::OnRButtonDblClk(UINT nFlags, CPoint point) { //鼠标右双击函数 // TODO: Add your message handler code here and/or call default KillTimer(1); CView::OnRButtonDblClk(nFlags, point); } void CXxx2View::OnTimer(UINT nIDEvent) { // TODO: Add your message handler code here and/o

15、r call default Invalidate(); //擦除背景,重新绘制 CView::OnTimer(nIDEvent); } [5]添加菜单控制与代理 点击视图->资源视图,如下图,双击IDR_MAINFRAME,进入菜单编辑。 在资源Menu中添加运行子菜单:启动(IDC_MOVE)和停止(IDC_STOP)及其消息映射(右键->添加事件处理程序)。 改为OnMove 下为“启动”对应的消息映射: 改为OnMove 并修改代码: void CXxx2View::OnMove() //启动对应消息 { // TOD

16、O: Add your command handler code here SetTimer(1,300,NULL); } void CXxx2View::OnStop() //停止对应的消息 { // TODO: Add your command handler code here KillTimer(1); } 4.使用计算数据画直方图 1. 使用AppWixard生成单文档工程Plot 2. 在PlotDoc.h中类 CPlotDoc的定义之前加入类Max的定义: class Max { double x1,x2,x3,x4; double Max

17、2(double,double); public: Max(double,double,double,double); double Max4(); }; 3. 在PlotDoc.cpp的文件尾部加入类Max的实现部分: // CPlotDoc commands double Max::Max2(double a, double b) { if(a>=b) return a; else return b; } Max::Max(double a, double b, double c, double d) { x1=a;x2=b;x3=c;x4=d; }

18、 double Max::Max4() { return Max2(Max2(x1,x2),Max2(x3,x4)); } 4. 为CPlotDoc类增加一个公有的void类型的成员函数Find和一个公有int数据成员数组m_num[5],使用类产生对象并计算它们的最大值,将它们转换成int,存入整数数组m_num。 void CPlotDoc::Find() { Max a(110.5, 120.8, 110, 68); Max b(130, 256.5, 90, 200); Max c(125, 406.8, 350, 330); Max d(120, 35

19、6.8, 300, 280.5); Max e(102, 256.8, 120, 105); m_num[0] = (int) a. Max4(); m_num[1] = (int) b. Max4(); m_num[2] = (int) c. Max4(); m_num[3] = (int) d. Max4(); m_num[4] = (int) e. Max4(); } 5. 为CPlotDoc类的成员函数OnNewDocument增加调用语句准备数据。 BOOL CPlotDoc::OnNewDocument() { if (!CDocument::O

20、nNewDocument()) return FALSE; // TODO: add reinitialization code here // (SDI documents will reuse this document) Find(); //增加的语句 return TRUE; } 6. 在视类中画图写字 void CPlotView::OnDraw(CDC* pDC) { CPlotDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); // TODO: add draw code for nativ

21、e data here pDC->SetMapMode(MM_ISOTROPIC); pDC->SetViewportOrg(50,250); pDC->MoveTo(0,0); pDC->LineTo(1100,0); pDC->MoveTo(0,0); pDC->LineTo(0,600); int width = 40; int ch = 'A'; CString str1; CBrush brush; brush.CreateSolidBrush(RGB(50, 250,0)); pDC->SelectObject(

22、brush); for(int i = 1; i<6; i++, ch++) { pDC->Rectangle(200*i, 0, 200*i+width, pDoc->m_num[i-1]); str1.Format(_T("%c"),ch); //整型以字符格式赋给str1 pDC->TextOut(200*i+10,-10, str1); //输出ABCDE } CFont font; font.CreateFont(0,0,0,0,800,0,0,0,OEM_CHARSET, OUT_DEFAU

23、LT_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,DEFAULT_PITCH,_T("楷体")); pDC->SelectObject(&font); pDC->TextOut(200,550, _T("各公司销售点水果月销售量直方图")); } 7. 运行程序,结果如下: 5. 单文档串行化编程之一 SerialRect应用程序串行化一个矩形数据,用对话框修改数据,用编辑/修改菜单打开对话框。 2. 用AppWizard建立一个普通单文档SerialRect工程,按下一步,直到出现下图,将CSerialRe

24、ctView的基类设为CFormView。 改为CFormView 3. 初始界面如下: 4. 在Form上添加控件 5. 添加变量Edit1~Edit4整型(m_x1, m_y1, m_x2, m_y2),取值范围0~300,Edit5为Control-CEdit型(m_Ctrl) 6. 用右键选择控件的Events修改Edit1的黙认EN_CHANGE消息处理OnChangeEdit1为自定义的OnChangeEdit。其他三个Edit也映射到这个函数。 7. 在Doc头文件SerialRectDoc.h中添加变量: class CSerialRectDoc :

25、public CDocument { protected: // create from serialization only CSerialRectDoc(); DECLARE_DYNCREATE(CSerialRectDoc) // Attributes public: int x1, y1, x2, y2; // Operations 6. 在SerialRectDoc.cpp的构造函数中初始化变量: CSerialRectDoc::CSerialRectDoc() { // TODO: add one-time construction code he

26、re x1=y1=x2=y2=0; } 7. SerialRectView.cpp中添加下面内容: void CSerialRectView::OnChangeEdit() { // TODO: Add your control notification handler code here UpdateData(); CSerialRectDoc* pDoc= GetDocument(); if(m_x1!=pDoc-> x1) pDoc-> x1 =m_x1; if(m_y1!=pDoc-> y1) pDoc-> y1 =m_y1; if(m_x2!=p

27、Doc-> x2) pDoc-> x2 =m_x2; if(m_y2!=pDoc-> y2) pDoc-> y2 =m_y2; Invalidate(true); } void CSerialRectView::OnInitialUpdate() { CFormView::OnInitialUpdate(); GetParentFrame()->RecalcLayout(); ResizeParentToFit(); m_x1=GetDocument()->x1; m_x2=GetDocument()->x2; m_y1=GetDocument()->

28、y1; m_y2=GetDocument()->y2; UpdateData(false); } 8. 在SerialRectDoc.cpp的串行化代码: void CSerialRectDoc::Serialize(CArchive& ar) { if (ar.IsStoring()) { // TODO: add storing code here ar<>x1>>y1>>x2>>y2; } } 9.

29、 为CSerialRectView类添加OnDraw函数 在工作区类视图中右键单击CSerialRectView类,选择Add Member Function弹出对话框: void CSerialRectView::OnDraw(CDC *pDC) { m_Ctrl.UpdateWindow(); pDC=m_Ctrl.GetWindowDC(); pDC->Rectangle(m_x1,m_y1,m_x2,m_y2); UpdateData(false); } 6.单文档串行化编程之二 SerialData应用程序串行化日期结构数据,用对话框修改数

30、据,用编辑/修改菜单打开对话框。 1. 用AppWizard建立一个普通单文档SerialDate工程 2. 添加一个对话框资源如下: 并为三个编辑框添加变量m_nYear, m_nMonth, m_nDay, 3. 用ClassWizard添加类CDateDialog(其基类为CDialog) 4. 在Doc头文件SerialDateDoc.h中添加下面内容: struct Date { int m_nYear; int m_nMonth; int m_nDay; }; #include "DateDialog.h" class CSerialDateDo

31、c : public CDocument { protected: // create from serialization only CSerialDateDoc(); DECLARE_DYNCREATE(CSerialDateDoc) // Attributes public: Date date; 4. 编辑菜单中添加子菜单项,ID_EDIT_MODIFY,消息映射到SerialDateDoc.cpp文件中的OnEditModify()函数 5. 在SerialDateDoc.cpp中添加代码 CSerialDateDoc::CSerialDateDo

32、c() { date.m_nYear=2002; date.m_nMonth=6; date.m_nDay=1; } void CSerialDateDoc::Serialize(CArchive& ar) { if (ar.IsStoring()) { ar<>date.m_nYear >>date.m_nMonth >>date.m_nDay ; } } void CSerialDateDoc::OnEditModify()

33、 { CDateDialog dlg; dlg.m_nYear=date.m_nYear; dlg.m_nMonth=date.m_nMonth; dlg.m_nDay=date.m_nDay; if(dlg.DoModal()==IDOK) { date.m_nYear=dlg.m_nYear; date.m_nMonth=dlg.m_nMonth; date.m_nDay=dlg.m_nDay; } UpdateAllViews(NULL); SetModifiedFlag(true);//关闭窗口时提示存盘 } 6. 修改Seria

34、lDateView.cpp中的OnDraw代码 void CSerialDateView::OnDraw(CDC* pDC) { CSerialDateDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); CString str; str.Format(_T("Year:%d"), pDoc->date.m_nYear); pDC->TextOut(20,20,str); str.Format(_T("Month:%d"), pDoc->date.m_nMonth); pDC->TextOut(20,40,str); str.Format(_T("Day:%d"), pDoc->date.m_nDay); pDC->TextOut(20,60,str); }

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服