MFCとWin32の話です。
TreeViewやListViewに多くのアイテムを追加したり、アイテムを全部削除する場合、結構時間がかかります。どうもこれは一個足したり消したりする毎に描画処理が走ってる様なので、SetRedrawを使ってこの描画を抑えることにより、処理が高速化し、ちらつきも抑えられます。
サンプルプログラム(ツリービューのアイテムを全部削除)
1 2 3 |
SetRedraw(FALSE); GetTreeCtrl().DeleteAllItems(); SetRedraw(TRUE); |
Win32APIの場合はWM_SETREDRAWを使います。
1 2 3 |
SendMessage(WM_SETREDRAW, FALSE, 0); GetTreeCtrl().DeleteAllItems(); SendMessage(WM_SETREDRAW, TRUE, 0); |
実際にコードを書く場合は、SetRedraw(FALSE)を呼んだあとはSetRedraw(TRUE)が必ず呼ばれるようにしたほうがいいかもしれません。また、処理が終わったら以下のようにウインドウを再描画したほうがいいかもしれません。
1 2 |
Invalidate(); UpdateWindow(); |