




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
MFC单文档应用程序1.一个简单的单文档应用程序文件->新建项目->MFC应用程序,出现窗II按“下一步”,出现下面窗II选择单文档根述应用程序类型复合文档支持文档模极宇符串数据库支持用户界面功能高级功能生成的类多个文档敏)基于对话椎色)使用HTML多顶级文档(T)寸话框0文裆/视图结构支持(V)资源语言a):中文(中国)根述应用程序类型复合文档支持文档模极宇符串数据库支持用户界面功能高级功能生成的类多个文档敏)基于对话椎色)使用HTML多顶级文档(T)寸话框0文裆/视图结构支持(V)资源语言a):中文(中国)项目类型:Windows资源管理器敏)。MFC标芋隹(X)MFC的使用:选择在对话椎中运行的应用程序。|MFC(U)
在铮态库中使用MFC(^)点“调试一>运行”,最后运行界面为下图:
一个简单的单文档应用程序向导自动建立五个类:向导自动建立的类相应源文件其他源文件相应头文件其他头文件CAboutDlgStdAfx.cppStdAfx.hCXxxAppXxx.cppXxx.rcXxx.hResource.ilCXxxViewXxxView.cppXxxView.hCXxxDocXxxDoc.cppXxxDoc.h每个类的主要函数:voidCAboutDlg::DoDataExchange(CDataExchange*pDX)intCMainFrame::OnCreate(LPCREATESTRUCTIpCreateStruct)/体的i只松.状态栏等BOOLCMainFrame::PreCreateWindow(CREATESTRUCT&cs)BOOLCXxxApp::InitInstance()voidCXxxApp::OnAppAbout()BOOLCXxxDoc::OnNewDocunient().始化文档字符数批、字体信息等voidCXxxDoc::Serialize(CArchive&ar)BOOLCXxxView::PreCreateWindow(CREATESTRUCT&cs)voidCXxxView::OnDraw(CDC*pDC)BOOLCXxxView::OnPreparePrinting(CPrintInfo*plnfo)//弹出打印对话框voidCXxxView::Oi】BeginPrinting(CDC军pDC,CPrintlnfo*plnfo)voidCXxxView::OnEndPrinting(CDC*pDC,CPrintlnfo*plnfo)CXxxDoc*CXxxView::GetDocument()//non-debugversionisinline创建单文档应用程序的一般步骤:利用AppWizaid创建应用程序框架在文档内中声明保存文档数据所需要数据对象完成文档类的OnNewDocument函数,初始化新文档完成文档类的Serialize函数,保持和加载文档数据完成视类的OnlnitialUpdate函数,初始化显示完成视类的OnDiaw函数,显示当前文档内容在视类中加入可以使用户编辑文档数据所需的代码.简单文本和图形输出建立一个简单的单文档应用程序SimpleTextPictum通过修改OiiDraw函数在视(View)中输出信息或画图。找到函数OnDraw(CDC*/*pDC*/),改为OnDraw(CDC*pDC):OiiDraw函数在SimpleTextPicture.cpp文件中,专门用于输出信息或画图。负责视图显示功能(包括打印、显示、预览等)例2.1显示正方形和文本voidCSimpleTextPictureView::OiiDiaw(CDC*pDC)CSunpleTextPictureDoc*pDoc=GetDocument();ASSERT_SLID(pDoc);//TODO:adddrawcodefornativedataherepDC->TextOut(10,120,_T(''HelloWorld!”));pDC・>Rectangle(20,20,100,100);)在AppWizaid生成的OnDraw函数中加入以黑体字给出的两行代码,运行程序,显小如卜:例2.2显示彩色图形和文本voidCSimpleTextPictuieView::OiiDraw(CDC*pDC)CSunpleTextPictureDoc*pDoc=GetDocument();ASSERT_VALID(pDoc);//TODO:adddrawcodefornativedatahereCPenpen;CBrushbrush;pen.CreatePen(PS_SOLID,3,RGB(250,0,0));brush.CreateSo!idBrush(RGB(0^250,0));pDC->SelectObject(pen);pDC->SelectObject(brush);pDC->EHipse(100.200,300300);DeleteObject(pen);DeleteObject(brush);CStringstr(_T(HHelloWorld!”));〃用UNICODE编码pDC・>SetTextColor(RGB(0,0,250));pDC->TextOut(120J50,str);pDC->SetTextColor(RGB(125J25J25));doublea[]={31.4,888.54};charch[10];CStringstrl;pDC->TextOut(20,40,strl);str1.Format(_T(”%f”)削1]);pDC->TextOut(20,60,strl);
.滚动字幕创建一个简单的单文档应用程序Xxx2:在Xxx2View.li中添加代码如下:public:viitual-CXxx2View();#ifdef_DEBUGviitualvoidAssertValidQconst;viitualvoidDump(CDumpContext&de)const;#endifprotected:private:mtn;〃定义变量在CXxx2View构造函数中初始化变量nCXxx2View::CXxx2ViewQJI//TODO:addconstmctioncodeheren=0;}在Xxx2View.cpp文件中修改OnDraw函数:voidCXxx2View::OnDraw(CDC*pDC)CXxx2Doc*pDoc-GetDocument();ASSERT_\ALID(pDoc);if(!pDoc)letuni:pDC・>SetTextCoIor(RGB(0,0,235));pDC->SetBkMode(TRANSPARENT);CFontfont;font・CreateFont(28J5,0,0,FW_NORMAL£alse£alse,false,DEFAULT_CHARSET,OUT_DEVICE_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,DEFAULT_PITCH,_TV隶书”));pDC->SelectObject(&font);pDC->TextOut(n,100,_T("世上无难事,只要肯登攀!”));n=n+20;RECTr;GetClientRect(&r);〃获得窗口if(n>r.right-r.left)//窗口如果n>右坐标减去左坐标11=0;)添加三条消息映射,并加入相应代码。通过菜单命令:视图/类视图,找到CXxx2Vlew类,在CXxx2View类上点击“右键->属性”,找到消息按扭,如下图:
点击〈添加〉OnMButtonDbldkvoidCXxx2View::OnLButtonDblClk(UINTnFlags,CPointpoint)(〃鼠标左双击函数//TODO:Addyouimessagehandlercodehereand/orcalldefaultSetTimer(1,500,NULL);点击CView::OiiLButtoiiDblClk(nFlags,point);}voidCXxx2View::OnRButtonDblClk(UINTnFIags,CPointpoint)(〃鼠标右双击函数
//TODO:Addyourmessagehandlercodehereand/orcalldefaultKillTimer(l);CView::OiiRButtonDblClk(iiFlags,point);}voidCXxx2View::OnTimei(UINTiiIDEvent){//TODO:Addyourmessagehandlercodehereand/oicalldefaultInvalidate。;//]^除背景,重新绘制CView::OnTiinei(nlDEvent);}添加菜单控制与代理点击视图・>资源视图,如下图,双击IDR_MAINFRAME,进入菜单编辑。资源视图-mfc4,箪mfc4■mfc4.rc□吕口AcceleratorDialogIconMenuIDRMAINFRAMEj=□吕口IDRMAINFRAMEI_15tringTable卜□Toolbar*iVersion在资源Menu中添加运行子菜单:启动(EDJMOVE)和停止(IDC_STOP)及其消息映射(右键・>添加事件处理程序)。卜为“启动"对应的消息映射:并修改代码:voidCXxx2View::OnMove()〃启动对应消息{//TODO:AddyouicommandhandlercodehereSetTimeH1,300,NULL);}voidCXxx2View::OnStop()〃停止对应的消息{//TODO:AddyouicommandhandlercodehereKillTimer(l);}.使用计算数据画直方图使用AppWixaid生成单文档工程Plot在PlotDoc.h中类CPlotDoc的定义之前加入类Max的定义:classMaxdoublexLx2,x3,x4;doubleMax2(double,double);public:Max(double,double,double,double);doubleMax4();};在PlotDoc.cpp的文件尾部加入类Max的实现部分://CPlotDoccommandsdoubleMax::Max2(doublea,doubleb){if(a>=b)returna;elsereturnb;)Max::Max(doublea,doubleb,doublec,doubled){xl=a;x2=b;x3=c;x4=d;)doubleMax::Max4(){returnMax2(Max2(xl,x2),Max2(x3,x4));}为CPlotDoc类增加一个公有的void类型的成员函数Find和一个公有int数据成员数组m_num[5],使用类产生对象并计算它们的最大值,将它们转换成血,存入整数数组m_num2voidCPlotDoc::Find()(Maxa(110.5,120.8,110,68);Maxb(130,256.5,90,200);Maxc(125,406.8,350,330);Maxd(120,356.8,300,280.5);Maxe(102,256.8,120,105);m_num[0]=(int)a.Max4();m_num[l]=(int)b.Max4();m_nun】⑵=(int)c.Max4();m_num[3]=(int)d.Max4();m_num[4]=(int)e.Max4();)为CPlotDoc类的成员函数OnNewDocunient增加调用语句准备数据。BOOLCPlotDoc::OnNewDocumentQif(!CDocument::OiiNewDocumentQ)returnFALSE;//TODO:addreniitializationcodehere//(SDIdocumentswillreusethisdocument)Find();〃增加的语句returnTRUE;)在视类中画图写字voidCPlotView::OnDraw(CDC*pDC)(CPlotDoc*pDoc=GetDocument();ASSERT_\ALID(pDoc);//TODO:adddrawcodefbrnativedataherepDC->SetMapMode(MM_ISOTROPIC);pDC・>SetViewportOrg(50250);pDC->MoveTo(0,0);pDC->LineTo(1100,0);pDC->MoveTo(0,0);pDC->LineTo(0,600);intwidth=40;intch=CStringstrl;CBrushbrush;brush.CreateSolidBrush(RGB(50,250,0));pDC->SeIectObject(brush);for(inti=1;iv6;i++,ch++)(pDC->Rectangle(200*i,0,200零i+width,pDoc->m_num[1-1]);strLFormat(一T(”%c”),ch);〃整型以字符格式赋给strlpDC・>TextOut(20(Ti+10,・10,strl);/偷出ABCDE)CFontfont;font.CreateFont(0,0,0,0,800,0,0,0,OEM_CHARSET,OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,DEFAULT_PITCH,_T(”楷体”));pDC->SeIectObject(&font);pDC.>TextOut(200,550,_T(”各公司销售点水果月销售量宜方图”));)运行程序,结果如下:
5-单文档串行化编程之一SenalRect应用程序串行化一个矩形数据,用对话框修改数据,用编辑/修改菜单打开对话框。用AppWizard建立一个普通单文档SenalRect工程,按下一步,直到出现下图,将CSeiialRectView的基类设为CFonnViewo3.初始界面如下:NSeriaLRect-创天中文VCH-[SerialRect.rc-IDD^SERIALRECT.FORI(Dialog)]旨玄件景倍章看SA工程逼径工且由口菲助-|g|x|在旨玄件景倍章看SA工程逼径工且由口菲助-|g|x|在Form±添加控件添加变量Editl〜Edit4整型(m_xl,m_yl,m_x2.m_y2),取值范I韦I。〜300,Edit5为Contiol-CEdit型(m_Ctil)用右键选择控件的Events修改Editl的熟认EN_CHANGE消息处理OnChaiigeEditl为自定义的OnChangeEdit。其他三个Edit也映射到这个函数。在Doc头文件SenalRectDoc.li中添加变量:classCSerialRectDoc:publicCDocument{protected://createfromserializationonlyCSenalRectDocQ;DECLARE-DYNCREATE(CSenalRectDoc)//Attributespublic:intxl,yl,x2,y2;//Operations在SenalRectDoc.cpp的构造函数中初始化变量:CSerialRectDoc::CSerialRectDoc()//TODO:addone-timeconstiuctioncodeherexl=yl=x2=y2=0;}SenalRectView.cpp中添加下面内容:voidCSeiialRectView::OnChangeEdit(){//TODO:AddyourcontrolnotificationhandlercodehereUpdateData();CSerialRectDoc*pDoc=GetDocument();if(m_xl!=pDoc->xl)pDoc->xl=m_xl;if(m_yl!=pDoc->yl)pDoc->yl=m_yl;if(m_x2!=pDoc->x2)pDoc->x2=m_x2;if(m_jr2!=pDoc->y2)pDoc->y2=m_y2;Invalidate(true);}voidCSeriaIRectView::OnInitialUpdate(){CFormView::OnInitialUpdate();GetPaientFrameQ->RecalcLayout();ResizePaientToFitQ;m_xl=GetDocument()->x1;m_x2=GetDocument()->x2;m_y1=GetDocument()->y1;m_jr2=GetDocument()->y2;UpdateData(false);在SenalRectDoc.cpp的串行化代码:voidCSeriaIRectDoc::Serialize(CArchive&ar)if(ar.IsStoiiiigO)//TODO:addstoringcodeherear«xl«yl«x2«y2;}else//TODO:addloadmgcodeherear»x1»y1»x2»y2;}}为CSeiialRectView类添加OnDraw函数在工作区类视图中右键单击CSeiialRectView类,选择AddMemberFunction弹出对话框:voidCSerialRectView::OnDraw(CDC*pDC){m_Ctrl.UpdateVVindowO;pDC=m_CtrLGetWindowDC();pDC->RectangIe(m_x1,m_y1,m_x2,m_y2);UpdateData(false);}6.单文档串行化编程之二SenalDataby用程序串行化口期结构数据,用对话框修改数据,用编辑/修改菜单打开对话框。用AppWizard建立一个普通单文档SerialDate匚程添加一个对话框资源如下:并为三个编辑框添加变量m_nYeai\m_nMonth,m_nDay,用ClassWizard添加类CDateDkdog(其基类为CDialog)在Doc头文件SeiialDateDoc.il中添加下面内容:structDate(intm_nYear;intm_nMonth;intm_nDay;);#includeMDateDialog.hMclassCSerialDateDoc:publicCDocument{protected://createfromserializationonlyCSenalDateDoc();DECLARE^DYNCREATECCSenalDateDoc)//Attributespublic:Datedate;编辑菜单中添加子菜单项,ID_EDIT_MODIFY,消息映射到SenalDateDoc.cpp文件中的OnEditModify
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 铁路钢板桩施工方案
- 挂篮0 专项施工方案
- 穿孔铝板龙骨施工方案
- 公路挡土墙施工方案
- 二零二五年度医院医护人员正式劳动合同范本发布
- 2025年度航空航天技术合作意向协议合同
- 二零二五年度农村宅基地使用权转让与农村集体产权制度改革合同
- 2025年度洗衣店门店经营权转让协议
- 2025年洗车机租赁与新能源汽车充电设施配套服务合同
- 二零二五年度医疗机构保安临时工服务协议
- 四川政采评审专家入库考试基础题复习试题
- 锂离子电池失效分析及后果PFMEA-电子表格版
- 2024解析:第十九章生活用电-基础练(解析版)
- 古建寺庙施工组织设计
- 《中小学校园食品安全和膳食经费管理工作指引》专题知识培训
- 青海省西宁市2023-2024学年高一上学期物理期末试卷(含答案)
- 《金融市场与金融工具》课程教学大纲
- 高维数据分析新理论
- 导弹防御课件教学课件
- 上海铁路局入职合同范例
- 高中生物课程标准(人教版)
评论
0/150
提交评论