MFC单应用程序练习

上传人:微*** 文档编号:112994522 上传时间:2022-06-24 格式:DOCX 页数:19 大小:668.74KB
收藏 版权申诉 举报 下载
MFC单应用程序练习_第1页
第1页 / 共19页
MFC单应用程序练习_第2页
第2页 / 共19页
MFC单应用程序练习_第3页
第3页 / 共19页
资源描述:

《MFC单应用程序练习》由会员分享,可在线阅读,更多相关《MFC单应用程序练习(19页珍藏版)》请在装配图网上搜索。

1、MFC单文档应用程序1 . 一个简单的单文档应用程序文件-新建项目-MFC应用程序,出现窗口按“下一步”,出现下面窗口 选择单文档KfC应用程序向导-fdsaf应用程序类型概逑应用程序类型 复合文裆支持 文档模板字符串数据库支持 用尸界面功能 高线功能 生成的类一喧记近序类甥-害个文档期)基于对话幅使用HTML 多顶级文档IT)国文档/视图结构支持(V)资源语言(P :|中文仲国)项目类型:Windows资源管理器(X)& IFC标淮MFC的便用:j世择在知舌性中运行为为月提.序门MFC q)在鄢意屋中使用MFC7使用Unicode库但)上一步 下一步 克威取消点调试一 运行,最后运行界面为下

2、图:一个简单的单文档应用程序向导自动建立五个类向导自动建立的类相应源文件其他源文件相应头文件其他头文件CAboutDlgStdAfx.cppStdAfx.hCXxxAppXxx.cppXxx.rcXxx.hResource.hCXxxViewXxxView.cppXxxView.hCXxxDocXxxDoc.cppXxxDoc.h每个类的主要函数:voidCAboutDlg:DoDataExchange(CDataExchange* pDX)intCMainFrame:OnCreate(LPCREATESTRUCT IpCreateStruct)创建窗体的工具栏,状态栏等BOOL CMainF

3、rame:PreCreateWindow(CREATESTRUCT& cs)BOOL CXxxApp:InitInstance()void CXxxApp:OnAppAbout()BOOL CXxxDoc:OnNewDocument()初始化文档字符数据字体信息等void CXxxDoc:Serialize(CArchive& ar)BOOLCXxxView:PreCreateWindow(CREATESTRUCT& cs)voidCXxxView:OnDraw(CDC* pDC)BOOL CXxxView:OnPreparePrinting(CPrintInfo* pInfo)弹出打印对话框

4、voidCXxxView:OnBeginPrinting(CDC* pDC, CPrintInfo* pInfo)voidCXxxView:OnEndPrinting(CDC* pDC, CPrintInfo* pInfo)CXxxDoc* CXxxView:GetDocument() / non-debug version is inline创建单文档应用程序的一般步骤:利用AppWizard创建应用程序框架在文档内中声明保存文档数据所需要数据对象完成文档类的OnNewDocument函数,初始化新文档完成文档类的Serialize函数,保持和加载文档数据完成视类的OnInitialUpda

5、te函数,初始化显示完成视类的OnDraw函数,显示当前文档内容在视类中加入可以使用户编辑文档数据所需的代码2 .简单文本和图形输由建立一个简单的单文档应用程序SimpleTextPicture ,通过彳改OnDraw函数在视(View)中输出信息或画图。找到函数 OnDraw(CDC* /*pDC*/),改为 OnDraw(CDC* pDC);OnDraw函数在 SimpleTextPicture.cpp文件中,专门用于输出信息或画图。负责视图显 示功能(包括打印、显示、预览等)例2. 1显示正方形和文本void CSimpleTextPictureView:OnDraw(CDC* pDC)

