Jump to content

  • Log In with Google      Sign In   
  • Create Account

We're offering banner ads on our site from just $5!

1. Details HERE. 2. GDNet+ Subscriptions HERE. 3. Ad upload HERE.


Getting X/Y of mouse ONLY inside rendered area


Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.

  • You cannot reply to this topic
5 replies to this topic

#1 MaacK   Members   -  Reputation: 140

Like
0Likes
Like

Posted 21 February 2013 - 05:26 AM

Hello,

 

I am using C#, first off. I have everything setup (very basic) for the Mouse inside of SlimDX (DirectInput).

 

I'm working a level editor for my basic 2D engine (this is just for fun, fyi), however, I ran into a problem (I might be approaching this incorrectly). I have a panel that I am rendering to. I need to get the mouse X/Y inside of the panel (or just the renderarea). What is the best way to approach this?

 

Are there any examples of using DirectInput in C#, that would help me out? I feel like I am totally doing this backwards dry.png

 

Thanks! 



Sponsor:

#2 btower   Members   -  Reputation: 981

Like
1Likes
Like

Posted 21 February 2013 - 06:19 AM

The .NET Panel class has a method named PointToClient that accepts a Point as input. The Point should be in screen coordinates (in your case; the mouse cursor position relative to the screen itself), the result is a Point that is relative to the Panel.



#3 LordRhys   Members   -  Reputation: 367

Like
0Likes
Like

Posted 21 February 2013 - 07:05 AM

You could use something like the following where you create some functions for your mouse inthe panel, then in your logic code you react to it:

 

 

 

private void panel_MouseLeave(object sender, EventArgs e)
    {
      trackMouse = false;
    }

private void panel_MouseEnter(object sender, EventArgs e)
{
  trackMouse = true;
}


if (trackMouse)
      {
        if (frameCount == 0)
        {
          if (mouse.X < Engine.TileWidth)
            position.X -= Engine.TileWidth;

          if (mouse.X > mapDisplay.Width - Engine.TileWidth)
            position.X += Engine.TileWidth;

          if (mouse.Y < Engine.TileHeight)
            position.Y -= Engine.TileHeight;

          if (mouse.Y > mapDisplay.Height - Engine.TileHeight)
            position.Y += Engine.TileHeight;

          camera.Position = position;
          camera.LockCamera();
        }

        position.X = mouse.X + camera.Position.X;
        position.Y = mouse.Y + camera.Position.Y;

        Point tile = Engine.VectorToCell(position);
        shadowPosition = new Vector2(tile.X, tile.Y);

        tbMapLocation.Text =
            "( " + tile.X.ToString() + ", " + tile.Y.ToString() + " )";

        if (isMouseDown)
        {
          if (rbDraw.Checked)
          {
            SetTiles(tile, (int)nudCurrentTile.Value, lbTileset.SelectedIndex);
          }

          if (rbErase.Checked)
          {
            SetTiles(tile, -1, -1);
          }
        }       
      }



#4 MisterFuzzy   Banned   -  Reputation: 161

Like
0Likes
Like

Posted 21 February 2013 - 10:42 AM

Let's say your draw region is 100x100, and positioned from the topleft corner at 256x256. To get the mouse position in the box, you would just subtract the measure of the top-left corner from the mouse XY position to get a relative value. Then, you can use simple checks ( if newX < 0 || newX > 100, then mouse.X is not in the box's x bounds and therefore cannot be in the box, else check newY etc. etc.). That's all there is to it! Really. That's all.


"Only idiots quote themselves" - MisterFuzzy

 


#5 cozzie   Members   -  Reputation: 1757

Like
0Likes
Like

Posted 21 February 2013 - 01:55 PM

You might achieve this by creating your directinput object with the "discl_foreground" parameter (instead of background). Assuming i understand your question correct.

#6 unbird   Crossbones+   -  Reputation: 5992

Like
0Likes
Like

Posted 21 February 2013 - 02:38 PM

Simply grab the MouseMove event of said Panel ?






Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.



PARTNERS