TabControl や TreeView のオーナードローでちらつき防止

このTipsについて

 描画のちらつき防止にはダブルバッファを利用することが定番ですが、
 [[TabControl]] や [[TreeView]] のプロパティ DoubleBuffered は、セットしても効きません (MSDN にも明記)。
 自分でコードを書くか、Windows XP以降であれば
 拡張ウインドウスタイルとして WS_EX_COMPOSITED を追加することで対応可能。
 (※ただし、ウインドウスタイルに CS_OWNDC を指定しているウインドウでは無効。
  また、XPやVista以降のクラシックデスクトップ環境でうまくいかないネット記事あり)

サンプル

  1. ' 派生クラスでCreateParamsプロパティをオーバーライドして
  2. ' ウインドウクラスへ拡張プロパティを返す
  3. Public Class MyTabControl
  4. Inherits TabControl
  5. Private WS_EX_COMPOSITED As Integer = &H2000000
  6.  
  7. Protected Overrides ReadOnly Property CreateParams() As _
  8. System.Windows.Forms.CreateParams
  9. Get
  10. If Me.DesignMode Then
  11. Return MyBase.CreateParams
  12. End If
  13. Dim c As CreateParams
  14. c = MyBase.CreateParams
  15. c.ExStyle = c.ExStyle Or Me.WS_EX_COMPOSITED
  16. Return c
  17. End Get
  18. End Property
  19. End Class
  20.  
  21.  

外部リンク(感謝)

EternalWindows

@IT Insider.NET - TabControl(Page)上のコントロール再描画ちらつきを抑制したい

@IT Insider.NET - TreeViewのちらつき

MSDN Library - CreateParams プロパティ

タグ:

+ タグ編集
  • タグ:
最終更新:2013年01月30日 09:46