Intel® Fortran Compiler with Windows-Based Applications
Create Child Windows
The FILE='USER' option in the OPEN statement opens a child window. The child window defaults to a scrollable text window, 30 rows by 80 columns. You can open up to 40 child windows.
When a file OPEN that specifies FILE='USER' is issued for a program built with /libs:qwin (or /MW), special processing takes place to handle this as a graphics window. The user can then write and or read to this window by issuing READ and WRITE statements with the same unit number.
There are some APIs that manipulate the window via unit number, and others that manipulate it because focus has been set to that window. The FRTL automatically sets focus to the last window accessed. After an OPEN, READ, or WRITE to unit number, the focus is set to that window, and subsequent API calls, which sets the background color, work for this window.
Running a QuickWin application displays the frame window, but not the child window. You must call SETWINDOWCONFIG or execute an I/O statement or a graphics statement to display the child window. The window receives output by its unit number, as in:
OPEN (UNIT= 12, FILE= 'USER', TITLE= 'Product Matrix') WRITE (12, *) 'Enter matrix type: '
Child windows opened with FILE='USER' must be opened as sequential-access formatted files (the default). Other file specifications (direct-access, binary, or unformatted) result in run-time errors.
The following example creates three child windows. A frame window is automatically created. Text is written to each so the child windows are visible:
program testch use ifqwin open(11,file="user") write(11,*) "Hello 11" open(12,file="user") write(12,*) "Hello 12" open(13,file="user") write(13,*) "Hello 13" write(13,*) "Windows 11, 12, and 13 can be read and written with normal" write(13,*) "Fortran I/O statements. The size of each window on the screen" write(13,*) "can be modified by SETWSIZEQQ. The size of the virtual window" write(13,*) "(i.e., a data buffer) can be modified by SETWINDOWCONFIG." read(13,*) end
When this program is run, the output should look similar to this example:
Hello 13 Windows 11, 12, and 13 can be read and written with normal Fortran I/O statements. The size of each window on the screen can be modified with SETWSIZEQQ. The size of the virtual window (the data buffer) can be modified with SETWINDOWCONFIG.
To use the default graphics window, you should use units *, 5, or 6.
In the example below, if you comment out the open(7, … statement, and substitute the existing unit 7's with either *, or 6 for the WRITE value and 5 for the READ value, then the program should behave the same. API's like SETWSIZEQQ(7 , … should specify either 5 or 6, because * is not a valid integer. One issue with using a default graphics window is that you cannot change the title of it from the default title.
ifx /threads /Qsave /traceback /libs:qwin simple_example.f90
PROGRAM OneWindow USE IFQWIN USE DFMT USE DFLIB USE DFPORT type(windowconfig):: WIN_MainInput type(qwinfo) :: FrameSize, Win1Size integer(2) :: i2Status integer(4) :: i4Status,i4NumQ, i4Columns, i4LetterX, i4LetterY logical(4) :: L4Status character(1) :: c1YesNo i4LetterX=8 ! Height and width of the text font i4LetterY=16 ! ! Frame-Window as wide as screen but half the height ! i2Status=GETWSIZEQQ(QWIN$FRAMEWINDOW,QWIN$SIZEMAX,FrameSize) FrameSize.H=FrameSize.H/2 !! set window height 1/2 of max height FrameSize.W=FrameSize.W/3 !! set window width 1/3 of max width i2Status=SETWSIZEQQ(QWIN$FRAMEWINDOW,FrameSize) i4Columns=FrameSize.W/i4LetterX -1 ! number of possible columns in each window ! ! Input-window for Main part ! open(7, file='user',title="Main Input"C) Win_MainInput.title="Main Input"C !! in addition to OPEN, title can also be specified by setwindowconfig() Win_MainInput.numtextrows=INT((FrameSize.H-40)/i4LetterY) Win_MainInput.numtextcols=i4Columns Win_MainInput.fontsize=65536*i4LetterX+i4LetterY L4Status=setwindowconfig(Win_MainInput) i4Status=setbkcolorrgb(#FFFFFF) !! white background i4Status=settextcolorrgb(#000000) !! black text call clearscreen($GCLEARSCREEN) Win1Size.X=0 Win1Size.Y=0 Win1Size.H=INT((FrameSize.H-40)/i4LetterY) Win1Size.W=i4Columns Win1Size.type=QWIN$SET i4Status=setwsizeqq(7,Win1Size) write(7,'("This is the Main Input window.",/)') 10 write(7,'("Type Y or y to Terminate this program: ",\)') read(7,'(Q,A)') i4NumQ, c1YesNo if (i4NumQ /= 1) goto 10 if (c1YesNo == 'Y' .or. c1YesNo == 'y') goto 20 goto 10 20 continue END PROGRAM OneWindow