開発じたばた日誌

前へ●●●次へ
じたばた日誌目次へ戻る
TSUCHY Softへ戻る


Styx 素早い表示編

 私がまだBitBltの存在意義を知らなかった頃、Styxのボタンの表示はもたもたしたものでした。 Styxをクリックすると、ボタンのアイコンをパラパラと表示し直している(フリッカといいます)のがわかるのです。 いかにものろまでかっこわるいですね。 MSJによると一流のプログラマはフリッカなんぞを許してはいけないのです。

 私はこのチラチラをどうにかしたいと思い、原因を探りました。 ボタンを表示するときは、いったんスクリーンのボタンの部分を全部背景色に塗り、それからアイコンやボタンの枠、影を表示していました。 ここに問題があるのです。

 いったん背景色で塗りつぶすと、そのときなにも表示されていない状態がチラと見えるのです。 じゃあどうすればいいのでしょう??

 ここで互換性のあるデバイスコンテキストが活躍するのです。 全くこのデバイスコンテキストってなんでしょう。おまけに互換性のあるとは。英語の直訳ではないですか。

 私のイメージでは...BitBltという画像を転送する命令があり、これは最も高速に転送できる命令です。 で、どこからどこへ転送するのかというと、互換性のあるデバイスコンテキストからスクリーン(のデバイスコンテキスト) に転送するのです(ほかにもいろいろ使い道はありますが)。

 つまり互換性のあるデバイスコンテキストにしこしこ絵を表示します。この間はスクリーンはなにも変化しません。 絵を書き終わったらBitBltという命令で一気に絵を転送するのです。 すると人間の目には一瞬で絵が変化したことになりチラチラが発生しません。

 この理屈を理解して、これだぁぁぁとやってみたのですが、表示されるものは真っ黒な絵です。 何が悪いんだろう。調べてみるとBitBltの命令で失敗しているのがわかりました。

 本を調べた結果、互換性のあるデバイスコンテキストに互換性のあるビットマップを選択させないとだめなのです。 私はこの互換性のあるとはBitBltで転送できるという意味なんだなぁと 感じるようになりました。

 それにしてもなんて意地悪な!ヘルプにそんなこと書いてあったかい? 文で書けばたった1行だけど、ここにたどり着くまでに何時間かかったことか。