2010-03-16 6 views
0

Windows 폼 프로젝트에서 작업하고 UserControl Double Buffering 일부 문제가 있습니다. 나는 usercontrol을 만들고 배경 이미지를 가지고있다. 그 위에 나는 라디오 버튼과 라벨이 거의 없다. 라디오 버튼과 라벨은 모두 투명 배경을 색상으로 사용합니다. 그러나 사용자 정의 컨트롤을 표시하거나 숨길 때 투명 배경이있는 레이블 및 라디오 단추에서 깜박임을 볼 수 있습니다.레이블 backgrond WinForms 사용자 정의 컨트롤에서 flicking 배경 이미지를 사용할 수 있습니다.

그리고이 사용자 컨트롤을 두 번 버퍼를 사용하려면 InitializeComponent를() 후

Me.SetStyle(ControlStyles.DoubleBuffer _ 
Or ControlStyles.AllPaintingInWmPaint _ 
Or ControlStyles.UserPaint _ 
Or ControlStyles.SupportsTransparentBackColor, _ 
True) 

을 시도했지만 작동하지 않는 것 같습니다.

답변

3

이중 버퍼링으로 해결할 수있는 깜박임 소스가 아닙니다. UC가 자체적으로 다시 칠하면 배경 이미지가 그려지며 컨트롤이있는 부분에 구멍이 생깁니다. 컨트롤은 각각 스스로 페인트를하여 UC가 배경 픽셀을 생성하기 위해 다시 그려 지도록 요구 한 다음 구멍을 채우고 맨 위에 그립니다. 임시 구멍은 깜박임으로 보는 것입니다.

UC가 컨트롤의 클라이언트 영역에 자신을 그려서 배경이 올바르게 설정되도록하면 불쾌감을 덜 줄 수 있습니다. UserControl을 클래스에이 코드를 붙여 넣기 :

protected override CreateParams CreateParams { 
    get { 
    var parms = base.CreateParams; 
    parms.Style &= ~0x02000000; // Turn off WS_CLIPCHILDREN 
    return parms; 
    } 
} 

이 더 빨리 도장을하지 않고 부작용이있을 수 있습니다. 그래도 문제가 해결되지 않으면 BackgroundImage를 더 빨리 그려야합니다. 재사용하지 않고 그릴 수 있도록 사용자 정의 컨트롤의 클라이언트 크기로 미리 조정합니다. 비트 맵에 PixelFormat.Format32bppPArgb 형식을 사용하면 대부분의 비디오 어댑터에서 다른 형식보다 약 10 배 빠릅니다.

+0

이것은 내 prolem을 해결했습니다. 감사합니다. – user294720