2011-07-26 3 views
0

작성중인 사용자 지정 컨트롤은 클라이언트 공간에 많은 "항목"을 그릴 필요가 있습니다. Invalidate()를 호출하면 모든 항목이 다시 그려지는 새로운 페인트주기가 트리거됩니다.사용자 지정 컨트롤의 페인트 및 무효화 메커니즘

이제 많은 항목이 있고 컨트롤 내에서 많은 탐색이 발생하면 상황을 최적화해야합니다. 그래서 하나 또는 두 개의 항목 만 그려지는 페인트 사이클을 트리거해야합니다. 페인트 방법 (OnPaint)이 "빠르다"라는 것을 알 수 있도록 이러한 항목에 대한 참조를 저장합니다.

OnPaint를 실행하면 그 동안에 다른 Invalidate() 호출이 있었는지 알기가 어렵습니다. 이 경우 "정상적인"페인트를 완성해야합니다.

클립 사각형을 사용합니다. 물론 OnPaint의 클립 사각형이 Invalidate()가 호출 된 클라이언트 직사각형 전체가되었지만 이것이 100 % 안전하지는 않은지 확인할 수 있습니다. 나는 다른 유사한 해결책을 생각했다. 그러나 그들은 해커처럼 보인다.

이 문제는 일반적으로 또는 최선의 방법은 무엇입니까?

답변

관련 문제