MFC单文档应用程序基础训练——文本输出、绘图等.doc
《MFC单文档应用程序基础训练——文本输出、绘图等.doc》由会员分享,可在线阅读,更多相关《MFC单文档应用程序基础训练——文本输出、绘图等.doc(20页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、MFC单文档基础训练文本输出、绘图等平台为:VS20101. 一个简单的单文档应用程序文件-新建项目-MFC应用程序 ,出现窗口按“下一步”,出现下面窗口 选择单文档 点 调试运行,最后运行界面为下图:一个简单的单文档应用程序向导自动建立五个类:向导自动建立的类相应源文件其他源文件相应头文件其他头文件CAboutDlgStdAfx.cppStdAfx.hCXxxAppXxx.cppXxx.rcXxx.hResource.hCXxxViewXxxView.cppXxxView.hCXxxDocXxxDoc.cppXxxDoc.hCMainFrameMainFrame.cppMainFrame.h
2、视(View)显示用户程序的数据及处理用户与文档的交互文档对象永久存储(磁盘文件)MainFrame框架窗口文档视结构每个类的主要函数:void CAboutDlg:DoDataExchange(CDataExchange* pDX)int CMainFrame:OnCreate(LPCREATESTRUCT lpCreateStruct)/创建窗体的工具栏,状态栏等BOOL CMainFrame:PreCreateWindow(CREATESTRUCT& cs)BOOL CXxxApp:InitInstance()void CXxxApp:OnAppAbout()BOOL CXxxDoc:O
3、nNewDocument()/初始化文档字符数据、字体信息等void CXxxDoc:Serialize(CArchive& ar)BOOL CXxxView:PreCreateWindow(CREATESTRUCT& cs)void CXxxView:OnDraw(CDC* pDC) BOOL CXxxView:OnPreparePrinting(CPrintInfo* pInfo)/弹出打印对话框void CXxxView:OnBeginPrinting(CDC* pDC, CPrintInfo* pInfo) void CXxxView:OnEndPrinting(CDC* pDC, C
4、PrintInfo* pInfo)CXxxDoc* CXxxView:GetDocument() / non-debug version is inline创建单文档应用程序的一般步骤:l 利用AppWizard创建应用程序框架l 在文档内中声明保存文档数据所需要数据对象l 完成文档类的OnNewDocument函数,初始化新文档l 完成文档类的Serialize函数,保持和加载文档数据l 完成视类的OnInitialUpdate函数,初始化显示l 完成视类的OnDraw函数,显示当前文档内容l 在视类中加入可以使用户编辑文档数据所需的代码2.简单文本和图形输出建立一个简单的单文档应用程序Si
5、mpleTextPicture,通过修改OnDraw函数在视(View)中输出信息或画图。找到函数OnDraw(CDC* /*pDC*/),改为OnDraw(CDC* pDC);OnDraw函数在SimpleTextPicture.cpp文件中,专门用于输出信息或画图。负责视图显示功能(包括打印、显示、预览等)例21 显示正方形和文本void CSimpleTextPictureView:OnDraw(CDC* pDC)CSimpleTextPictureDoc* pDoc = GetDocument();ASSERT_VALID(pDoc);/ TODO: add draw code for
6、 native data herepDC-TextOut(10,120,_T(Hello World!);pDC-Rectangle(20,20,100,100);在AppWizard生成的OnDraw函数中加入以黑体字给出的两行代码,运行程序,显示如下:例22显示彩色图形和文本void CSimpleTextPictureView:OnDraw(CDC* pDC)CSimpleTextPictureDoc* pDoc = GetDocument();ASSERT_VALID(pDoc);/ TODO: add draw code for native data hereCPen pen;CB
7、rush 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(brush);CString str(_T(Hello World!); /用UNICODE编码pDC-SetTextColor(RGB(0,0,250);pDC-TextOut(120,150,str);pDC-
8、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);3.滚动字幕创建一个简单的单文档应用程序Xxx2; 1 在Xxx2View.h中添加代码如下:public:virtual CXxx2View();#ifdef _DEBUGvirtual void AssertValid() const;virtual void
9、 Dump(CDumpContext& dc) const;#endifprotected:private:int n;/定义变量2 在CXxx2View构造函数中初始化变量nCXxx2View:CXxx2View()/ TODO: add construction 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,
10、235);pDC-SetBkMode(TRANSPARENT);CFont font;font.CreateFont(28,15,0,0,FW_NORMAL,false,false,false,DEFAULT_CHARSET,OUT_DEVICE_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.l
11、eft)/窗口如果n 右坐标减去左坐标n=0; 4添加三条消息映射,并加入相应代码。通过菜单命令:视图/类视图,找到CXxx2View类,在CXxx2View类上点击“右键-属性”,找到消息按扭,如下图: 点击 void 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 CXx
12、x2View:OnRButtonDblClk(UINT nFlags, CPoint point) /鼠标右双击函数/ TODO: Add your message handler code here and/or call defaultKillTimer(1);CView:OnRButtonDblClk(nFlags, point);void CXxx2View:OnTimer(UINT nIDEvent) / TODO: Add your message handler code here and/or call defaultInvalidate(); /擦除背景,重新绘制CView:
13、OnTimer(nIDEvent);5添加菜单控制与代理点击视图-资源视图,如下图,双击IDR_MAINFRAME,进入菜单编辑。在资源Menu中添加运行子菜单:启动(IDC_MOVE)和停止(IDC_STOP)及其消息映射(右键-添加事件处理程序)。改为OnMove下为“启动”对应的消息映射:改为OnMove并修改代码:void CXxx2View:OnMove() /启动对应消息/ TODO: Add your command handler code hereSetTimer(1,300,NULL);void CXxx2View:OnStop() /停止对应的消息/ TODO: Add
14、your command handler code hereKillTimer(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的文件尾部加入类Max的实现部分:/ CPlotDoc commandsdouble Max:Max2(double a
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- MFC 文档 应用程序 基础训练 文本 输出 绘图
限制150内