6、CSimpleTextPictureDoc* pDoc = GetDocument();ASSERT_VALID(pDoc);/ TODO: add draw code for native data herepDC-TextOut(10,120,_T(Hello World!);pDC-Rectangle(20,20,100,100);在AppWizard生成的OnDraw函数中加入以黑体字给出的两行代码,运行程序, 显示如下:Hello Wo rid I例2 . 2显示彩色图形和文本void CSimpleTextPictureView:OnDraw(CDC* pDC) CSimpleTe

7、xtPictureDoc* pDoc = GetDocument();ASSERT_VALID(pDoc);/ TODO: add draw code for native data hereCPen pen;CBrush brush;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(

8、brush);CString str(_T(Hello World!); /用 UNICODE 编码 pDC-SetTextColor(RGB(0,0,250);pDC-TextOut(120,150,str);pDC-SetTextColor(RGB(125,125,125);double a=31.4,888.54;char ch10;CString str1;str1.Format(_T(%f),a0);pDC-TextOut(20,40,str1);str1.Format(_T(%f),a1);pDC-TextOut(20,60,str1);册 无标题 fchafI n I回|文忡E

9、编辑国视四希助(日 R昌/TMIMOUII888.540000Hello World!就绪3 .滚动字幕创建一个简单的单文档应用程序Xxx2 ;1在Xxx2View.h中添加代码如下:public:virtual CXxx2View();#ifdef _DEBUGvirtual void AssertValid() const;virtual void Dump(CDumpContext& dc) const;#endifprotected:private:int n;定义变量2在CXxx2View构造函数中初始化变量nCXxx2View:CXxx2View() / TODO: add con

10、struction code heren=0;3在Xxx2View.cpp文件中修改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_ DEVIC

11、E_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(nr.right-r.left)/ 窗口如果 n 右坐标减去左坐标 n=0;4 添加三条消息映射,并加入相应代码。通过菜单命令: 视图 /类视图,找到 CXxx2View 类, 在 CXxx2View 类上点击 “右键-属性”找到消息按扭,如下图 :点击O

12、nMEuttonDblClkvoid CXxx2View:OnLButtonDblClk(UINT nFlags, CPoint point) 鼠标左双击函数/ TODO: Add your message handler code here and/or call defaultSetTimer(1,500,NULL);CView:OnLButtonDblClk(nFlags, point);void CXxx2View:OnRButtonDblClk(UINT nFlags, CPoint point) /鼠标右双击函数/ TODO: Add your message handler co

13、de here and/or call default KillTimer(l);CView:OnRButtonDblClk(nFlags, point);void CXxx2View:OnTimer(UINT nIDEvent)/ TODO: Add your message handler code here and/or call defaultInvalidate。; 擦除背景,重新绘制CView:OnTimer(nIDEvent);5添加菜单控制与代理点击视图,资源视图,如下图,双击 IDR_MAINFRAME,进入菜单编辑。资源图川忙可写一,第 mfc4二 miFc4.rcj Ac

14、celeratori_J Dialog LJ Iconj _J Menud 5MM Tablij Toolbar_J Version国资源.因类视图卜与解决在资源Menu中添加运行子菜单:启动(IDC_MOVE )和停止(IDC_STOP )与其消息映射 (右键- 添加事件处理程序)。下为“启动”对应的消息映射事件处懿序向导-rnfc4欢迎使用事件处理程序向导命令名: |ID 3ETT3添力嗝耨取消并修改代码:void CXxx2View:OnMove() 启动对应消息/ TODO: Add your command handler code here SetTimer(1,300,NULL)

15、;void CXxx2View:OnStop() 停止对应的消息/ TODO: Add your command handler code here KillTimer(1);4 .使用计算数据画直方图1 使用AppWixard生成单文档工程 Plot2 在PlotDoc.h中类 CPlotDoc的定义之前加入类 Max的定义: class Maxdouble x1,x2,x3,x4;double Max2(double,double);public:Max(double,double,double,double);double Max4();3 在 PlotDoc.cpp 的文件尾部加入类

16、Max 的实现部分:/ CPlotDoc commandsdouble 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;double Max:Max4()return Max2(Max2(x1,x2),Max2(x3,x4);4 为 CPlotDoc 类增加一个公有的 void 类型的成员函数Find 和一个公有int 数据成员数组m_num5 ,使用类产生对象并计算它们的最大值,将它们转换成

17、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, 356.8, 300, 280.5);Max e(102, 256.8, 120, 105);m_num0 = (int) a. Max4();m_num1 = (int) b. Max4();m_num2 = (int) c. Max4();m_num3 = (int) d. Max4();m_num4 = (int) e. M

18、ax4();5 为 CPlotDoc 类的成员函数OnNewDocument 增加调用语句准备数据。BOOL CPlotDoc:OnNewDocument()if (!CDocument:OnNewDocument() 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();

19、ASSERT_VALID(pDoc);/ TODO: add draw code for native data herepDC-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(brush);

20、for(int i = 1; iRectangle(200*i, 0, 200*i+width, pDoc-m_numi-1);str1.Format(_T(%c),ch); / 整型以字符格式赋给str1pDC-TextOut(200*i+10,-10, str1); / 输出 ABCDECFont font;font.CreateFont(0,0,0,0,800,0,0,0,OEM_CHARSET,OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,DEF AULT_PITCH,_T( 楷体 ) );pDC-SelectObject

21、(&font);pDC-TextOut(200,550, _T( 各公司销售点水果月销售量直方图 );7 运行程序,结果如下:-nl xi文件旧 编辑(T 查看 帮助俎)5 .单文档串行化编程之一SerialRect应用程序串行化一个矩形数据,2.用AppWizard建立一个普通单文档用对话框修改数据,用编辑/修改菜单打开对话框。SerialRect工程,按下一步,直到出现下图,将CSerialRectView 的基类设为 CFormView 。3.初始界面如下:“Sr iaLH”!.创天中文VC且UtwL 工匚工DD_SER1ALHEC7OM1 (Dial”)驾工件羯和直告品又二 条母工A

22、9=1郡七马电12d|悒c史buHp| - “国唐刊吧迎*_一;山CAbotttDIg *3 CMaitif- raine* *CSiflialHcclA|jp国 rcgwctcM:思 5C8cri4lltecWlew Globui9Im,困瓦零d“.三FhHZJaLIn降团图出醺鼻日ffi巨喧北nw图隆卞小回些SE而相逢/WY7,宣技交件百丝果工_11,飞诲不瓦4.在Form上添加控件5. 添加变量Edit1Edit4 整型 (m_x1, m_y1, m_x2, m_y2) ,取值范围 0300 , Edit5 为Control-CEdit 型(m_Ctrl)6. 用右键选择控件的 Even

23、ts修改Editl的黑认EN_CHANGE消息处理OnChangeEditl为自 定义的OnChangeEdit 。其他三个Edit 也映射到这个函数。7. 在 Doc 头文件 SerialRectDoc.h 中添加变量:class CSerialRectDoc : public CDocumentprotected: / create from serialization onlyCSerialRectDoc();DECLARE_DYNCREATE(CSerialRectDoc)/ Attributespublic:int x1, y1, x2, y2;/ Operations6 . 在 S

24、erialRectDoc.cpp 的构造函数中初始化变量:CSerialRectDoc:CSerialRectDoc()/ TODO: add one-time construction code here 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!=pD

25、oc- x1) pDoc- x1 =m_x1;if(m_y1!=pDoc- y1) pDoc- y1 =m_y1;if(m_x2!=pDoc- 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()

26、-x2;m_y1=GetDocument()-y1;m_y2=GetDocument()-y2;UpdateData(false);8 .在SerialRectDoc.cpp的串行化代码: void CSerialRectDoc:Serialize(CArchive& ar) if (ar.IsStoring()/ TODO: add storing code here arx1y1x2x1y1x2y2;9 .为 CSerialRectView 类添加 OnDraw 函数在工作区类视图中右键单击CSerialRectView类,选择Add Member Function弹出对话框:Add le

27、nber FunctionFunction Type:OKvoid CancelFunction Declaration:OnDrawfCDC* pDC|Access f1, Public Prateded Private Static I- Virtual 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应用程序串行化日期结构

28、数据,用对话框修改数据,用编辑/修改菜单打开对话框。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.hclass CSerialDateDoc : public CDocument

29、 protected: / create from serialization onlyCSerialDateDoc();DECLARE_DYNCREATE(CSerialDateDoc)/ Attributes public:Date date;4 .编辑菜单中添加子菜单项,ID_EDIT_MODIFY ,消息映射到SerialDateDoc.cpp文件中的OnEditModify()函数5 .在 SerialDateDoc.cpp 中添加代码 CSerialDateDoc:CSerialDateDoc() date.m_nYear=2002;date.m_nMonth=6;date.m_n

30、Day=1;void CSerialDateDoc:Serialize(CArchive& ar)if (ar.IsStoring() ardate.m_nYear date.m_nMonth date.m_nYear date.m_nMonth date.m_nDay ;void CSerialDateDoc:OnEditModify()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

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!