エディットボックスと「クリップ」について。

ActiveBasicでのプログラミングでわからないこと、困ったことなどがあったら、ここで質問してみましょう(質問を行う場合は、過去ログやWeb上であらかじめ問題を整理するようにしましょう☆)。
返信する
メッセージ
作成者
jacoby
記事: 106
登録日時: 2006年6月02日(金) 18:20

エディットボックスと「クリップ」について。

#1 投稿記事 by jacoby »

 ヘルプセンターの「テキストエディタを作る」で説明されているサンプルのように、
ウインドウにエディットボックスを一つ貼り付けて、
リサイズ・イベントでその大きさを調整して表示するプログラムを下の様に
書きました。
(AB 4.24/プロジェクト名「EditBoxTest_Flickering」で製作。)
 それからウインドウサイズの変更等に伴う、エディットボックスのちらつきを
防ごうと、メインウインドウの「子ウインドウをクリップ」にチェックを入れたのですが、
そうすると以降、ウインドウの初期表示時に
エディットボックスの枠線やエディットボックスのスクロールバーなどの部分が
描画されなくなってしまいました。

 リサイズ・イベントの最後に「UpdateWindow」命令など、再描画出来そうな
命令を書いてみたりもしたのですが表示されず、
 改めてサイズを変更したり、他のウインドウの下に敷いてからもう一度手前に
もってくるなりでもしないとそれらは再描画されないようです。
「子ウインドウをクリップ」にチェックを入れなければ問題ないのですが、
それだと何かにつけてちらつきが残ります。

「子ウインドウをクリップ」にチェックを入れて、エディットボックスを正しく表示
するにはどうしたら良いでしょうか?

 (AB 4.24/WinMe)
jacoby
記事: 106
登録日時: 2006年6月02日(金) 18:20

ちらつきを解消するには?

#2 投稿記事 by jacoby »

 上の質問を整理しようと、今までActiveBasicのプロジェクトで
自分が作成したプログラムを見直していたのですが、
どうもどのプログラムにおいても"リサイズ"の時に
ウインドウがちらつく現象が起こっています。
今回はそれを直そうとテキストエディタにて「子ウインドウをクリップ」に
チェックを入れてみて上記のような問題にあたったのですが、
ただし仮に「子ウインドウをクリップ」でちらつきが解決したとしても、
テキストエディタのような「子ウインドウ」を持たない他のプログラムでは
リサイズ時のちらつきの問題は残るままだろうと思います。

 これらのリサイズ時のちらつきをよく見てみるとどうも
そのウインドウの更新領域全体を「背景色」で一度塗りつぶしている
ように思えます。丁度「InvalidateRect」で"bErase"パラメータを
"TRUE"に設定した時の再描画のように。

 自分のプログラム内のリサイズ・イベントにはInvalidateRect等の
再描画要求を出す命令は無く、CallBack.wbpの中のResizeメッセージを
受け取る箇所にもそういった更新関係の命令を見つけることが出来ませんでした。

 ただしプログラムが何らかの方法で画面を更新しているのは
間違いない筈だと思いますし、他のアプリや、あるいはそもそもABの
ProjectEditorのテキストエディットウインドウ自体、リサイズ時のちらつきが
無いことを考えれば、このちらつきはどうにかすれば直るのでは
ないかと思っています。

 方法をお知りの方がおられましたら、是非教えて下さい。

(AB 4.24/Win Me)

 
返信する