画面の操作

目次


[目次] [はじめに] [入門] [基本] [高度] [画面] [困った] [おわりに]

画面のオープンとクローズ

QuickWin で新しい画面を作成するためには OPEN 文を使います。

      OPEN(10, FILE='USER', TITLE='This is a title.')

ここでポイントは FILE オプションです。 ファイル名として 'USER' を与えると、 通常のファイルでなく QuickWin の新しい画面が開かれます。 そして TITLE オプションによって指定された文字列が 画面上部に表示されます。 装置番号は通常のファイルの場合と同様、 5 と 6 以外の任意の正の整数が使用できます。

新しい画面が開かれると同時に その画面がアクティブになります。 そのため、それ以降の描画命令は その最新の画面に描かれることになります。 アクティブな画面を切り替える方法については 後述します。 また、その画面に文字を出力したい場合は次のようにします。

      WRITE(10, 600)
  600 FORMAT('この文字は新しい画面に表示されます')

さて、もうその画面が不要になった場合は閉じてしまいましょう。

      CLOSE(10)
      CLOSE(10, STATUS='KEEP')

前者の場合、装置番号 10 番の画面が使用できなくなり、 その画面が完全に消滅します。 後者の場合、装置番号 10 番の画面が使用できなくなりますが、 その画面は消えずに表示されたままとなり、 閉じられたことを示す Closed という表示が 画面上部のタイトルに追加されます。

画面の切り替え

アクティブな画面の切り替え

アクティブな画面とは、 描画命令の結果が出力される画面のことです。 アクティブな画面が必ずしもフォーカスを持つとは限りません。

アクティブな画面を切り替えたい場合は、 その画面の装置番号を引数として 次のルーチンを呼びます。 result に返される値は、 成功のとき 1、失敗の時 0 となります。

      integer*4 result
      result = SETACTIVEQQ(10)

新しい画面を OPEN した場合、 その画面が自動的にアクティブになります。 また、WRITE 文によって文字または数値が出力された場合にも その画面が自動的にアクティブとなります。

フォーカスを持つ画面の切り替え

フォーカスを持つ画面とは、 最も上面に存在するタイトルバーの青い画面のことです。 フォーカスを持つ画面が必ずしもアクティブであるとは限りません。

画面のフォーカスを切り替えたい場合は、 その画面の装置番号を引数として 次のルーチンを呼びます。 result に返される値は、 成功のときは 0、失敗の時は 0 以外となります。

      integer*4 result
      result = FOCUSQQ(10)

SETACTIVEQQ と FOCUSQQ とで、 似たような機能の関数にも関わらず戻り値の意味が正反対です。 マニュアルの説明に出てくる変数名も、一方は result、 もう一方は status でした。 Microsoft って会社は何を考えているのでしょうか。 良い子のみんなは真似しちゃいけませんよ。

画面サイズの設定

画面サイズの設定

      type (QWINFO) winfo
      integer*4 result
      open(10, file='USER', title='This is a cild window.')
      winfo.H = 100
      winfo.W = 200
      result = SETWSIZEQQ(10, winfo)

画面のサイズは SETWSIZEQQ に装置番号と画面情報を与えることで設定します。 result には成功の時は 0、失敗の時は 0 以外が返されます。

画面サイズの読み込み

      integer*4 ireq
      type (QWINFO) winfo
      integer*4 result
      open(10, file='USER', title='This is a cild window.')
      ireq = QWIN$SIZECURR
      result = GETWSIZEQQ(10, ireq, winfo)
      write(*,*) 'Window size is ', winfo.W, ' by ', winfo.H

画面のサイズは GETWSIZEQQ に装置番号とリクエスト ireq、そして結果を格納する winfo を与えることで取得します。 result には成功の時は 0、失敗の時は 0 以外が返されます。 ireq には、現在の画面サイズを取得する時は QWIN$SIZECURR、 最大のサイズを取得する時は QWIN$SIZEMAX を与えます。

画面の位置の設定

      winf.X = 0
      winf.Y = 20
      result = SETWSIZEQQ(10, winfo)

実は、SETWSIZEQQ は画面の大きさと同時に位置も指定することが可能です。 同様に、GETWSIZEQQ も画面の位置を読み込むことが可能です。 位置の基準は画面の左上の角となります。


[目次] [はじめに] [入門] [基本] [高度] [画面] [困った] [おわりに]

[作者ホームへ] [水工学研究室へ] [防衛大学校へ]

多田 毅 / 防衛大学校土木工学教室
tada@cc.nda.ac.jp