0

Hi ,

Please can anyone help. I have a window(1280x768) that contains a resolution(1920x1080). I am trying to use ScreenToClient to obtain the mouse coordinates while in windowed format. I am drawing a line from a subject to the mouse cursor which works fine in fullscreen but not in windowed.

The ScreenToClient function doesn't quite work because (I speculate) of the resolution. Does anyone know of a way to correct this...?

Thank in advance

2
Contributors
3
Replies
15
Views
3 Years
Discussion Span
Last Post by Elixir42
0

Make sure the coordinates you pass are SCREEN coordinates, not Window coordinates. In full screen mode the two are the same, but not in windowed mode.

0

Thanks Ancient Dragon. The coordinates I pass come from GetCursorPos(). How do I translate from Client to 1920x1080. Maybe times by the differance between windowed res and fullscreen? But how do you do that? Here's my attempt:

// Get mouse position in screen coordinates
GetCursorPos(&m_MousePos);

// Translate to client coorndinates
ScreenToClient(m_hWindow, &m_MousePos); 

// Save and later pass to line function
Points[0] = D3DXVECTOR2(m_pAnyObject->GetScreenPos()->GetCenterX(),
                        m_pAnyObject->GetScreenPos()->GetCenterY());
Points[1] = D3DXVECTOR2(float(m_MousePos.x), 
                        float(m_MousePos.y));

To make it clearer my window is displaying a squashed (on purpose) fullscreen image.

0

************SOLVED**********
Ok, you need to work out the ratio between the window and backbuffer and times it with the x and y like this:

RECT ClientRect;
GetClientRect(m_hWindow,&ClientRect); 

ScreenToClient(m_hWindow, &m_MousePos); 

Points[0] = D3DXVECTOR2(m_pMyObjectHere->GetScreenPos()->GetCenterX(),
                        m_pMyObjectHere->GetScreenPos()->GetCenterY());
Points[1] = D3DXVECTOR2(m_MousePos.x * (float(FULLSCREEN_WIDTH) / ClientRect.right),
            m_MousePos.y * (float(FULLSCREEN_HEIGHT) / ClientRect.bottom));

This works whether the window is windowed, bordered, borderless or fullscreen. Make sure you use/convert your variables here to floats to preserve the exponent. Yippee...!!!

This question has already been answered. Start a new discussion instead.
Have something to contribute to this discussion? Please be thoughtful, detailed and courteous, and be sure to adhere to our posting rules.