2013-11-20 6 views
1

내 목표는 내 응용 프로그램의 모든 창에 대해 하나의 아이콘을 갖는 것입니다.여러 창, 단일 트레이 아이콘

약간의 읽기 후에, 내 이해는 Shell_NotifyIcon() 통해 트레이 아이콘을 만드는 것입니다. 이 함수는 hWnd 필드를 포함하는 NOTIFYICONDATA 구조체를 가져옵니다. 이 HWND은 트레이 아이콘 이벤트의 해당 창을 시스템에 알리는 데 사용됩니다. 이러한 이벤트는 WindowProc 콜백 (SetWindowLongPtr()으로 창에 설정 됨)에 의해 처리됩니다. 따라서

내 질문 : 마우스 왼쪽 버튼을 클릭 말의

  • 어떻게 하나의 아이콘이 내 응용 프로그램의 모든 윈도우를 통지 할 수 있습니까?
  • 다른 NOTIFYICONDATA 구조가있는 Shell_NotifyIcon() 구조체를 여러 번 사용할 수 있습니까? 각기 다른 hWnd이 있지만 아이콘은 같은가요?
  • 트레이 아이콘을 생성하기 위해 등록 된 원래 윈도우가 파괴되면 어떻게됩니까?

숨겨진 프록시 창을 만드는 것이 적절한 해결책입니까?

일부 배경 : 내 응용 프로그램은 WinAPI를 C (js-ctypes 사용)로 호출하며 XP의 모든 Windows 버전에서 이상적으로 작동해야합니다.

+1

통지를위한 숨겨진 창은 갈 길이 멀다. 내가 오래 전에 작성한 몇 가지 코드가 있는데 도움이 될 것이다. http://www.codeproject.com/Articles/341/A-Task- 트레이 애플릿 프레임 워크 –

답변

6

실제로 질문 자체에서 자신의 질문에 답변했습니다. 가장 좋은 방법은 트레이 아이콘이 있어야하는 한 숨겨진 창을 만드는 것입니다.

이 숨겨진 창을 참조하여 hWnd으로 한 번만 Shell_NotifyIcon()을 호출하고 메시지를 수신해야하는 개별 창에이 창을 게시하도록합니다.

이렇게하면 특정 응용 프로그램의 요구 사항에 따라 메시지를 특정 창으로 건너 뛰거나 각 창에 다른 메시지를 보낼 수있는 유연성을 얻을 수 있습니다.