2014-11-19 3 views
0

큰 데이터 세트를 그래프로 표시하려고합니다. 불행히도 이것은 업데이트 중에 OnPaint()이 여러 번 호출되기 때문에 깜박임을 유발합니다. 그리고 동시에이 그래프를 지속적으로 업데이트 할 필요가 없습니다. 프로그램을로드 할 때 한 번만 충분합니다.OnVScroll에서 이미지 새로 고침

무언가가 업데이트 될 때마다 OnEraseBkgnd()을 대체하여 1을 반환하도록 해결하는 방법을 찾았습니다. 그러나 이것의 부작용은 수직 스크롤을 할 때 너무 멀리 스크롤하면이 그래프가 "잘 리게"됩니다.

스크롤을 다시 올리면 그래프가 다시 그려지 지 않습니다 (그래프를 다시 그리지 않으므로 OnPaint()에 더 이상 표시되지 않습니다).

본질적으로 내가 찾고있는 것은 스크롤보기로 인해 "잘린"경우에만 그래프를 다시 그리는 방법입니다.

감사합니다.

+3

그래픽을 오프 스크린 비트 맵 (메모리 DC)으로 렌더링 해 봅니다. 그런 식으로'WM_PAINT'에서해야 할 일은 화면에 blit하는 것뿐입니다. –

답변

0

MSDN에서 DRAWCLI라는 MFC 샘플은 이미지 스크롤을 포함하고 플리커를 제거하기 위해 오프 스크린 비트 맵을 사용하는 예제 프로그램입니다. 그것은 아주 잘 작동합니다.

0

조나단 포터 (Jonathan Potter)가 추천 한대로 메모리 DC가 좋습니다.

뷰가 유효하지 않은 경우 메시지 처리기는 OnPaint 처리기 함수에 WM_PAINT를 보내고 OnPaint 처리기 함수는 DC 개체를 만든 후 OnDraw 멤버 함수를 호출합니다.

OnDraw 기능에서 메모리 DC를 사용합니다.

메모리 DC의 멋진 코드 예제가 있는데, 이는 실제로 구현하기 쉽습니다. here.