ワープロやドローイングソフトなどの編集ソフトを作る上での一般的な考え方を考える「一般的な編集ソフトの作り方」です。
ここでは、主に、
・メモリ上に、要素をもつ
・イベント発生時の動き
・画面の構成
ということで、現在、「イベント発生時の動き」をやっています。
その機能には、
・印刷
・保存
・読み込み
・カット(切り取り)
・ペースト(貼り込み)
・プロパティ(属性設定・変更)
・表示
・要素の選択
・(要素の)移動
で、今日は表示についてやります
■表示、再表示のイベントと手順
表示、再表示のイベントは、
・初めに表示するとき
・プロパティの変更、カット、ペーストなどで、再描画の必要がある
・ウィンドウの再描画、スクロールなどによる、再描画処理
とあります。これらのイベントが起きたら、
(1)背景を再描画します=つまり、現在の状況を消します
・場合によっては消しません、また、消す範囲が問題です
→ウィンドウ全体を消すとは限りません。変更箇所のみで十分です
(2)描画順に従い、描画していきます。
親から子へ描画するか、子から親へ描画するかは、
モノによって違います。
(3)もし、ここで書いた方法で、クリックされたとこをを知る場合、
IDによるRGB値を求めて、それで色を塗ります。
(4)ダブルバッファリングの場合、ここで、DISPLAY処理をして
表示します
■表示の問題-表示順の問題と表示範囲
印刷のときに書いたように、表示順の問題は、表示でも起こります。
そのほかに表示範囲の問題があります。ウィンドウの場合、一部しか表示できないので、画面全体を表示するのでなく、一部分だけ表示することになります。
とくに、スクロールされた場合、その部分を迅速に表示したいわけです。
そこで、ウィンドウに関係なく、表示部分全体のグラフィックコンテキストをバッファとして持っていて、実際に表示するときには、表示範囲をそのバッファグラフィックコンテキストからコピーする(BitBltする)っていうのがいいかもしれません。これなら、表示範囲を意識しないで、項目は、表示できるし、スクロールなどは、バッファのコピーをしなおすだけでOKです。
■記述される場所
イベントが発生するところはmodelクラス、そこから、各Itemのprintメソッドを呼び出すことになります。各Itemのprintメソッドでは、
・自分の表示(グラフィックコンテキストへの描画)
・子供のprintを呼び出す
を行います。(どっちが先は、わからない)
ということで、今回も簡単ですが、表示おわり