오늘 겪은 황당한 사건입니다.
폼을 겹치게 해 놓고 위에 오는 폼은 투명하게 해 두었습니다.
위에 오는 폼은 아주 작은 버튼만 가지고 투명하게 숨어 있다가 마우스가 그 위로 지나가면 짠! 하고 나타나도록 설계를 했습니다.
코딩은 XP에서 했죠...
Windows XP 에서는 투명하게 만든 폼(TransparencyKey, Opacity) 위에서는 이벤트가 작동하지 않습니다. 둘 중 어떤 방법을 써도 말이죠
(저는 TransparencyKey를 사용했습니다.)
그래서 배경이 되는 폼에 MouseMove이벤트를 만들어서 위에 오는 폼의 영역에 왔는지 체크를 하도록 했지요
그렇게 잘 만들어서 노트북에서 돌려 봤습니다. (노트북은 Vista)
그랬더니... 어라? 안됩니다 ㅡㅡ;
다시 XP 에서 하니까 또 됩니다..
심각한 상황에 이르렀죠.. 과연 왜 두 개가 다르게 동작할까? .NET Framework는 플랫폼 프리 아닌가? 라는 생각도 들고요
혹시 내가 사용한 함수가 Vista와 XP에서 다르게 동작하나? 하고 MSDN문서를 뒤져봐도 그런 기술은 안 되어 있습니다.
한참을 함수가지고 씨름하다가 알아낸 사실은 Windows Vista에서는 투명한 폼에서도 마우스 이벤트를 받는다는 것!
결 국은 Vista용 코드와 XP용 코드가 따로 들어갔죠. 겉보기엔 똑같은 동작을 하게 만들었지만 내부 구조를 보면 참 지저분 하다는 생각이 듭니다. 일단은 이렇게 처리하고 넘어갔지만, MouseMove이벤트만 그런 것인지 다른 이벤트들도 그렇게 작동하는지는 실험을 해 봐야 알 수 있겠네요. 이것과 관련된 기술문서가 있다면 좋겠지만 지금 이것 저것 하는게 많아서 막 실험해 보거나 찾아보거나 할만한 여유는 없군요~
이거 혹시 Framework의 버그일까요? ㅡㅡ;
폼을 겹치게 해 놓고 위에 오는 폼은 투명하게 해 두었습니다.
위에 오는 폼은 아주 작은 버튼만 가지고 투명하게 숨어 있다가 마우스가 그 위로 지나가면 짠! 하고 나타나도록 설계를 했습니다.
코딩은 XP에서 했죠...
Windows XP 에서는 투명하게 만든 폼(TransparencyKey, Opacity) 위에서는 이벤트가 작동하지 않습니다. 둘 중 어떤 방법을 써도 말이죠
(저는 TransparencyKey를 사용했습니다.)
그래서 배경이 되는 폼에 MouseMove이벤트를 만들어서 위에 오는 폼의 영역에 왔는지 체크를 하도록 했지요
그렇게 잘 만들어서 노트북에서 돌려 봤습니다. (노트북은 Vista)
그랬더니... 어라? 안됩니다 ㅡㅡ;
다시 XP 에서 하니까 또 됩니다..
심각한 상황에 이르렀죠.. 과연 왜 두 개가 다르게 동작할까? .NET Framework는 플랫폼 프리 아닌가? 라는 생각도 들고요
혹시 내가 사용한 함수가 Vista와 XP에서 다르게 동작하나? 하고 MSDN문서를 뒤져봐도 그런 기술은 안 되어 있습니다.
한참을 함수가지고 씨름하다가 알아낸 사실은 Windows Vista에서는 투명한 폼에서도 마우스 이벤트를 받는다는 것!
결 국은 Vista용 코드와 XP용 코드가 따로 들어갔죠. 겉보기엔 똑같은 동작을 하게 만들었지만 내부 구조를 보면 참 지저분 하다는 생각이 듭니다. 일단은 이렇게 처리하고 넘어갔지만, MouseMove이벤트만 그런 것인지 다른 이벤트들도 그렇게 작동하는지는 실험을 해 봐야 알 수 있겠네요. 이것과 관련된 기술문서가 있다면 좋겠지만 지금 이것 저것 하는게 많아서 막 실험해 보거나 찾아보거나 할만한 여유는 없군요~
이거 혹시 Framework의 버그일까요? ㅡㅡ;