나는 이것을 ESRI 지원 포럼에 올렸지 만 아직 아무도 해결책을 찾지 못했습니다.ESRI Map 객체 - MouseWheel 이벤트 핸들러를 비활성화 할 수 있습니까?
배경 : 저는 ESRI ArcGIS 구성 요소 (버전 9.3.1 SP1)를 사용하는 C++ 맵 표시 응용 프로그램을 유지 관리하고 있습니다. Map 객체 (esriCarto :: Map)를 인스턴스화하고, IActiveView 인터페이스를 쿼리하고, Activate를 호출하여 뷰 윈도우 클라이언트 영역에서 전달합니다 (그리고 다른 여러 속성도 다양한 인터페이스를 통해 설정됩니다). 그런 다음 마지막 표시 이미지를 렌더링하기 위해 일련의 그리기 작업 중 중간에 사용됩니다.
문제점 : WM_MOUSEWHEEL 이벤트가 Map 개체 (또는 자식 개체)에서 선택되어 이상한 동작을 일으키는 것 같습니다. 이 응용 프로그램에서 발생해야하는 것은 뷰 윈도우가이 메시지를 수신 한 다음 적절한 다시 그리기를 트리거하는 '확대/축소'메서드를 호출한다는 것입니다. 실제로는 메시지가 뷰 윈도우의 PreTranslateMessage를 통과 한 다음 디스플레이 영역이 흐려지면서 이 표시되고 뷰 윈도우의 OnMouseWheel 핸들러가 줌을 처리하기 위해 호출됩니다.
'글리치'는보기 창이 흰색으로 짧게 변한 다음 이전 이미지가 다시 표시된다는 의미입니다. 이것은 ArcGIS 9.2와 통합 된 이전 버전의 응용 프로그램에서는 발생하지 않았으며이 글리치 효과가 발생하는 동안 앱의 자체 드로잉 코드는 호출되지 않았습니다. 또한 윈도우의 확대/축소 기능이 대체 컨텍스트 메뉴 옵션을 통해 호출되는 경우에는 발생하지 않습니다.
잠시 동안 참조 정보를 읽었을 때 Map의 자식 ScreenDisplay 객체가 마우스 휠 이벤트에 응답하고 뷰 영역에 표시하지 않을 것으로 의심됩니다. 그것을 말하지 않는 방법, 그러나 나는 그것을 발견하는 것처럼 보일 수 없다. 예를 들어 뷰 윈도우의 PreTranslateMessage에서 확대/축소를 처리하고 메시지가 더 이상 진행되지 않도록하는 임시 해결책이 있지만 해킹과 같은 느낌입니다.
그래서 어떤 종류의 영리한 사람이라도 마우스 휠 이벤트를 무시하도록 Map 개체를 알려주는 방법을 가르쳐 주시겠습니까?
솔루션을 찾으려면 소프트웨어 공급 업체에 문의하십시오. 그들은 소스 코드에 가깝기 때문에 의심 할 여지없이 적절한 해결 방법이나 핫픽스를 제공 할 수 있습니다. –
한스 고마워요.하지만 이미 (아직 언급하지 않은대로) 성공을 거두지 않았습니다. 나는 그들이 대답을 제공 할 수 있는지 알아보기 위해 여전히 ESRI에 따라하고 있지만, 그 동안에는 여기에 게시하는 데 아무런 해가 없습니다. –