- - PR -
描画時のちらつき抑制について
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-12-12 16:08
結果報告です。
WM_SETREDRAW LockWindowUpdate SuspendLayout→ResumeLayout Invalidate→Update 上記4つをVisible変更処理の前後に記述して 試してみましたがやはりパラパラと表示されてしまいました。 描画は止められるのですが、再開後に描画が終わっているワケではなく 停止しているものが再開されるので結局パラパラと表示されてしまいます。 しましまさんの言うように正攻法での解決は難しいんですかね。 独自のコントロールを作るというのは出来るだけ避けたいです。 もう少し色々調べてみます。 みなさま情報ありがとうございました。 | ||||||||
|
投稿日時: 2006-12-12 19:36
唄さん、こんばんは。
↓以前、似たような話がありました。 http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=8950&forum=7&start=8 | ||||||||
|
投稿日時: 2006-12-13 11:23
わたくしも、どうしてもちらつきを無くした描画を行いたいため、現在 WPF を使う方法を検討しています。
ここで紹介されているコードでは、画面のプロパティーで Windows XP スタイルが選択されている場合に 描画が無限Loopしたり、Windows Vistaではボタンの廻りに黒っぽい領域が残った現象が発生しました。(描画の順番を無理やり「フォーム」→「ボタン」から「ボタン」→「フォーム」の順番に行ったことが原因でしょう。またすべてのボタンの描画終了タイミングを検出する方法も問題があります。) 一度は、独自コンポーネントを作って半透明&重ね合わせの可能なボタン・ラベルを作成したのですが、コンポーネントが自動で行ってくれる領域判定や、イベント処理を独自に実装しないと、使い勝手の良いコントロールにはならず、メンテナンス性が良くなかったので、結局採用しませんでした。 業務アプリケーション等で、画面のデザインが重視されない場合にはボタンのちらつきは我慢してもらって、見た目が重要視されるアプリケーションでは WPF を利用するのがいい案かと思います。 ひとつのアプリケーションの中で、Windows From と WPF フォームの相互運用もできそうなので必要に応じて使い分けるとよいかもしれません。 参考URL Windows Presentation Foundation ガイド ツアー http://www.microsoft.com/japan/msdn/windowsvista/general/wpf101.aspx | ||||||||
|
投稿日時: 2006-12-13 12:14
と、いうような事がありますので、
| ||||||||
|
投稿日時: 2006-12-13 13:35
私も、きくちゃん さんの提示された方法でちらつきが防止されるなら・・と思って試してみたのですが、その結果 うまくいかなかった点を報告しただけで・・。
これは、コーディングの仕方で回避できかもしれませんが、Windowsのメッセージループの処理中に別のWindowsメッセージを処理する事になり安定してどんな場合でも動作させえるコーディングは難易度が高いと感じました。
Vista で実行すると なぜか、ボタンの周りに黒っぽい縁が残りました、マウスを上に持っていくと黒い縁が消えるので、Paint処理の中で Application.DoEvents を呼び出した事が原因で、予期しない順番でWindowsメッセージが呼ばれたために発生した現象だと思いました。 以上 参考まで | ||||||||
|
投稿日時: 2006-12-13 20:56
k_kazuさん、こんばんは。
ああ、済みません、別に絡んでいるわけではありません。 そのまま使わないでね、という事を念押ししたかっただけです。 と、いうわけで取り敢えず元のサンプルは若干、修正しました。 (が、あくまでもサンプルはサンプルという事で、どーかひとつ)
Vista の方については、Orcas がリリースされた後にでも試してみたいと思います。 |