2012-08-30 4 views
2

일반 Gtk # 창 안의 다른 이미지 위에 투명도가있는 이미지를 만들어야합니다. 첫 번째 이미지는 마우스 클릭에 응답 할 수 있어야합니다.Gtk # EventBox를 투명하게 만드는 예

간단한 방법은 일반적으로 이미지를 EventBox 내부 및 창 내부에 넣는 것입니다. 그러나 EventBox는 기본적으로 투명하지 않으므로 PNG Image 자체에 투명한 영역이있는 경우에도 EventBox 내부에는 이미지 주위에 불투명 한 사각형 배경으로 표시됩니다.

나는 EventBox가 카이로을 사용하여 투명하게 만들 수 있지만, 지금까지 그렇게 할 수 없다는 것을 알고 있습니다.

누구나 짧은 C# 예제를 제공하여 EventBox를 투명하게 만들 수 있습니까?

+0

에 오신 것을 환영합니다! 이것은 프로그래밍 문제입니다. 주제는 여기에 있습니다. 스택 오버플로로 이동하기로 결정 했으므로 여기에도 질문을 작성할 필요가 없습니다. 수퍼 유저는 일반적인 컴퓨터 사용과 가정 환경에서의 문제 해결에 더 많은 반면 Stack Overflow는 프로그래밍 질문을위한 것입니다 –

+0

저는 임시 해결책으로 카이로를 사용하여 PNG 파일을 만들고 모든 투명한 이미지를 해당 PNG 파일에 '페인트'한 다음로드합니다 결과 PNG 파일을 다시 하나의 단일 이벤트 상자에 저장합니다. 원유이지만 작동합니다. 하지만 EventBox를 투명하게 만들어서 모든 이미지를 EventBox에로드하고 화면에 표시 할 수있는 확실한 솔루션을 고맙게 생각합니다. 누구 제안? – OM55

답변

2

... 내 자신의 질문에 대답 :

이 솔루션은 매우 간단하다, 내가 위젯을 다시 그려야하는 복잡한 코드를 찾고있는 동안 ... 필요로하는 모든 수행 할 이 EventBox를 설정하는 것입니다. VisibleWindow 멤버를 'false'로 설정합니다 (기본적으로 'true'). EventBox가 그려지지 않고, EventBox 안의 이미지가 투명한 영역을 가지고 있다면, 그들은 아래에 무엇이 있는지를 보여줄 것입니다.

아래 예제에서 :
mapBox.VisibleWindow = false;

pinBox.VisibleWindow = false;

내가 볼 수있는 한, 위젯이 화면 위쪽에있는 Z 순서 (EventBox가 그려지지 않은 경우 EventBox.GdkWindow.Lower) 또는 Raised() 멤버가 아무 것도하지 않음).

예 : 수퍼 유저

// Showing a map in an invisible EventBox 
EventBox mapBox = new EventBox(); 
mapBox.Visible = true; 
mapBox.VisibleWindow = false; 
fixed1.Add(mapBox); 
fixed1.Move (mapBox, 0, 0); 

Image mapImage = new Image("map.png"); 
mapImage.Visible = true; 
mapBox.Add (mapImage); 

// Showing a pin image with transparent areas, in an invisible EventBox, on top of the map 
EventBox pinBox = new EventBox(); 
pinBox.Visible = true; 
pinBox.VisibleWindow = false; 
fixed1.Add(pinBox); 
fixed1.Move (pinBox, 60, 60); 

Image pinImage = new Image("redpin.png"); 
pinImage.Visible = true; 
pinBox.Add (pinImage); 
+0

고마워요 :) pygtk 버전은'event_box.set_visible_window (False)'가 될 것입니다. – schlamar

관련 문제