WinForms는 사용자 정의 컨트롤의 투명도에 적합하지 않지만 가능합니다. 여기 this article을 참조하십시오. 이 기사에서 저자는 UserControl이 아니라 Panel에서 파생되고 OnPaintBackground 메서드를 재정 의하여 아무것도 수행하지 말 것을 제안합니다. 이렇게하면 배경이 그려지지 않습니다.
protected override void OnPaintBackground(PaintEventArgs pevent)
{
//do nothing
}
protected override void OnMove(EventArgs e)
{
RecreateHandle();
}
// Override the CreateParams property:
protected override CreateParams CreateParams
{
get
{
CreateParams cp = base.CreateParams;
cp.ExStyle = 0x00000020; //WS_EX_TRANSPARENT
return cp;
}
}
마지막으로 OnPaint 함수를 재정 의하여 그림 상자를 그릴 수 있습니다. 당신이 실시간으로 화면을 이동하는 경우가 깜박임과 흐림을 얻을 것이다주의 있지만
protected override void OnPaint(PaintEventArgs e)
{
Graphics g = e.Graphics;
//Do your drawing here
}
, 투명도와 사용자 정의에 PictureBox를 만들 수 있습니다이 사용.
이와 비슷한 기술을 사용하여 우리는 WinForms 앱 (Premex XPort)을 사용하여 웹 사이트에 유사한 브랜딩을 렌더링했습니다. 여러 개의 투명한 컨트롤, 그림 그리기 및 모든 종류의 디스플레이가 올바르게 표시되도록했습니다.
결론적으로 Winforms가이 작업을 제대로 수행하지 못하는 이유는 Win32 기반 기술에서 한 컨트롤이 화면의 한 픽셀을 소유하기 때문입니다. HTML 또는 WPF에서 예상하는 것처럼 투명도가있는 픽셀을 실제로 합성 할 수있는 방법은 없습니다. 나중의 Windows 기술 (WPF)은이 작업을 특히 잘 수행하므로 앱에서 투명도를 많이 사용하고자한다면 적어도이 플랫폼으로 이동하는 것이 좋습니다 (WPF는 WinForms 내에서 호스팅 될 수 있으며 그 반대의 경우도 가능).
감사합니다.
GIF를 투명도가 설정된 PNG로 바꾸면 어떻게됩니까? – ChrisF
GIF 이전에 PNG를 시도했지만, 불행하게도 똑같은 시나리오. –
'note.Invalidate();'를 호출 한 후 이동하면 도움이됩니까? 또는'panel.Invalidate();'? – LarsTech