二十讲SRGP图形包使用实例.ppt_第1页
二十讲SRGP图形包使用实例.ppt_第2页
二十讲SRGP图形包使用实例.ppt_第3页
二十讲SRGP图形包使用实例.ppt_第4页
二十讲SRGP图形包使用实例.ppt_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第二十讲:SRGP图形包使用实例,SRGP简介基本绘图函数,点、线、面 SRGP_defPoint(int x, int y); SRGP_lineCoord(int x1, int y1, int x2, int y2); SRGP_line(point pt1, point pt2); SRGP_polyLine(int vert_count, point *vertices); 绘图属性 SRGP_setLineStyle SRGP_setLineWidth 文本 SRGP_text(point pt, char *text); 颜色、字体 SRGP_setColor(int value); SRGP_loadColorTable(int start, int count, ush *red, ush *green, ush *blue); SRGP_setFont(int value); SRGP_inquireTextExtent(char*text, int *width, int *height, int* descent); /见书P14, 本API有错,SRGP简介基本绘图函数,颜色的处理 #define BLACK 0 #define WHITE 1 #define RED 2 #define GREEN 3 #define BLUE 4 #define YELLOW 5 const int MaxColor = 15; unsigned short red = 0, 255, 255, 0, 0, 255, 255, 0, 192, 114, 240, 130, 225, 10, 255; unsigned short green = 0, 255, 0, 255, 0, 255, 0, 255, 192, 114, 240, 130, 225, 10, 255; unsigned short blue = 0, 255, 0, 0, 255, 0, 255, 255, 192, 114, 240, 130, 225, 140, 230; SRGP_loadColorTable(0, MaxColor, red, green, blue); /装载颜色表 SRGP_setColor(RED); /设置为红色 RGB(255, 0, 0) SRGP_setColor(YELLOW); /设置为黄色 RGB(255, 255,0),SRGP简介基本交互处理,设置设备模式 SRGP_setInputMode(LOCATOR, SAMPLE); 定位设备的测量 locator_measure Mouse; do SRGP_sampleLocator(,采样模式,设置设备模式 SRGP_setInputMode(KEYBOARD, EVENT); 主事件循环 do SRGP_waitEvent(-1); /阻塞,直至某事件发生。 SRGP_getKeyboard(,事件模式,SRGP简介基本交互处理,SRGP简介基本交互处理,/Srgppublic.h typedef enum UP, DOWN buttonStatus; typedef struct point postion; buttonStatus button_chord3; int button_of_last_transition; locator_measure;,SRGP_sampleLocator( /鼠标信息采样 1. if ( Mouse.buttonChord0=DOWN ) /左键按下 2. if ( Mouse.buttonChord0=UP ) /左键弹起 3. if ( Mouse.buttonChord1=DOWN ) /右键按下,鼠标状态,SRGP简介应用说明,void UserMain() SRGP_begin(“COOL Drawing V1.0“, width, height, 4, FALSE); SRGP_setInputMode(LOCATOR, SAMPLE); do /主处理循环 SRGP_sampleLocator( ,SRGP简介与Windows SDK结合使用,1. 取得设备的DC HDC hdc = GetDC(srgp_canvasTable0.drawable.win); 2. 使用SDK完成SRGP不提供的绘图操作 3. 释放设备DC ReleaseDC(srgp_canvasTable0.drawable.win, hdc); 参见srgplocal.h 常用的一些API (参考VC帮助) COLORREF SetPixel( HDC hdc, int X, int Y, COLORREF crColor); COLORREF GetPixel( HDC hdc, int XPos, int nYPos);,COOL Drawing的界面,COOL Drawing的界面,COOL Drawing的界面设计模拟了IE 4风格。 图标和菜单按钮处于平面状态或凹陷状态(标志此时处于某种模式中); 当鼠标指针进入该区域时,产生浮起效果; 移出该区域后,图标恢复原来状态。鼠标在该区域内单击,使图标凹陷或恢复原平面状态,并触发对应事件; 菜单与工具条有延时的徐徐弹出,富有动感。,COOL Drawing的处理流程,COOL Drawing对鼠标的反应,程序采用采样模式。原因:程序需要捕捉鼠标移动事件,而该事件被SRGP屏蔽。 各个对象均有各自的监听函数,在主处理循环中轮流监听。同样,在对象的监听函数中由各个子对象轮流监听。 一旦鼠标进入某对象的区域,则触发对应事件,进入处理状态。,COOL Drawing的组成,MenuBar 菜单条类 IconBar 工具条类 StatusBar 状态条类 Canvas 画板类 这些对象由参数动态创建,虽然SRGP库建立在C语言环境中,但程序的编写采用了面向对象的思想:每个结构都有其对应的方法(函数),函数的传入参数中有结构指针,即每个函数只对其所属的结构进行操作。通过这种方法实现了数据的封装。,MenuBar 菜单条简介,typedef struct int x1, y1, x2, y2; char str20; MenuItem; typedef struct int x1, x2, y1, y2; int nItem; MenuItem* item; COLORREF* buf; Menu;,typedef struct int x1, x2, y1, y2; point origin; char str20; Menu menu; MenuButton; typedef struct int nMenu; MenuButton* btn; int x1, x2, y1, y2; MenuBar;,1. MenuBar的初始状态,各个MenuButton对象都在监听鼠标信息。 2. 鼠标移动到某MenuButton上方,该对象监听到该事件,给出反馈使按钮浮起,然后进入处理状态,不断采集鼠标信息,直至鼠标移出本Button范围。 3. 在MenuButton的处理状态中,不断采集鼠标信息,在鼠标左键按下时做出反应使MenuButton凹陷并弹出菜单Menu(弹出菜单时需要保存菜单的背景以便恢复)。这时,由MenuButton以及被激活的Menu (以及其中的MenuItem子对象)开始进入处理状态,监听鼠标信息。,MenuBar 的事件处理,在MenuButton与被激活的Menu (以及其中的MenuItem子对象)的处理状态中,将有三种情况产生: 1.鼠标在MenuButton上单击,弹出的Menu收回(恢复保存的背景),并使凹陷的Button恢复浮起。 2 鼠标移动至某MenuItem上方,该对象监听到该事件,给出反馈使文字以反色显示。 3 鼠标移动出本MenuButton以及Menu的范围,这两个对象退出处理状态,MenuButton恢复初始状态并收回弹出的Menu。其他MenuButton采集到鼠标信息进入的信息,按钮凹陷并弹出菜单,这两个对象进入处理状态。,MenuBar 的事件处理,IconBar 工具条简介,特点: 1. Icon代表着一种绘图工具、绘图模式或绘图颜色。某Icon选中后,将使用这种风格绘图。 2. 一个IconGroup内只能有一个Icon处于选中状态。 3. 鼠标在Icon上停留一定时间后,将弹出提示Hint。 4. 鼠标移出IconBar一段时间后,IconBar将自动隐藏(在窗口左部缩成一个小条) 。鼠标移到隐藏的IconBar上方一段时间后,IconBar又将自动弹出。,IconBar 工具条简介,打开的IconBar,隐藏的IconBar,不足之处,1. 只采用缺省字体,界面不够丰富。 2. 文字长度的计算有误。 可使用SRGP_inquireTextEx

温馨提示

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

评论

0/150

提交评论