2.5 再描画のためのプログラミング技法

目次のページ; 前のページ; 次の章のページ

 Windowsの環境でのプログラミングにおいて特徴的なことの一つは、ウインドウ位置や寸法を変化させたときに、ウインドウの中身を正しく再表示させるため、再描画の機能を意識して計画しなければならないことです。ウインドウのプロパティにAutoRedrawがあって、システムの初期値はFalseになっています。AutoRedrawがどのような機能に影響するかは可成り微妙な面があって、処理しだいではプログラムの動作が不安定になります。

 Windowsのプログラムは、基本的にイベント起動型です。ユーザーがマウスでメニューバーやステイタスバーのパネルなどを選択することで意図的にイベントを発生させます。処理が或ルーチンに飛び込んだ場合、そのプログラム状態(ステイタス)を区別する番号を決めておいて、その番号に関連した画面を表示させるように計画します。ある状態から別の状態に移る制御は、主としてステイタスバーのパネルをクリックすることで行わせるようにしました。ある番号の状態にあって、臨時のイベントの起動は、主にメニューバーを選択することで行わせるようにしました。例えば、画面のコピーを取るとか、ヘルプの画面を表示させるなどです。ユーザーのインタフェースで発生するイベントの他に、システムがバックグラウンドで発生させるイベントもありますので、このイベントの競合を交通整理しなければなりません。しかし、この点のプログラミングに関しては経験の積み重ねが必要です。

 再描画をプログラムに組み込むときは、表示させたい画面単位を独立したプロシージャ単位にまとめ、何かのイベントが発生して画面に変更が生じたと判断したとき、そのプログラム状態の番号に該当するプロシージャを意図的呼んで書き直します。画面表示用のプロシージャ単位は、コンソールウインドウ用と、グラフィックスウインドウ用とが別のモジュールにまとめてあります。書き直しの場合、必ず画面の消去と対に計画をしないと、前に表示されていた文字や図形が残ります。画面の消去のメソッドはClsですが、壁紙のように背景に書き込まれる場合は、無地の背景を書き込む処理で消去しなければなりません。画面の寸法が小さくて、文字や図形の全体が表示できないとき、考えつく対策が二つあります。一つはスクロールの機能に頼ること、もう一つが画面の寸法に合わせて拡大または縮小して書き直すことです。スクロールの機能は、システム側で保証してくれるテキストボックスなどにしか利用できませんので、プログラミングでは、表示させたい中身を拡大または縮小して、ウインドウの寸法に合わせ再描画させるように工夫します。

 まず、標準となる画面の寸法を考えます。この場合、DOSの環境での画面設計を相似に再現することを意識します。標準のDOSのコンソールは640×480ピクセルの領域です。現在ではモニタの解像度が上がっていますが、この解像度のモニタでも全体が表示できるように図形と文字の寸法を考えます。ウインドウの画面ではタイトルバーやステイタスバーが上下に付きますので、NEC-PC98系の画面寸法の640×400ピクセル、アスペクト比で(1.6:1)または(1:0.625)の画面を相似に再現することを考えます。これは、N88-Basicで作成されたプログラム資産をVBに移植する場合のことも含みにしています。文字の高さは、行幅16ピクセルに納め、1画面の文字は、半角で80文字×25行以内に抑えます。グラフィックスの標準画面寸法の考え方も大体同じです。利用度の比較的高い寸法は、レポートに添付して判読できる程度の大きさです。

 コンソールウインドウとグラフィックスウインドウとは、共に専用のフォームにピクチャーボックスを載せ、そのピクチャーボックス上に上記の標準画面を割り付けます。ピクチャーボックスは、基準のアスペクト比を満たすようにして、台紙相当のフォームに左上を合わせて最大に接する様に寸法を決めます。これは、原理的にはウインドウ・ビューポート変換を行います。そうすると、フォームのアスペクト比との関係で、フォームの右か下に余白部分が残ります。左上にピクチャーボックスを詰める理由は、PrintFormメソッドでピクチャーボックスを印刷させるとき、印刷表示の欠けが起きないからです。

 一般にプログラムの動作は、何かの筋書きを考えます。VB_Graphicsは、主に例題プログラムを観察させることが目的です。プログラムが立ち上がったとき、コンソール画面に簡単な説明を表示させますが、基本的にはグラフィックスウインドウを最大化して種々のグラフィックスのバリエーションを楽しむことができます。種々の応用については、以下の章の各論にまとめました。


次の章のページ