LAST UPDATE 1998/08/01


『 その7-4 』


 ■ 実行する

 さっそく実行してみよう。「F5」キーを押して実行されたら、コマンドボタンをクリックする。すると斜めに赤い線が描画されたはずである。ではこの状態で、このフォームの上に別のウインドウを一度重ねて、再びこのフォームを上にしてみよう。するとせっかく描いた線が消えているか欠けているかしている。これは困ったものだである。それでは、Line命令の前後に次のようなコードを追加して実行してみよう。
    Pic.Cls
    Pic.AutoRedraw = True
    Pic.Line(0, 0) - _
    (Pic.ScaleWidth-1, Pic.ScaleHeight-1) , _
    &hFF&
    Pic.AutoRedraw = False
今度は消えないようになったはずである。 では次にLine命令の部分を次のように書き換えてみよう。
    Dim X&, Y&
    Pic.Cls
    Pic.AutoRedraw = True
    For Y = 0 To Pic.ScaleHeight - 1
     For X = 0 To Pic.ScaleWidth - 1
      Pic.PSet (X, Y), &HFF&
    Next X
    Next Y
    Pic.AutoRedraw = False
このプログラムを実行してみよう。ボタンをクリックした後、しばらくたってからピクチャーボックスが一気に赤になったはずである。それでは次にAutoRedrawを切り替えている部分をコメントにして再度実行してみよう。コメントは行の頭に「’」を書き込めば良い。
    'Pic.AutoRedraw = True
    For Y = 0 To Pic.ScaleHeight - 1
     For X = 0 To Pic.ScaleWidth - 1
      Pic.PSet (X, Y), &HFF&
     Next X
    Next Y
    'Pic.AutoRedraw = False
 今度は、ウインドウに書き込んでいる様子が見える。上から下へ向かってだんだん赤になっていくはず。

 ■ ウインドウの表示システム

 Windowsでは、当たり前の話であるが、ウインドウ同士が重なる事がある。クリックする事によって上に来たり下へいったりするが、上に来たときには、内部に表示されているものが欠けたり消えたりしていてはいけないに決まっている。しかし、パソコンの画面というものはあくまでも1枚であり、ウインドウが重なる事を考慮に入れて何層も持っているわけではない。ということはウインドウの上に別のウインドウが重なると、表示されているイメージの情報は消失してしまうのである。
 それでは困るということで、ピクチャーボックスに何かを描くと、実のことをいうとメモリ内部の見えない領域にイメージを作り、それを画面に転送しているのである。だから、ピクチャーボックスを作ると、同じ大きさでメモリ内にもう一枚同じ物が生成されるのである。
 AutoRedrawというのはどちらをアクセスするかのスイッチで、Trueの場合はメモリ内に描画を行ない、Falseの場合は画面に直接描画が行われるのである。ウインドウの上下関係がクリックなどによって変えられたり、VBのRefreshコマンドが実行されると、メモリから画面へイメージの転送が行われる。
 ということなので、Trueで描画するとウインドウの書き換えが起こってもイメージは残るが、描画の過程を見る事ができない。Falseで描画すると過程を見る事ができるものの、イメージは仮なので、一度隠れてしまうと消えたままになってしまうのである。
 このAutoRedrawというスイッチは、ピクチャーボックスの内容を調べるPointという命令でも有効なので、書き込んだときの状態と同じ状態でこの命令を実行しないと、正しい答えが得られなかったりするので注意が必要なのだ。







その7-1 | その7-2 | その7-3 | その7-4 | その7-5 | その7-6

『 サルのゲーム製作講座 』 目次 | その 1 | その 2 | その 3 | その 4 |
その 5 | その 6 | その 7 | その 8 | その 9 | その 10 | その 11


もどる

e-mail: sc_3da@magical2.egg.or.jp