fortran中QuickWin绘图基础
- 格式:docx
- 大小:27.78 KB
- 文档页数:8
1 QuickWin绘图基础 QuickWin支持以像素为基础的图形,其图形库包括了一套完整的图形函数集。
1.QuickWin应用程序 QuickWin图形库提供了MSFLIB.F90和MSFLIB.MOD两个文件,其中包括了访问所有图形函数的说明。文件MSFLIB.F90中包含绘图子程序的定义及接口,文件MSFLIB.MOD中包含了图形过程符号常量说明以及与绘图过程相关的结构体的定义。因此,任何使用QuickWin的程序必须包含USEMSFLIB语句以访问QuickWin的图形库,USEMSFLIB语句应出现在任何声明语句和其他模块包含语句之前。
在默认情况下,QuickWin应用程序拥有一个框架主窗口和一个输出子窗口。在主窗口中,有对子窗口及其图形和文本实施操作的菜单栏,其中,File菜单中的Save命令可以把绘图结果保存成*.BMP位图文件。
2.QuickWin应用程序的创建 例1 创建显示正弦波形的QuickWin应用程序。 操作步骤如下: (1)在Microsoft DeveloperStudio中单击File菜单下的New菜单项,在New对话框中选择ProjectWorkspace,单击OK按钮。
(2)在New Project Workspace对话框中,选择QuickWinApplication,将工程名称设置为My_win,单击Create按钮。 (3)在Microsoft DeveloperStudio中单击File菜单下的New菜单项,在New对话框中选择TextFile,单击OK按钮,在编辑区输入以下源程序:
USE MSFLIB PARAMETER(PI=3.141593) TYPE(QWINFO) winfo TYPE(WXYCOORD) xy INTEGER(2) result REAL a REAL(8) x,y CHARACTER C*4 ! 设置子窗口最大化 winfo.type = QWIN$MAX result = SETWSIZEQQ(0, winfo) result = SETWSIZEQQ(QWIN$FRAMEWINDOW, winfo) ! 设置子窗口的背景色为白色 result = SETBKCOLORRGB (#FFFFFF) CALL CLEARSCREEN ($GCLEARSCREEN) ! 设置绘图的颜色为黑色 result = SETCOLORRGB(#000000) ! 设置视窗 result = SETWINDOW(.TRUE., -2*pi-1, 1.5, 2*pi+1, -1.5) ! 绘制坐标轴 x = 2*pi+0.5 CALL MOVETO_W(-x, 0D0, XY) result = LINETO_W(x,0D0) ! 横轴 y = 1.2 CALL MOVETO_W(0D0, y, XY) RESULT = LINETO_W(0D0,-y) ! 纵轴 ! 坐标轴刻度 RESULT=INITIALIZEFONTS() RESULT=SETFONT('h16w12i') DO i = -360, 360, 90 x = pi*i/180-0.5 CALL MOVETO_W(x, 0D0, XY) WRITE(c,"(I4)") i CALL OUTGTEXT(c) END DO ! 绘制正弦曲线 DO a = -360, 360, 0.5 x = pi*a/180 y = SIN(x) result =SETPIXEL_W(x, y) END DO READ (*,*) ! 按回车键结束 END (4)以文件名demo.f90保存源程序,然后在Microsoft DeveloperStudio中单击Insert菜单下的Files intoProject菜单项,将Demo.f90文件加入到My_win工程中;
(5)在Microsoft DeveloperStudio中分别单击Build菜单下的Compile、Build、Execute菜单项,用以编译、生成并运行My_win文件。
2 QuickWin窗口的创建 QuickWin库包含了许多创建和控制QuickWin窗口的过程。下面介绍这些过程。 2.1 访问窗口属性 设置图形模式,可使用SETWINDOWCONFIG函数。通过给派生类WINDOWCONFIG中的分量赋值,指定当前的窗口大小等。函数调用方法如下:
RESULT = SETWINDOWCONFIG(WC) 其中,返回值RESULT为LOGICAL型变量,若调用成功,返回值为.TRUE.,否则为.FALSE.。WC为WINDOWCONFIG结构体类型变量,该类型在MSFLIB.MOD中定义,包含了窗口的大小、颜色、字符集等属性,其定义如下:
TYPE WINDOWCONFIG INTEGER(2) NUMXPIXELS ! X轴的像素个数 INTEGER(2) NUMYPIXELS ! Y轴的像素个数 INTEGER(2) NUMTEXTCOLS ! 最大文本列数 INTEGER(2) NUMTEXTROWS ! 最大文本行数 INTEGER(2) NUMCOLORS ! 颜色索引数 INTEGER(4) FONTSIZE ! 缺省的字体大小。 CHARACTER(80) TITLE ! 窗口标题 CHARACTE(32) EXTENDFONTNAME ! 系统提供的多字节字体,如中文宋体 INTEGER(4) EXTENDFONTSIZE ! 用于设置多字节字符时的字体大小 INTEGER(4) EXTENDFONTATTRIBUTES ! 字体属性,如粗体、斜体等 INTEGER(2) BITSPERPIXEL ! 每像素的位数 END TYPE WINDOWCONFIG 默认的QuickWin子窗口是全屏模式,例如屏幕分辨率为1024×768,则子窗口X轴的像素个数为1024,Y轴的像素个数为768。 调用SETWINDOWCONFIG函数设置图形模式,必须为每个分量指定一个确定的值。若只给出某些字段的值,将导致其他字段的值无效。如果WC中的分量的值赋值为-1,即表示该项属性由系统指定。
例2 设置窗口大小为800×600像素,字体大小为10×12。 USE MSFLIB TYPE (WINDOWCONFIG) WC LOGICAL STATUS INTEGER(2) RESULT WC.NUMXPIXELS = 800 WC.NUMYPIXELS = 600 WC.NUMTEXTCOLS = -1 WC.NUMTEXTROWS = -1 WC.NUMCOLORS = -1 WC.TITLE= "THIS IS A TEST"C WC.FONTSIZE =#000A000C ! 000A、000C分别为10、12的十六进制表示 STATUS = SETWINDOWCONFIG(WC) RESULT = SETTEXTCOLORRGB(#FFFFFF) IF (STATUS) THEN WRITE(*,*) WC.NUMTEXTCOLS , WC.NUMTEXTROWS ELSE WRITE(*,*) "ERROR" END IF END 运行程序,可以看到NUMTEXTCOLS为80(800/10),NUMTEXTROWS为50(600/12)。
2.2 窗口操作 1. 打开子窗口 QuickWin应用程序是一个多文档窗口,可使用OPEN语句生成子窗口,语句格式如下: OPEN(UNIT = n,FILE = 'USER', TITLE = wname,IOFOCUS =status) 选项说明: (1)FILE='USER'用于打开一个窗口。若缺省,则弹出Windows标准的Open对话框,以供输入文件名,默认子窗口为80列×30行的文本窗口。一个QuickWin应用程序最多可以同时打开40个子窗口。通过引用子窗口的单元号,就可以将输出(文本或图形)定向到单元号所代表的子窗口中。
(2)TITLE =wname指定子窗口的标题,wname为字符型常量或变量。 OPEN语句打开子窗口所对应的通道,但并不立即显示该子窗口。只有当使用SETWINDOWCONFIG函数设置窗体属性、执行输入/输出语句或显示图形时才显示子窗口,并按照通道号确定为哪一个子窗口。例如:
OPEN(UNIT=12, FILE = 'USER', TITLE = 'OUTPUT WINDOW') WRITE(12,*) 'HELLO WORLD' 用OPEN语句中的FILE = 'USER'打开子窗口时,其对应的其他参数必须设置为顺序文件(缺省值),其他文件格式(如随机文件、无格式文件等)则会导致运行时错误。
2.激活窗口 使一个子窗口成为活动的,可通过调用SETACTIVEQQ函数来实现。函数格式如下: result = SETACTIVEQQ(unit) 其中,result为INTEGER(4)类型,用于返回函数执行的结果,函数执行成功返回1,否则返回0。 3. 控制窗口的大小和位置 调用函数SETWSIZEQQ可设置窗口的大小和位置。子窗口的位置和大小以文本的行数和列数来表示;而主窗口的位置和大小以屏幕像素点为单位来表示。
result =SETWSIZEQQ(unit, winfo) 其中,result为INTEGER(4)类型,用于返回函数执行的结果,函数执行成功返回0,否则返回1个非0值。 unit为窗口的通道号,如果没有使用OPEN语句指定启动窗口,通道号为0、5和6默认为启动窗口的通道号;winfo为结构体QWINFO类型。结构体QWINFO包含窗口的位置和大小信息,它在模块MSFLIB.MOD中的定义为:
TYPE QWINFO INTEGER(2) TYPE ! 窗口类型 INTEGER(2) X ! 左上角的X轴坐标 INTEGER(2) Y ! 左上角的Y轴坐标 INTEGER(2) H ! 窗口的高度 INTEGER(2) W ! 窗口的宽度 END TYPE QWINFO 分量TYPE的取值如表12.2所示。 表12.2 TYPE的取值说明 TYPE的取值 说 明
QWIN$MIN 最小化窗口 QWIN$MAX 最大化窗口
3 图形坐标系 QuickWin的图形坐标分为物理坐标系、视口坐标系和视窗坐标系三种。在缺省情况下,QuickWin坐标系均为左手坐标系。其中,像素坐标系的坐标值为整数,且从0开始计数,故分辨率为640×480的屏幕,其X方向的最大像素坐标值为639,Y方向的最大像素坐标值为479。