ThinkGeo.com    |     Documentation    |     Premium Support

MapMouseWheel no longer works

I have been using the Desktop Edition to implement a winformsMap window to show the World Map Kit Data for nearly a year (started with version 5.0 and just recently upgraded to version 6.0).  Originally the winformsMap would zoom in and out using the MouseWheel with the built in MapMouseWheel events of MapSuite Desktop edition.  At some point, maybe within the last several months, the mouse wheel will no longer zoom the map.  I can not figure out what I changed that has "disabled" the default MapMouseWheel behavior. 


I have experimented a little trying to add an event to capture the MapMouseWheel events but the code never enters my handler.  I have tried resetting the winformsMap1.ExtentOverlay.MouseWheelMode = MapMouseWheelMode.Zooming.  I still can not figure this out.


Can anyone give me any hints on what feature might disable the MouseWheel events?


Thanks for any help provided.


Richard


 


 


 


 



Hello Richard, 
  
 I have test this property again, and it’s working well. Have you override the extent overlay? Or hook the mouse wheel event in the edit overlay or track overlay? 
  
 And could you please try to hook winformsMap1.MouseWheel += new MouseEventHandler(winformsMap1_MouseWheel) and debug to see any problem you can find out? 
  
 Regards, 
  
 Gary

Gary,


Thanks for the quick response.


I tried adding the event handler for winformsMap1.MouseWheel and debugging it and it never enters this event handler.  I don't know if I am overriding the ExtentOverlay.  I do override TrackInteractiveOverlay and EditInteractiveOverlay but I thought the MouseWheel was still active after I had added these overriding classes.


I am not sure how or why but It sometimes works if I click the mouse wheel first and then roll it.


Richard



Gary, for what it is worth… we were working with this exact issue yesterday.   When we first built our app, we left the MapFocusMode to default.   This made the scroll wheel automatically zoom the map, w/o us having an event handler. 
  
 The issue with this was that if we had a non-modal dialog displayed on top of our dialog with the map, and you happened to drag the mouse across the map, the map dialog would become the active dialog and cover up the other dialog that was originally above the map dialog.   So, several months ago, we set the MapFocuseMode explicitly to ManuallyFocused.   That solved the problem.  But then our users noted that the mouse wheel no longer scrolled. 
  
 Yesterday, I asked a developer to go implement the scroll wheel event handler and do a zoom.   And the event never fired.    He changed the MapFocusMode value to MouseEnterFocus and 1) the scroll wheel event started firing, and 2) the map automatically zoomed in and out w/o us executing any code in the event handler. 
  
 I’ve been told (but have yet to confirm) that using this setting (instead of Default) does not cause the issue with the map dialog becoming active if the mouse is run across it.   I’ll verify that later today.   I do not know if you have different behavior for “Default” than you do for “MouseEnterFocus”.    Or if the 6.0 version changed something such that map dialog does not automcatically become active when the map gets focus, or if the developer is incorrect in telling me that it is working the way we want :) 
  
 And I don’t know if any of this is relevant to this thread, but I can confirm that with the MapFocusMode set to  Manual, we do not get mouse wheel events (but we get mouse click, down, up, etc). 
  
  


Ted,  
  
 Thanks a million.  You nailed my issue entirely. 
  
 Back in May, we were having a problem with the map grabbing the Focus as soon as we moved the mouse over the map.  This was causing controls in a different panel to be disabled when the other panel lost the focus.  We found that changing the MapFocusMode from the original setting of Default to ManuallyFocused would prevent the winformsMap1 from taking the focus away by just moving/hovering over the map.  We made the change to ManuallyFocused but did not realize that it would have the effect of disabling the MouseWheel events. 
  
 I changed the setting to  MouseEnterFocused and now the MouseWheel is working to zoom the map (- I removed all the mousewheel handlers from our code -) using the MapSuite MouseWheel events.  In my initial testing, it also appears that the map is not taking the focus away from the other panel as it did previously with the MapFocusMode=Default.  This is puzzling as the MapSuite documentation shows that the Default mode is MouseEnterFocused.  There must be some different behavior for Default that is not the same as MouseEnterFocused. 
  
 Anyway, thanks to both Gary and Ted for identifying the source of the problem with MouseWheel events. 
  
 Richard

Glad it helped.  Unfortunately, in our app, setting back to MouseEnterFocused does still cause the map dialog to become active and overlay out displayed DevEx preview window.   On other dialogs, we have set "TopMost" or something like that, and set the parent to the map dialog, and even though we see a little flash when the map dialog becomes active again, the other dialogs still stay on top.    We are trying to see if we can assign a parent to the DevEx preview window, or have to write our own.

