第13章单文档窗体

上传人:我*** 文档编号:137625422 上传时间:2020-07-10 格式:PPT 页数:61 大小:456.50KB
返回 下载 相关 举报
第13章单文档窗体_第1页
第1页 / 共61页
第13章单文档窗体_第2页
第2页 / 共61页
第13章单文档窗体_第3页
第3页 / 共61页
第13章单文档窗体_第4页
第4页 / 共61页
第13章单文档窗体_第5页
第5页 / 共61页
点击查看更多>>
资源描述

《第13章单文档窗体》由会员分享,可在线阅读,更多相关《第13章单文档窗体(61页珍藏版)》请在金锄头文库上搜索。

1、第13章 单文档窗体,13.1 文档/视图结构 13.2 文字与图形输出 13.3 菜单设计 13.4 工具条设计 13.5 鼠标和键盘消息处理 13.6 定时器,13.1 文档/视图结构,文档:用于管理应用程序的数据 视图:用户界面,用于显示、打印文档中的数据 管理与用户的交互。 数据的管理与显示分离的思想简化了开发过程 文档/视图结构应用程序: SDI-Single Document Interface 单文档界面 MDI-MultipleDocument Interface 多文档界面,13.2 文字与图形输出,13.2.1 文字与图形的基本输出 【例13.1】在窗口中显示一个矩形框,框

2、中显示“同舟共济 自强不息”,工程名为 TEST1,1. 生成SDI应用程序框架 2. 在CTESTDoc类中添加数据成员: public: CRect r; CString s; 3. 在文档类中对数据成员初始化,BOOL CTESTDoc:OnNewDocument() if (!CDocument:OnNewDocument() return FALSE; / TODO: add reinitialization code here / (SDI documents will reuse this document) r=CRect(100,60,260,100); s=同舟共济 自强不

3、息; return TRUE; ,4. 在CTESTView类的OnDraw()函数添加代码: void CTESTView:OnDraw(CDC* pDC) CTESTDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); / TODO: add draw code for native data here pDC-Rectangle(pDoc-r); pDC-TextOut(110,70,pDoc-s); ,说明: (1)ClassView有5个类和1个全局对象: CAboutDlg类:about对话框类,由CDialog派生。 CMainFrame类

4、:窗口框架类,由CFrameWnd派生 CTESTApp类:应用程序类,由CWinApp派生 CTESTDoc类:文档类,由CDocument派生 CTESTView类:视图类,由CView派生 theApp全局对象 (2)CRect描述一个矩形,有4个数据成员: left、top、right和bottom。 (3)GetDocument() 返回值指向当前文档的指针。 示例:CTESTDoc* pDoc= GetDocument(); 作用:让pDoc指向当前文档,(4)输出在OnDraw()中完成 pDC指向窗口中央的客户区对象 void CTESTView:OnDraw(CDC* pDC

5、) CTESTDoc* pDoc = GetDocument();/ 获得指向文档类对象的指针 ASSERT_VALID(pDoc);/ 检查pDoc是否有效,若无效结束程序 / TODO: add draw code for native data here (5) OnDraw()的调用 自动调用:当窗口发生变化时 手工调用:调用Invalidate()和InvalidateRect()函数时 Invalidate(TRUE)/擦除窗口原有的内容,重新绘制。 Invalidate(FALSE)/窗口原有的内容保留,再进行绘制。 InvalidateRect(矩形, TRUE) /重新绘制这

6、个矩形区域。 InvalidateRect(矩形, FALSE)/原有内容保留,再绘制矩形区域。,(1)文字输出 BOOL TextOut(int x, int y, LPCTSTR lpszString, int nCount); (2)画点 COLORREF SetPixel(int x, int y, COLORREF crColor); COLORREF SetPixel(POINT point, COLORREF crColor); 说明: 例如: COLORREF C1=RGB(0, 0, 0)/合成黑色 COLORREF C2=RGB(255, 0, 0)/合成红色 COLORR

7、EF C3=RGB(255, 255, 0)/合成黄色 COLORREF C4=RGB(255, 255, 255)/合成白色 POINT:MFC的结构类型,表示平面上的一个点, 数据成员是x和y COLORREF:32位整数类型,表示颜色,文字与图形输出的基本函数:,(3)画线 起点: CPoint MoveTo(int x,int y); CPoint MoveTo(POINT point); 终点: BOOL LineTo(int x, int y); BOOL LineTo(POINT point); (4)画矩形 BOOL Rectangle(int x1, int y1, int

8、x2, int y2); BOOL Rectangle(LPCRECT lpRect); (5)画椭圆 BOOL Ellipse(int x1, int y1, int x2, int y2); BOOL Ellipse(LPCRECT lpRect); (6)获取客户区的大小 void GetClientRect( LPRECT lpRect ) const;,【例13.2】改变窗口时,矩形框和文字总是显示在窗口的中央,void CTESTView:OnDraw(CDC* pDC) CTESTDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); / T

