Intel® Fortran Compiler with Windows-Based Applications

ID 757211
Date 6/30/2025
Public
Document Table of Contents

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