I must recant. On further testing, I believe that Default and MouseEnterFocused are both taking the Focus for the map as soon as the mouse enters the map.  I guess this means that we must either choose to leave the map getting focus or do without the MouseWheel events.  The only other option I can think of, is to  try to override the event that handles the “Focus” change.  I don’t think that I can do this without having a better understanding of how MapSuite is currently handling this focus event. 
  
 Richard

Well… I’m sorry it is not working for you, but I’m glad our experiences are consistent.    Here is what I’m thinking of having someone do: 
  
 1) Put the map back into manual mode. 
 2) On a mouse enter event (which I think will still fire), give the map focus IF and ONLY IF the map dialog is the currently active dialog. 
 3) On a mouse leave event, remove the focus from the map (not sure how to do that).    
  
 I have no idea if this would give us the behavior we want.   I should know by next Wednesday.  At that point, we either have it working or we add a “Preferences” option to “Enable Scroll Wheel Zoom”.   If true, then people will have to live with the focus problem.

Hello Richard and Ted, 
  
 Thanks for your further information to declare the issue clearly, and looks like you are both working on find a workaround, I hope it can working, or you can provide a simple sample to me to recreate the problem and we can fix it. 
  
 Regards, 
  
 Gary

Gary,


A simple sample is very very easy.  Take any MapSuite DesktopEdition application using the WinFormsMap (I'm guessing you could also do it with a WPF app as well).  For example, I tried it with the WorldMapKitSample CSDesktopEditionSample.  Build and run the sample as it is delievered.  When the map is displayed, use the mouse wheel to zoom in and out on the map.  Now, stop the application and in the code change the MapFocusMode on WinFormsMap1 control.  The code in the designer.cs looks something like


this.winFormsMap1.MapFocusMode = MapFocusMode.ManuallyFocused;


Rebuild and run the application.  When the map is displayed, try to use the MouseWheel on the map.  No zooming will occur.


I can send you the modified code for this app if you need it but you should be able to reproduce it in any Desktop Edition application using WinFormsMap.


Richard


 


 



Gary,


I was just thinking about a sample app and I realized that what you probably wanted was an application that demostrate the loss of focus and not just the lack of MouseWheel events.  I haven't tried to build a simiple sample that demostrates both the focus and MouseWheel issues together but it shouldn't be hard to do.  If you can find a sample that opens mulitple windows at the same time, it should be easy to make the MapFocusMode change. Sorry about the previous post.  It will show the MouseWheel event issue but does not demostrate the focus issue at the same time.


Richard



I am experiencing the same behavior. 
  
 When I have two forms, each containing a WinformsMap, moving the mouse cursor over a map will cause its form to be raised to the top.  This is not acceptable in our application, as the users must interact with several maps simultaneously.  When I set MapFocusMode=ManuallyFocused, the forms are no longer raised to the top, however, mousewheel zooming no longer works. 
  
 I would like to prevent the forms from being raised to the top during the MouseEnter event, but I also require mousewheel zooming. 
  
 Has this been resolved?  Is there a work around?

Hello Matt, 
  
 Thanks for your further information, you mentioned you use MapFocusMode=ManuallyFocused, I think the problem is you didn’t focus the map control in right way. 
  
 In the MapFocusMode enum, the comment for ManuallyFocused said “This item means that the MapControl will only take focus when the mapControl.Focus() API is called”, so you need call Focus method not only click the map to active it. 
  
 If the map does not focused, it won’t raise the mouse event, I think it make sense. 
  
 Let us know if you have any queries. 
  
 Regards, 
  
 Gary

This resolves our issue.  Thanks for the response, Gary! 
  
 For anybody else who comes across this thread, when you set MapFocusMode=ManuallyFocused, you will need to call mapControl.Focus() in order to use mousewheel zooming.  The best place I have found to call this method is when overriding the OnMapClick method or handling the MapClick event. 
  
 Thanks for the help!

Hello Matt, 
  
 You are welcome, please feel free to let us know your problem. 
  
 Regards, 
  
 Gary

Hi, 



Does the WpfMap control still have MapFocusMode property? I could not find it and we have the same "MapMouseWheel no longer works" issue. 


Hi Gene, 
  
 There are two WpfMap in our products the one is ThinkGeo.MapSuite.DesktopEdition.WpfMap control which has MapFocusMode property and the other one is ThinkGeo.MapSuite.WpfDesktopEdition.WpfMap which doesn’t have the MapFocusMode property. I did tests for them the MapMouseWheel works well. 
  
 Are you look for ThinkGeo.MapSuite.WpfDesktopEdition.WpfMap? If so, please try creating a simple sample and confirm whether the MouseWheel is working. If it works well I guess maybe some event has been prevented before fire the MouseWheel event in your application. 
  
 If it still not works please create a new post in the Map Suite WPF Desktop Edition Support and attach the simple sample there. 
  
  
 Regards, 
 Peter