9、ODO: add draw code for native data here CRect a,b; int w=160; int h=40; GetClientRect( ,【例13.3】绘制-22之间的sin曲线。,在TEST.CPP中添加命令: #include math.h void CTESTView:OnDraw(CDC* pDC) CTESTDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); / TODO: add draw code for native data here CRect rect; GetClientRect(rect)

10、; int x0=rect.Width()/2; int y0=rect.Height()/2; pDC-MoveTo(20,y0); pDC-LineTo(rect.Width()-20,y0); pDC-MoveTo(x0,20); pDC-LineTo(x0,rect.Height()-20); double step=3.14159/100; for(int i=-200;iSetPixel(x0+(i/300.0)*rect.Width()/2,y0-sin(step*i)*rect.Height()/4,RGB(255,0,0); ,13.2.2 画笔和画刷,1. 自定义画笔 CP

11、en是MFC中的一个类 它的对象代表一支笔,并提供了函数 示例代码 /定义画笔pen和指向画笔的指针oldpen CPen pen, *oldpen; /创建一支红色能画实线3号粗细的画笔 pen.CreatePen(PS_SOLID,3,RGB(255,0,0); /选用新的画笔pen,让oldpen指向旧的画笔 oldpen=pDC-SelectObject(,(1)创建画笔函数 BOOL CreatePen( int nPenStyle, int nWidth, COLORREF crColor ); nPenStyle:样式 nWidth线:宽度 crColor:颜色。,(2)Sele

12、ctObject() CDC类的成员函数,选择对象(选择设备) /选用新的画笔 CPen* SelectObject( CPen* pPen ); /选用新的画刷 CBrush* SelectObject( CBrush* pBrush ); /选用新的字体 virtual CFont* SelectObject( CFont* pFont ); CBitmap* SelectObject( CBitmap* pBitmap ); /选用新的位图 注意:参数是指针,返回值也是指针,2.自定义画刷 CBrush是MFC中的一个类 代表一个画刷,并提供函数 示例代码: /定义画刷对象brush C

13、Brush brush; /构造绿色十字线风格的画刷 brush.CreateHatchBrush(HS_CROSS,RGB(0,255,0); /选择一个新的画刷 pDC-SelectObject(,(1)CreateHatchBrush 创建画刷 BOOL CreateHatchBrush(int nIndex, COLORREF crColor ); nIndex:阴影风格 crColor:颜色。,(2)CreateSolidBrush() 创建画刷 BOOL CreateSolidBrush(COLORREF crColor );,【例13.4】输出图形 void CTESTView:

14、OnDraw(CDC* pDC) CTESTDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); CPen pen,*oldpen; pen.CreatePen(PS_SOLID,3,RGB(255,0,0); oldpen=pDC-SelectObject( ,13.2.3 位图,CBitmap是MFC中的一个类 它的对象可装载一幅图,并提供函数 【例13.5】显示Soap Bubbles.bmp (1)导入位图 (2)装载位图 (3)读取位图信息 (4)构造内存设备环境,并将位图装入该设备环境 (5)将位图从内存设备环境复制到真正的设备环境中,(1)

15、导入位图 把位图文件作为资源导入到应用程序 选择“插入|资源”命令 注意其ID:IDB_BITMAP1 (2)装载位图 把位图资源装载到CBitmap对象 CBitmap b; b.LoadBitmap(IDB_BITMAP1); (3)读取位图信息 BITMAP bm; b.GetBitmap(,(4)构造内存设备环境,并将位图装入该设备环境 CDC m; m.CreateCompatibleDC(NULL); m.SelectObject( (x,y):位图显示区域左上角的坐标 nWidth和nHeight:显示区域的宽度和高度 pSrcDC:指向内存设备环境 (xSrc, ySrc)为原

16、图欲显示区域左上角的坐标 dwRop:复制方式,常用值为SRCCOPY,StretchBlt(), 区别:可以缩放 BOOL StretchBlt( int x, int y, int nWidth, int nHeight, CDC* pSrcDC, int xSrc, int ySrc, int nSrcWidth, int nSrcHeight, DWORD dwRop ); nSrcWidt、nSrcHeight:欲显示的原图的区域大小,void CMyView:OnDraw(CDC* pDC) CMyDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); / TODO: add draw code for native data here CBitmap b; b.LoadBitmap(IDB_BITMAP1); BITMAP bm; b.GetBitmap( ,13.3 菜单,菜单的实现步骤,利用AppWizard生成

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > PPT模板库 > PPT素材/模板

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号