第四章一个简单的二维光栅图形软件包 WindOws ap简介 ■用图形软件包绘图 ■基本的交互处理 ■光栅操作 湖北大学数计学院
湖北大学 数计学院 1 第四章 一个简单的二维光栅图形软件包 ----Windows API简介 ◼ 用图形软件包绘图 ◼ 基本的交互处理 ◼ 光栅操作
用图形软件包绘图(1/6) 图元的声明 1003 ◆绘图纸,屏幕,坐标系 012 1028 ◆扫描转换:将转换为点阵表示的图形 顶点(参数) 表示的图形 「扫描转换 点阵表示 的图形 用户 显示系统 湖北大学数计学院
湖北大学 数计学院 2 用图形软件包绘图(1/6) ◼ 图元的声明 ◆ 绘图纸,屏幕,坐标系 ◆ 扫描转换:将转换为点阵表示的图形 扫描转换 顶点(参数) 表示的图形 用户 点阵表示 的图形 显示系统
用图形软件包绘图(2/6) 点 COLORREF GetPixel( int x, int y)const COLORREF SetPixel( int x, int y, COLORREF crcolor 直线段 CPoint MoveTo( int x, int y BOOL LineTo( int x, int y) 折线 BOOL Polyline( LpPoint lpPoints, int nCount 10 100 bow eArray[o] 4084 bowi eArray[1] 70100 bowtieArray[2] 70 60 bowtieArray[3) 4076 bowtieArray[4] 0 x L10 60 bowl eArray[5]
湖北大学 数计学院 3 用图形软件包绘图(2/6) ◆ 点 COLORREF GetPixel( int x, int y ) const COLORREF SetPixel( int x, int y, COLORREF crColor ); ◆ 直线段 CPoint MoveTo( int x, int y ); BOOL LineTo( int x, int y ); ◆ 折线 BOOL Polyline( LPPOINT lpPoints, int nCount );
用图形软件包绘图(3/6) ◆圆弧 BOOL AngleArc( int x, int y, int rAdius float fStartAngle, float fSweepAngle ◆椭圆弧 BOOL Arc( int xl, int y1, int x2, int y2, int x3, int y3, int x4, int y4) 起始角45度 终止交270度 湖北大学数计学院
湖北大学 数计学院 4 用图形软件包绘图(3/6) ◆ 圆弧 BOOL AngleArc( int x, int y, int nRadius, float fStartAngle, float fSweepAngle ); ◆ 椭圆弧 BOOL Arc( int x1, int y1, int x2, int y2, int x3, int y3, int x4, int y4 );
用图形软件包绘图(46) 图元的属性 ◆线型、线宽 CPen( int nPen Style, int nWidth, COLORREF crColor ) BOOL CreatePen(int nPenstyle, int nwidth COLORREF crColor ◆颜色:三种指定颜色的方式 通过查色表索引值 通过颜色名称 通过红、绿、兰三分量 COLORREF GetBkColor()const COLORREF SetBkColor( CoLORREF crcolor) COLORREF GetTextColor()const COLORREF SetText Color COLORREF crColor
湖北大学 数计学院 5 用图形软件包绘图(4/6) ◼ 图元的属性 ◆ 线型、线宽 CPen ( int nPenStyle, int nWidth, COLORREF crColor ); BOOL CreatePen (int nPenStyle,int nWidth, COLORREF crColor); ◆ 颜色:三种指定颜色的方式 • 通过查色表索引值 • 通过颜色名称 • 通过红、绿、兰三分量 COLORREF GetBkColor( ) const; COLORREF SetBkColor( COLORREF crColor ); COLORREF GetTextColor( ) const; COLORREF SetTextColor( COLORREF crColor );
用图形软件包绘图(5/6) 填充图元及其属性 ◆椭圆 BOOL Ellipse( int x1, int y1, int x2, int y2) BOOL Pie( int xl, int y1, int x2, int y2, int x3, int y3, int x4, int y4) ◆多边形 BOOL Polygon( Lppoint IpPoints, int nCount ◆矩形 BOOL Rectangle( int x1, int y1, int x2, int 2); ◆填充模式 ◆均匀填色 BOOL CreateSolidBrush( COLORREF crcolor ◆以图像填充 BOOL CreatePatternBrush(*k pBitmap
湖北大学 数计学院 6 用图形软件包绘图(5/6) ◼ 填充图元及其属性 ◆ 椭圆 BOOL Ellipse( int x1, int y1, int x2, int y2 ); BOOL Pie( int x1, int y1, int x2, int y2, int x3, int y3, int x4, int y4 ); ◆ 多边形 BOOL Polygon( LPPOINT lpPoints, int nCount ); ◆ 矩形 BOOL Rectangle( int x1, int y1, int x2, int y2 ); ◆ 填充模式 ⧫ 均匀填色 BOOL CreateSolidBrush( COLORREF crColor ); ⧫ 以图像填充 BOOL CreatePatternBrush( CBitmap* pBitmap
用图形软件包绘图(6/6) 保存和恢复图元的属性:提高程序的模块化程度 字符 BOOL TextOut( int x, int y, LPCtSTR lpszString, int nCount 字宽 实高 字高 基线 原点 底空 湖北大学数计学院
湖北大学 数计学院 7 用图形软件包绘图(6/6) ◼ 保存和恢复图元的属性:提高程序的模块化程度 ◼ 字符 BOOL TextOut( int x, int y, LPCTSTR lpszString, int nCount );
基本的交互处理(1/3) 几条原则 ◆简单一致的交互操作序列 ◆清晰的可选项 不能有过多的选项 ◆反馈 解决方法:菜单、按钮、加亮、 ◆Undo功能 变灰、光标变化等等 ■逻辑输入设备 ◆目标:屏蔽物理设备的差异,获得系统的设备无关 性 ◆二维定位设备 ◆键盘设备 ◆设备驱动程序完成从物理设备到逻辑设备的映射 湖北大学数计学院
湖北大学 数计学院 8 基本的交互处理(1/3) ◼ 几条原则 ◆ 简单一致的交互操作序列 ◆ 清晰的可选项 ◆ 不能有过多的选项 ◆ 反馈 ◆ Undo功能 ◼ 逻辑输入设备 ◆ 目标:屏蔽物理设备的差异,获得系统的设备无关 性 ◆ 二维定位设备 ◆ 键盘设备 ◆ 设备驱动程序完成从物理设备到逻辑设备的映射 解决方法:菜单、按钮、加亮、 变灰、光标变化等等
基本的交互处理(2/3) 输入方式 取样(轮询)方式 中断驱动方式 事件驱动方式 湖北大学数计学院
湖北大学 数计学院 9 基本的交互处理(2/3) ◼ 输入方式 取样(轮询)方式 中断驱动方式 事件驱动方式
基本的交互处理(3/3) 事件驱动方式初始化 ◆简单的程序结构Do{ waitEvent(event); Switch(event) Case EVENTI: precedure break Case EVENT2: procedure2; break: ●·● I while(true); 湖北大学数计学院
湖北大学 数计学院 10 基本的交互处理(3/3) ◼ 事件驱动方式 ◆ 简单的程序结构 初始化; Do{ waitEvent(event); Switch(event) { Case EVENT1: precedure1; break; Case EVENT2: procedure2; break; … } }while(TRUE);