I have a borderless window (BorderStyle = None) where I would like to allow the user to click on the background (anywhere but one of the child controls) and move it around.
How would I go about doing that?
Thank you,
Try this.
http://www.codeproject.com/KB/cs/csharpmovewindow.aspx
Just be sure and add a mouse event handler immediately after the form is initialized.
You just need to override OnMouseDown/OnMouseMove/OnMouseUp. These three methods provide the mouse events to move your form.
When the mouse is pressed, just track the mouse location. On move events, move the form with the mouse, and when the mouse is released, stop "moving".
Related
I am able to obtain the list of all windows using _NET_CLIENT_LIST Atom property of x11. Using that, I choose a particular window of my interest, say the gedit window, and use XSetInputFocus and that will perfectly set the keyboard inputs and controls to the gedit window.
Now my question is, is there a similar function in X11 such that we can set the mouse focus to a particular window, such that any mouse clicks or selections will be confined to that particular window only.
I tried XGrabPointer, but with no success. It will simply freeze the mouse and no further mouse inputs will be displayed on screen (like mouse clicks; I can just see the mouse pointer, I can also move it, but it doesn't perform any click operations).
You should be able to poll for mouse events and, if the user tries to move out of the rectangle you should be able to reposition it. If you don't keep the pointer out of the other window(s), I don't think you can prevent mouse clicks from reaching them, but that may be possible.
I have a combobox control's previewmousewheel event been handled. When my mouse is on the control and i move the center wheel of my mouse then this event gets raised. But when my mouse is away from the control and i move the center wheel of my mouse then this event does not get raised.
Can anybody please explain me why is this happening?
If I want to raise an event when my mouse is away from the control then which event should I handle?
This is expected behaviour.
If the mouse cursor is not positioned over the control then no mouse events are routed through it. You wouldn't expect a mouse click event to be routed through it if the cursor was over a different control would you?
If you want this behaviour then I would suggest that you handle the mousewheel event in the page/view and route it from there, be cautious though as user expectation is for mouse and keyboard events to be handled by the in focus item.
In those cases that the user would expect the event to be forwarded to the control you could use Mouse.Capture(someControl) and Mouse.Capture(null) to stop the forwarding.
You should only use this when it makes sense. E.g. when dragging a scrollbar, when you started to drag on the thumb but are not required to stay on top of it as long as you keep the left mouse button down.
When using Mouse.Capture() make sure you always provide a way back from capturing.
I have a silverlight templated control that changes opacity when you hover it . However when user points cursor to its child control the effect wores off. I want to have the control highlighted also when the user hovers any child control. I've did the same thing in WinForms by overriding the WndProc method. Is there something similar in silverlight ?
Thanks
Sounds to me like you have not used the correct events to detect the hover, I suspect you are using MouseMove. Instead Use MouseEnter and MouseLeave events. An MouseEnter event will occur when the mouse moves over the control. You move the mouse over child controls and you will get no further events. Then when the mouse moves completely out of your control you will get MouseLeave.
I have a canvas with a mouse up and down event and there are normaly around 10-15 clickable objects on the screen.
If I click down on an element or blank space I can catch the event, but when I release the mouse it its only caught if the mouse wasn't on another element (blank space is fine).
Is there any way in Silverlight (for WP7) to make sure I get a mouse up event no matter where on the screen it its triggered?
You should simply Capture the mouse when you get the mousDown event.
(And release it after your mouseUp )
I've created a WPF application where the title bar and chrome are turned off. I have a border around the entire app, with the idea that it would act like the chrome in some regards. The first thing I'm trying to do is have the mousemove event capture the movement of the mouse when the mouse is clicked, so that the window moves with the mouse. The problem is that if the mouse moves too quickly, it manages to leave the window and therefore the mousemove no longer fires. I've been able to do this with a normal WinForm with no problems regardless of the speed of the mouse. Is there any way to do this more efficiently, or perhaps tune the polling of the mousemove? Perhaps a different container other than border that would perform better?
Try Me.DragMove in the window's left click event handler. It much better than most custom solutions.
When the user clicks you should capture the mouse (see Mouse.Capture). That way, you'll get the mouse events regardless of whether the mouse cursor is over your element or not.