스크롤할 때 Windows.Forms 사용자 정의 컨트롤에서 깜박임을 제거하는 방법은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/64272

  •  09-06-2019
  •  | 
  •  

문제

C#에서 사용자 지정 컨트롤을 만들고 싶습니다.그러나 컨트롤을 완전히 다시 그려야 할 때마다 이중 버퍼링(먼저 이미지를 그린 후 블릿팅)을 사용하더라도 컨트롤이 깜박입니다.

완전히 다시 그려야 할 때 깜박임을 어떻게 제거합니까?

도움이 되었습니까?

해결책

InitiliseComponent 호출 후 생성자에 다음을 넣을 수 있습니다.

SetStyle(ControlStyles.OptimizedDoubleBuffer | 
         ControlStyles.UserPaint |
         ControlStyles.AllPaintingInWmPaint, true);

편집하다:

이 작업을 수행하려면 가능하다면 자체 이중 버퍼링 코드를 제거하고 호출되는 적절한 가상 메서드에 대한 응답으로 컨트롤이 자체적으로 그려지도록 하십시오.

다른 팁

나는 이것을 작동하는 C# 프로그램에서 가져왔습니다.다른 포스터에는 구문 오류가 있으며 C# 대신 C++에서 명확하게 복사되었습니다.

SetStyle(ControlStyles.OptimizedDoubleBuffer | 
                        ControlStyles.UserPaint |
                        ControlStyles.AllPaintingInWmPaint, true);

그냥 전화해도 괜찮을 것 같아요

SetStyle(ControlStyles::UserPaint | ControlStyles::AllDrawingInWmPaint, true);

Windows가 먼저 (WM_ERASEBKGND를 통해) 컨트롤의 배경을 그린 다음 (WM_PAINT를 통해) 필요한 그리기 작업을 컨트롤에 요청하기 때문에 깜박이는 현상이 나타날 가능성이 높습니다.배경 페인트를 비활성화하고 OnPaint 재정의에서 모든 페인팅을 수행하면 이중 버퍼링에 필요한 모든 메모리를 사용할 필요 없이 99%의 경우 문제를 제거할 수 있습니다.

이중 버퍼링을 시도했지만 먼저 이미지에 그림을 그리고 그것을 블리팅한다고 말했습니다.이미지를 사용하여 직접 설정하는 대신 생성자에서 DoubleBuffered = true를 설정해 보셨나요?

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top