2011-08-19 2 views
0

내 winform의 그림 상자에 십자선을 표시하는 PNG 파일이 있습니다. 다른 작은 그림 상자 (녹색 점)와 레이블이 들어있는 사용자 정의 컨트롤을 만들었습니다.그림 상자에 배치 할 투명 컨트롤

내가 원하는 것은 도트와 레이블 만 보이도록 그림 상자 위에 사용자 정의 컨트롤을 배치하는 것입니다. 컨트롤의 사각형 모서리가 보이지 않습니다.

도트는 png가 실제로 사각형이므로 투명도 키를 흰색으로 설정하려고 했으므로 흰색 모서리가 있지만 그림 상자에 컨트롤을 추가하면 흰색 인 모든 것이 투명 해집니다.

색상으로 내 점의 가장자리 주위를 색칠하면 투명도 키와 일치시킬 수 있다고 생각했지만 색상은 정확해야합니다 (오른쪽?). 그림의 유일한 방법은 다음과 같습니다. 윈도우 페인트, 그래서 색상을 일치하는 경우 알 수 없습니다. 어떤 도움이 필요합니까?

답변

0

실행중인 문제는 WinForms 컨트롤이 실제 투명도를 지원하지 않는다는 것이며, 그렇게하는 것은 조금 까다 롭습니다. 그들이하는 일은 (투명도가 SetStyle을 통해 가능할 때) 자식 컨트롤을 스스로 칠하는 것이지만, 이것은 고유 한 단점이 있습니다. 당신이,

public MyTransparentControl() 
{ 
    SetStyle(ControlStyles.SupportsTransparentBackColor |  
       ControlStyles.AllPaintingInWmPaint | 
       ControlStyles.UserPaint, true); 

    BackColor = Color.Transparent; 
} 

를 다른 방법으로 : 먼저이 같은 시도해야합니다 :이 방법은 다음보다 더 신뢰할 수 발견

// in your custom control class... 
protected override CreateParams CreateParams 
{ 
    get 
    { 
     CreateParams cp = base.CreateParams; 
     cp.ExStyle |= 0x00000020; //WS_EX_TRANSPARENT 

     return cp; 
    } 
} 

,하지만 당신은뿐만 아니라이 시도해야 WinForms 대신 WPF를 사용하여 고려? 항상 이것이 옵션은 아니지만, WPF 컨트롤이 투명성을 지원하고 상자에서 레이어를 제어 할 수 있기 때문에 삶이 훨씬 쉬워집니다.

+0

부모 대화 상자의 투명성 키에 대해 걱정해야합니까? 첫 번째 예제는 두 번째 예제보다 조금 더 잘 작동합니다. 레이블의 배경과 내 컨트롤의 그림 상자는 여전히 거기에 있습니다. 나머지 컨트롤은 보이지 않습니다. 그 예가 그 물건들로 확장 될 수 있습니까? – Jason

+0

@ Jason :이 메서드를 사용하여'TransparencyKey'에 대해 걱정할 필요가 없습니다. "투명"배경을 가져야하는 모든 컨트롤에 대해 동일한 작업을 수행해야합니다. 이것은 자신의 Label 클래스를 파생시키는 것을 의미합니다. 그러나 레이블 (SetStyle은 공용 메서드 임)의 두 번째 예제를 사용하고 주 오버레이 컨트롤의 첫 번째 예제를 사용하면 충분할 수 있습니다. –

관련 문제