《IntelVisualFortran窗口程序设计.pdf》由会员分享,可在线阅读,更多相关《IntelVisualFortran窗口程序设计.pdf(73页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、-1-第二章 Intel Visual Fortran 编译器的使用 在窗口程序设计之前,让我们先了解一下 Intel Visual Fortran 编译器的基本使用方法和编译器中的项目类型。2-1 Intel Visual Fortran 编译器简介 Fortran 是一种高级的计算机编程语言,所有 Fortran 程序源码必须经过编译器的编译、链接,才能被翻译成计算机所能识别的机器码,从而完成源程序设定的任务。Fortran 语言的编译器较多,PC 中 Windows 平台上常见的有:Fortran PowerStation 4.0 微软公司将 Fortran90 集成到 Develope
2、r Studio 开发环境中之后推出的 Fortran 编译器,真正实现了 Fortran 的可视化编程;Digital Visual Fortran 微软公司和数据设备公司(DEC)联合开发的功能更强大的 Fortran 编译器;Compaq Visual Fortran 数据设备公司(DEC)和康柏公司(Compaq)合并后推出的 Fortran 编译器以及康柏公司并入惠普后推出的最新版本;Intel Visual Fortran 11.x 惠普公司将 Windows 下的编译器转售给 Intel 公司后,由 Intel 公司开发的 Fortran 编译器,目前是最新版。Salford F
3、ortran 95 由 silverfrost 公司开发的能用于基于 Win32 平台和.net 平台的应用程序开发,支持完整的 Fortran95 语法和部分 Fortran2003 语法。其实,Fortran 编译器还有很多,如 Lahey Fortran、Absoft Fortran 和 OpenWatcom等。从目前的使用情况来看,前四个编译器在 Windows 平台上最为常见。考虑到 Fortran编译器目前的发展情况以及各种编译器版本使用的广泛性,本书所有的程序都基于Intel Visual Fortran 11.x 编译器。跟 C+一样,Fortran 语言本身没有提供图形界面输
4、出方面的功能,所以为了用Fortran 编写 Windows 图形接口程序,必须借助编译器提供的扩展功能。Intel Visual Fortran 编译器封装了几乎完整的 Win32 API 和 OpenGL 函数,提供了良好、稳定的编程接口,所以,借助 Intel Visual Fortran 编译器,Fortran 既能完成 UI 设计,也能胜任图形编程,从这个意义上讲,C 能做到的,Fortran 也能做到。2-2 Intel Visual Fortran 编译器的使用 为了编写图形界面程序,首先应安装 Intel Visual Fortran 编译器。编译器的安装过程比较简单,这里不再
5、赘述。不过有几点需要注意:先安装 Visual Studio 2008;然后安装 Intel Visual Fortran 编译器,并集成到 Visual Studio 2008;不建议用户安装 Visual Studio 2005,因为和 Intel Visual Fortran 的集成性不是很好,按照笔者的经验,曾经出现过不能正常使用控件箱的情况;-2-建议完整安装 Intel Visual Fortran 编译器自带的帮助文件,尤其是 Windows 窗口程序设计的开发人员。安装 Intel Visual Fortran 编译器后,就可打开 Visual Studio 2008 开始编译
6、 Fortran程序了。具体步骤如下:双击启动 Visual Studio 2008,选择“文件”菜单中的“新建”-“项目”,弹出如图 2.1 所示的对话框,从中选择要建立的 Fortran 项目类型和模板,同时指定项目名称及其保存位置,单击“确定”按钮即可完成新项目的创建;按下组合键“Ctrl+F5”运行程序;此处省略了程序的调试过程,对程序调试不熟练的读者请阅读相关资料或文献。图 2.1“新建项目”对话框 2-3 Intel Visual Fortran 中的项目类型 程序开发之前,我们应充分了解各种项目类型的特点。启动 Visual Studio 2008,按前面的步骤打开图 2.1 所
7、示的对话框,在“项目类型”中列出了 Intel Visual Fortran编译器可创建的几种项目类型。Console Application 是基于字符模式的应用程序,这类项目适于不需要图形输出的程序设计,优点是执行速度快。图 2.2 所示为 Console Application 类工程的输出窗口。图 2.2 Console Application 工程输出窗口 -3-Library 其中包括两种库文件工程:Static Libraries 静态库文件,是已编译的、独立于主程序的程序段,适合于大型项目中程序的结构组织和程序间函数或子程序的重复调用。但是,静态库文件会插入程序调用点,磁盘空间
8、浪费较大;同时当静态库文件需要升级的时候,会带来工作效率的低下。为了解决这些问题,出现了动态链接库。Dynamic-link Library 动态链接库,很好地解决了静态库文件存在的问题,所以广泛使用在 Windows 程序设计中。QuickWin Application 多文档窗口应用程序。编译器封装了部分 Win32 API 函数,使 Fortran 界面的开发变得更加容易。不管 QuickWin Application 应用程序有多简单,默认情况下界面中总会出现预设的系统菜单和状态栏。其运行界面如图 2.3 所示。图 2.3 QuickWin Application 工程输出窗口 Sta
9、ndard Graphics Application 单文档窗口应用程序,通常以全屏的形式出现,如图 2.4 所示。全屏形式和窗口界面之间可通过组合键“Alt+Enter”互相切换。跟QuickWin Application 不同,Standard Graphics Application 程序界面中并没有菜单栏和状态栏。图 2.4 Standard Graphics Application 工程输出窗口 Windowing Application 窗口界面应用程序。经过编译器封装,Windowing Application 应用程序能够调用完整的Win32 API系统函数,所以Windowi
10、ng Application应用程序的弹性更大、更加复杂。-4-第三章 QuickWin Application 基础 本章中,我们将利用 QuickWin 工程来创建简单的窗口程序。相比以前的命令行程序,图形界面窗口程序使用户在视觉和操作上更容易接受。3-1 最简单的窗口程序 现在到该做些什么的时候了。如果您以前的程序都是基于 Console 工程类型,那么,从现在开始,让我们丢掉那个很不友好的“黑屏”,一起体验窗口程序设计的乐趣。跟所有的语言一样,最简单的程序总是向世界问好的例子。由于第一次创建 Fortran界面程序,接下来的步骤会较为详细,将逐步引导大家创建第一个窗口程序。具体过程如下
11、:启动 Visual Studio 2008;选择“文件”菜单中的“新建”-“项目”,弹出如图 2.1 所示对话框;在“项目类型”和“模板”中选择“QuickWin Application”,指定项目的保存位置和名称,单击“确定”按钮;编译器界面中出现了如图 3.1 所示的“解决方案资源管理器”;图 3.1 解决方案资源管理器 移动鼠标至“Source Files”文件夹,单击鼠标右键,选择“添加”-“新建项”,弹出如图 3.2 所示的对话框;图 3.2“添加新项”对话框 -5-选择“Fortran Free-form File(.f90)”模板,单击“添加”按钮;编译器界面中出现源代码编辑器
12、,将下面的代码添加到“Source1.f90”;#001!example 3-1#002 program main#003 implicit none#004 write(*,*)hello world!#005 end program main 按下组合键“Ctrl+F5”运行程序,得到程序界面如图 3.3 所示。图 3.3 Example3-1 程序运行界面 这个程序中,简单的四个语句却实现了典型的 Windows 窗口界面,如菜单和状态栏等,所以,用 Fortran 编写窗口界面程序并没有想象中的困难,经过编译器对相关函数的有效封装后反而更加容易。程序编译运行后,随着主窗口弹出了一个小提
13、示窗口,同时,子窗口占了界面主框架的一部分,这些可能和读者想象的窗口程序有所区别。为了使这个简单的窗口程序更“像”,需要对程序做些修改。3-2“真正”的窗口程序 为了让窗口界面变得更容易理解,首先应该去掉程序运行后的对话框提示。方法有二:单击“否”,程序继续运行,但是每次执行程序时都有会出现该信息提示,使用不方便;借助函数 SETEXITQQ 让程序自动处理。SETEXITQQ 函数用来设置 QuickWin Application 程序退出时的提示行为,为正确使用该函数,必须在程序中包含语句“USE IFQWIN”。函数语法为:USE IFQWIN integer(kind=4):exitm
14、ode,result result=SETEXITQQ(exitmode)exitmode=QWIN$EXITPROMPT为程序的默认情况;或=QWIN$EXITNOPERSIST时,编译运行后窗口出现后马上消失;或=QWIN$EXITPERSIST时,运行后窗口正常显示,没有任何提示信息。-6-将 SETEXITQQ 函数加入例 3-1,程序变为:#001!example 3-2#002 program main#003 USE IFQWIN#004 implicit none#005 integer(kind=4):results#006#007 write(*,*)hello world
15、!#008 results=SETEXITQQ(QWIN$EXITPERSIST)#009 end program main 运行程序,结果如图 3.4 所示。图 3.4 Example3-2 程序运行界面 此时,信息提示框不再出现,但是子窗口和框架主界面并不统一。为了程序界面的整体感,程序主界面打开的同时,程序子窗口应最大化。为此,程序需要调用函数SETWSIZEQQ 设置窗口的尺寸和位置,其语法为:USE IFQWIN integer(kind=4):result,unit type(qwinfo):winfo result=SETWSIZEQQ(unit,winfo)其中,unit为窗口
16、代号,如果要最大化子窗口,则unit为子窗口代号,如果要最大化主窗口,其值应为已定义的符号常量QWIN$FRAMEWINDOW。需要注意的是:如果程序中没有用Open语句显式打开子窗口,则默认子窗口的代号为0、5或6。Winfo是派生自用来存储窗口信息的qwinfo结构体变量,其结构如下:TYPE QWINFO INTEGER(2)TYPE !请求类型 INTEGER(2)X !窗口左上角的X坐标 INTEGER(2)Y !窗口左上角的Y坐标 INTEGER(2)H !窗口高度 INTEGER(2)W !窗口宽度 END TYPE QWINF 其中TYPE可能的取值为:Winfo%TYPE=Q
17、WIN$MIN时,最小化窗口;或=QWIN$MAX时,最大化窗口;或=QWIN$RESTORE时,恢复最小化窗口到之前的大小;-7-或=QWIN$SET时,根据Winfo中的其它值设定窗口的位置和大小。考虑到子窗口最大化,修改例 3-2,代码如下:#001!example 3-3#002 program main#003 USE IFQWIN#004 implicit none#005 integer(kind=4):results#006 type(qwinfo):winfo#007#008 winfo%type=QWIN$MAX#009 !最大化主窗口#010 results=SETWSI
18、ZEQQ(QWIN$FRAMEWINDOW,winfo)#011 !最大化子窗口#012 results=SETWSIZEQQ(0,winfo)#013 write(*,*)Hello World!#014 !取消提示信息#015 results=SETEXITQQ(QWIN$EXITPERSIST)#016 end program main 编译、运行上述程序代码,结果如图 3.5 所示。显然主窗口最大化的同时,子窗口也最大化了。图 3.5 Example3-3 程序运行界面 通过前面的代码,我们掌握了简单窗口程序的呈现方法。但是到目前为止,子窗口的黑色仍然让人难以忘却!为了改善视觉效果,我
19、们必须更改窗口的背景色。3-3 窗口和文本颜色 对于大多数搞工程的技术人员来说,数值计算本身难度较大,再加上只有黑白两种呈现色,那么程序开发的体验显然是很糟糕的。为了更好的呈现环境和视觉效果,程序开发中颜色的设置是必要的。Quickwin 工程中提供了多个颜色设置的函数,其中函数 SETBKCOLORRGB 用来更改窗口背景色。函数语法如下:USE IFQWIN integer(kind=4):color,result result=SETBKCOLORRGB(color)其中color是背景色,有两种方式来指定:其一是用十六进制数表达RGB分量,从左向右分别代表B、G、R,如“#FF0000
20、”代表蓝色,“#00FF00”代表绿色,“#0000FF”代表红色;其二是用函数RGBTOINTEGER将RGB分量值转换为代表相应颜色的整数,函数语法为:-8-USE IFQWIN integer(kind=4):color color=RGBTOINTEGER(255,0,0)改变例 3-3 中程序窗口的背景色,程序变为:#001!example 3-4#002 program main#003 USE IFQWIN#004 implicit none#005 integer(kind=4):results,color#006 type(qwinfo):winfo#007#008 colo
21、r=RGBTOINTEGER(125,120,0)#009 !目的是改变背景#010 results=SETBKCOLORRGB(color)#011 winfo%type=QWIN$MAX#012 !最大化主窗口#013 results=SETWSIZEQQ(QWIN$FRAMEWINDOW,winfo)#014 !最大化子窗口#015 results=SETWSIZEQQ(0,winfo)#016 write(*,*)hello world!#017 !取消提示信息#018 results=SETEXITQQ(QWIN$EXITPERSIST)#019 end program main 程
22、序中第 810 行代码的目的是修改窗口背景色。但是程序运行后,子窗口的背景色并没有发生变化,仅是文本所在范围的背景色发生了改变!情况如图 3.6 所示。图 3.6 Example3-4 程序运行界面 为解决这个问题,需要重新研究窗口背景色设置函数 SETBKCOLORRGB。其实,该函数并不能自动改变窗口的背景色,只有当调用子程序 CLEARSCREEN 或者有文本读写发生时,背景才会改变。参考下面例 3-5 的程序代码:#001!example 3-5#002 program main#003 USE IFQWIN#004 implicit none#005 integer(kind=4):
23、results,color#006 type(qwinfo):winfo#007#008 color=RGBTOINTEGER(125,120,0)#009 results=SETBKCOLORRGB(color)#010 !这样才能真正改变背景颜色#011 call CLEARSCREEN($GCLEARSCREEN)#012#013 winfo%type=QWIN$MAX -9-#014 !最大化主窗口#015 results=SETWSIZEQQ(QWIN$FRAMEWINDOW,winfo)#016 !最大化子窗口#017 results=SETWSIZEQQ(0,winfo)#018
24、 write(*,*)Hello World!#019 !取消提示信息#020 results=SETEXITQQ(QWIN$EXITPERSIST)end program main 运行程序,结果如图 3.7 所示,说明子窗口的背景色设置成功。例 3-5 中,程序 图 3.7 Example3-5 程序运行界面 第 9 行设置了窗口的背景色,但是没有改变背景色,而第 11 行代码才真正修改了窗口的背景色。其中子程序 CLEARSCREEN 的语法如下:USE IFQWIN integer(kind=4):area CALL CLEARSCREEN(area)其中,area=$GCLEARSC
25、REEN 时,用指定的颜色清除屏幕;或=$GVIEWPORT 时,用指定的颜色清除当前视口;或=$GWINDOW时,用指定色清除当前用SETTEXTWINDOW指定的文本窗口;需要特别注意的是:CLEARSCREEN 是子程序而非函数,所以在程序中调用时应注意和函数在调用形式上的不同。除了窗口的背景色,还有文本及图形的颜色设置。QuickWin Application 中,文本的颜色通过函数 SETTEXTCOLORRGB 来改变。该函数的语法为:USE IFQWIN integer(kind=4):color,result result=SETTEXTCOLORRGB(color)其中参数的
26、意义同 SETBKCOLORRGB 中。该函数只影响由文本输出函数OUTTEXT,WRITE 和 PRINT 产生的输出。在例 3-5 中加入改变文本颜色的代码:#001!example 3-6#002 program main#003 USE IFQWIN#004 implicit none#005 integer(kind=4):results,color#006 type(qwinfo):winfo#007#008 color=RGBTOINTEGER(125,125,125)#009 results=SETBKCOLORRGB(color)#010 !这样才能真正改变背景颜色#011
27、call CLEARSCREEN($GCLEARSCREEN)#012 -10-#013 winfo%type=QWIN$MAX#014 !最大化主窗口#015 results=SETWSIZEQQ(QWIN$FRAMEWINDOW,winfo)#016 !最大化子窗口#017 results=SETWSIZEQQ(0,winfo)#018#019 !改变输出文本的颜色#020 results=SETTEXTCOLORRGB(#00FF00)#021 write(*,*)Hello World!#022 !取消提示信息#023 results=SETEXITQQ(QWIN$EXITPERSIS
28、T)#024 end program main 程序运行结果如图 3.8 所示。图 3.8 Example3-6 程序运行界面 到目前为止,窗口中仅输出了最简单的文本,这对程序开发者而言,还远不够!因为在程序中除了大量的数值计算外,还可能涉及到复杂的文本和图形输出。为了便于文本和图形输出,我们将窗口看成两种不同类型的窗口的叠加:文本模式窗口 文本的输出以行和列为准;图形模式窗口 文本和图形的输出以坐标为准。默认情况下,这两种窗口是相互重叠的,窗口的裁剪区就是程序窗口中可输出部分的大小。有时为了输出需要,这两种窗口的大小也可以加以改变,具体方法留待后面讲述。关于如何利用这两种窗口,就是下面将要讨
29、论的话题。3-4 文本模式窗口 窗口程序设计中,程序设计者会关心窗口相关的属性,如窗口大小、字体样式、文字大小等。前面的程序中,如例 3-6,程序并没有赋予子窗口任何属性值,其中的子窗口为系统自动打开,此时,系统会赋予子窗口默认值。一般情况下,子窗口属性的默认值为:子窗口大小 系统自动获取最大像素值赋予子窗口,典型值为 1024 x768;文本行列值 默认情况下,子窗口中可输出 48 行 124 列文本;字体类型 默认为“Courier New”;字体大小 自动设为 8x16;可用的颜色 程序中可用的颜色由 PC 显卡决定。所以,在默认情况下,窗口中输出的文本字体为“Courier New”,
30、字高 16,字宽为 8,每一行只能输出 80 个字符,第 80 个以后的自动换行输出。-11-为了验证窗口的默认属性值,可借助于函数 GETWINDOWCONFIG 获取子窗口的相关特征。函数的语法和后面要讲到的 SETWINDOWCONFIG 函数类似,请读者自己查阅帮助。下面是获取窗口属性的例子。#001!example 3-7#002 program main#003 USE IFQWIN#004 implicit none#005 integer(kind=4):results,color#006 type(qwinfo):winfo#007 type(windowconfig):wc
31、#008 type(rccoord):curpos#009 logical(kind=4):status#010#011 !获取子窗口的属性#012 status=GETWINDOWCONFIG(wc)#013 !设置子窗口背景颜色#014 color=RGBTOINTEGER(125,125,125)#015 results=SETBKCOLORRGB(color)#016 call CLEARSCREEN($GCLEARSCREEN)#017 winfo%type=QWIN$MAX#018 !最大化主窗口#019 results=SETWSIZEQQ(QWIN$FRAMEWINDOW,wi
32、nfo)#020 !最大化子窗口#021 results=SETWSIZEQQ(0,winfo)#022 !设置文本颜色#023 results=SETTEXTCOLORRGB(#00FF00)#024 !输出窗口属性值#025 write(*,*)X 轴向像素为:,wc%numxpixels#026 write(*,*)Y 轴向像素为:,wc%numypixels#027 write(*,*)文本的列数为:,wc%numtextcols#028 write(*,*)文本的行数为:,wc%numtextrows#029 write(*,*)颜色索引数为:,wc%numcolors#030 wr
33、ite(*,*)字体的大小为:,wc%fontsize#031 write(*,*)窗口的标题为:,wc%title#032 write(*,*)#033 write(*,*)单位像素位数:,wc%bitsperpixel#034 write(*,*)滚动条的模式:,wc%mode#035 !取消提示信息#036 results=SETEXITQQ(QWIN$EXITPERSIST)#037 end program main 程序运行结果如图 3.9 所示。图 3.9 Example3-7 程序运行界面 -12-从上图看出,程序的实际运行结果和前面的表述并不相同。其实这是由于计算机硬件的差别造
34、成的,请读者自行测试。笔者使用的是 Compaq 宽屏笔记本,所以出现了上述结果。为了灵活使用子窗口,在文本和图形输出前需要调整窗口的属性值,这时用到的函数为 SETWINDOWCONFIG,语法如下:USE IFQWIN type(windowconfig):wc logical(kind=4):result result=SETWINDOWCONFIG(wc)其中wc是派生自windowconfig结构体的变量,保存了窗口的属性值。Windowconfig结构体定义如下:TYPE windowconfig INTEGER(2)numxpixels !X方向像素值 INTEGER(2)num
35、ypixels !Y方向像素值 INTEGER(2)numtextcols !文本行数 INTEGER(2)numtextrows !文本列数 INTEGER(2)numcolors !颜色索引数 INTEGER(4)fontsize !字体大小,如果指定了扩展字体,fontsize应该赋值为 QWIN$EXTENDFONT,此时由extendfontsize指定扩展字体的大小。CHARACTER(80)title !子窗口标题 INTEGER(2)bitsperpixel !单个像素的位数 INTEGER(2)mode !控制滚动条的滚动模式!下面的三个参数用来定制扩展字体 CHARACTE
36、R(32)extendfontname !字体名称 INTEGER(4)extendfontsize !字体大小 INTEGER(4)extendfontattributes !字体属性,如粗体、斜体等 END TYPE windowconfig 解决了文字的字体及大小问题后,还有文本输出的定位问题。系统提供了专门用于文本输出定位的子程序 SETTEXTPOSITION,它的作用是指定相对于文本窗口的文本输出位置,其语法为:USE IFQWIN integer(kind=2):row,column type(rccoord):t CALL SETTEXTPOSITION(row,column,
37、t)其中row为文本的行定位数;column为列定位数;t是输出变量,派生自rccoord结构体,用来保存之前的光标位置。其结构定义为:TYPE rccoord integer(kind=2):row -13-integer(kind=2):col END TYPE rccoord 下面是一个文本输出的例子,字体为隶书,大小为 16 x32,文本的输出位置在第 4 行第4 列。代码如下:#001 !example 3-8#002 program main#003 USE IFQWIN#004 implicit none#005 integer(kind=4):results,color#006
38、 type(qwinfo):winfo#007 type(windowconfig):wc#008 type(rccoord):t#009 logical(kind=4):status#010#011 wc%numxpixels=-1#012 wc%numypixels=-1#013 wc%numtextcols=-1#014 wc%numtextrows=-1#015 wc%numcolors=-1#016 wc%fontsize=QWIN$EXTENDFONT#017 wc%title=QuickWin 窗口C#018 wc%extendfontname=隶书C#019 wc%extend
39、fontsize=#000F001F#020 wc%extendfontattributes =ior(QWIN$EXTENDFONT_ITALIC, QWIN$EXTENDFONT_BOLD)#022 status=SETWINDOWCONFIG(wc)#023 if(status=.false.)then#024 status=MESSAGEBOXQQ(属性设置失败!系统调整中.C, Error C,MB$ICONEXCLAMATION.OR.MB$OK)#026 status=SETWINDOWCONFIG(wc)#027 end if#028#029 !设置背景颜色
40、#030 color=RGBTOINTEGER(125,125,125)#031 results=SETBKCOLORRGB(color)#032 call CLEARSCREEN($GCLEARSCREEN)#033#034 winfo%type=QWIN$MAX#035 !最大化主窗口#036 results=SETWSIZEQQ(QWIN$FRAMEWINDOW,winfo)#037 !最大化子窗口#038 results=SETWSIZEQQ(0,winfo)#039 !文本颜色#040 results=SETTEXTCOLORRGB(#00FF00)#041 write(*,*)中国
41、,你好!#042 !调整输出位置到第行第列#043 call SETTEXTPOSITION(4,4,t)#044 call OUTTEXT(世界,你好!)#045#046 !重新设置文本颜色#047 results=SETTEXTCOLORRGB(#FFFFFF)#048 write(*,*)#049 write(*,*)输出位置调整之前的光标在:#050 write(*,*)第,t%row,行;#051 write(*,*)第,t%col,列。-14-#052 !取消提示信息#053 results=SETEXITQQ(QWIN$EXITPERSIST)#054 end program m
42、ain 程序运行结果如图 3.10 所示。程序中出现了新函数和子程序,第一个为函数MESSAGEBOXQQ,用来显示信息提示窗口;第二个是子程序 OUTTEXT,用于向文本或者图形窗口输出字符串。相关的语法和用法请读者自己查阅帮助文档。需要注意:子程序 OUTTEXT 在输出时不会产生换行动作,这点跟 WRITE 不同。图 3.10 Example3-8 程序运行界面 3-5 图形模式窗口 子窗口既可看成文本模式窗口,此时文本的输出用行列定位,又能看成图形模式窗口,文本和图形的输出均以坐标定位。图形模式窗口中,为充分利用坐标定位带来的方便,文本的输出应调用子程序 OUTGTEXT,其语法如下:
43、USE IFQWIN character(len=*):text CALL OUTGTEXT(text)其中文本字符串要带双引号或者单引号。字体格式的设置方法和例 3-8 相同。如果要改变字体,则首先调用无参函数INITIALIZEFONTS()初始化操作系统中的字体,函数语法为:USE IFQWIN integer(kind=2):result result=INITIALIZEFONTS()其次,调用函数 SETFONT 指定字体及其大小:USE IFQWIN character(len=*):options integer(kind=2):result result=SETFONT(op
44、tions)其中options为表述字体特征的字符串。具体请参阅帮助文档。常见的形式为result=SETFONT(tArialh18w10),t表明后面紧跟的是字体名称,Arial为采用的字体,h18w10表示字宽为10,字高为18。由前面内容知,图形模式窗口中文本的输出用坐标定位,所以文本输出前,首先-15-应确定在哪个坐标位置输出。为了确定文本输出位置,需调用子程序 MOVETO 将画笔移至当前位置。如果您不理解该函数的用法,请把输出的文本理解为用画笔绘制的图形,输出文本就是绘图,所以首先应将画笔移动至目标位置,然后开始绘图,而子程序 MOVETO 就起到移动画笔的作用,其语法为:USE
45、 IFQWIN integer(kind=2):x,y type(xycoord):t CALL MOVETO(x,y,t)其中x和y是坐标,t是派生自结构体xycoord的变量,其中保存了视口中前一位置的坐标。其结构定义如下:TYPE xycoord integer(kind=2):xcoord integer(kind=2):ycoord END TYPE xycoord 图形模式中,需要注意:无参函数 INITIALIZEFONTS()和函数 SETFONT 只影响子程序 OUTGTEXT输出的文本的字体格式;OUTGTEXT 输出的文本颜色只能用函数 SETCOLORRGB 来改变。下
46、面是文本输出的例子。这个例子说明在子窗口中可用两种模式输出文本,其中图形模式下的输出方式具有较大的灵活性,同时说明了文本模式和图形模式之间的区别。源程序如下:#001 !example 3-9#002 program main#003 USE IFQWIN#004 implicit none#005 integer(kind=4):results,color,i#006 type(qwinfo):winfo#007 type(windowconfig):wc#008 type(rccoord):t#009 type(xycoord):wt#010 logical(kind=4):status#
47、011#012 wc%numxpixels=-1#013 wc%numypixels=-1#014 wc%numtextcols=-1#015 wc%numtextrows=-1#016 wc%numcolors=-1#017 wc%fontsize=QWIN$EXTENDFONT#018 wc%title=QuickWin 窗口C#019 wc%extendfontname=隶书C#020 wc%extendfontsize=#000F001F#021 wc%extendfontattributes =ior(QWIN$EXTENDFONT_ITALIC, QWIN$EXTENDF
48、ONT_BOLD)#023 status=SETWINDOWCONFIG(wc)#024 if(status=.false.)then#025 status=MESSAGEBOXQQ(属性设置失败!系统调整中.C, Error C,MB$ICONEXCLAMATION.OR.MB$OK)-16-#027 status=SETWINDOWCONFIG(wc)#028 end if#029#030 !设置背景颜色#031 color=RGBTOINTEGER(125,125,125)#032 results=SETBKCOLORRGB(color)#033 call CLEARSCREE
49、N($GCLEARSCREEN)#034 winfo%type=QWIN$MAX#035 !最大化主窗口#036 results=SETWSIZEQQ(QWIN$FRAMEWINDOW,winfo)#037 !最大化子窗口#038 results=SETWSIZEQQ(0,winfo)#039#040 !文本为绿色#041 results=SETTEXTCOLORRGB(#00FF00)#042 do i=4,7#043 call SETTEXTPOSITION(i,10,t)#044 write(*,*)北京欢迎你!#045 end do#046#047 !SETTEXTCOLORRGB没有
50、起作用#048 results=SETTEXTCOLORRGB(#FF0000)#049 do i=4,7#050 call MOVETO(300,100+i*40,wt)#051 call OUTGTEXT(北京欢迎你!)#052 end do#053#054 !SETCOLORRGB 才能影响OUTGTEXT输出的文本#055 results=SETCOLORRGB(#FF0000)#056 results=INITIALIZEFONTS()#057 results=SETFONT(t幼圆h18w10)#058 do i=4,7#059 call MOVETO(480,280+i*40,w