Use UIntPtr instead of IntPtr to avoid overflow exceptions in x64 mode.
This commit is contained in:
parent
b519f2b04c
commit
0f1df127d5
1 changed files with 21 additions and 10 deletions
|
@ -62,6 +62,13 @@ namespace OpenTK.Platform.Windows
|
||||||
bool mouse_about_to_enter = false;
|
bool mouse_about_to_enter = false;
|
||||||
protected override void WndProc(ref Message msg)
|
protected override void WndProc(ref Message msg)
|
||||||
{
|
{
|
||||||
|
UIntPtr lparam, wparam;
|
||||||
|
unsafe
|
||||||
|
{
|
||||||
|
lparam = (UIntPtr)(void*)msg.LParam;
|
||||||
|
wparam = (UIntPtr)(void*)msg.WParam;
|
||||||
|
}
|
||||||
|
|
||||||
switch ((WindowMessage)msg.Msg)
|
switch ((WindowMessage)msg.Msg)
|
||||||
{
|
{
|
||||||
// Mouse events:
|
// Mouse events:
|
||||||
|
@ -70,8 +77,9 @@ namespace OpenTK.Platform.Windows
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case WindowMessage.MOUSEMOVE:
|
case WindowMessage.MOUSEMOVE:
|
||||||
mouse.Position = new System.Drawing.Point(msg.LParam.ToInt32() & 0x0000FFFF,
|
mouse.Position = new System.Drawing.Point(
|
||||||
(int)(msg.LParam.ToInt32() & 0xFFFF0000) >> 16);
|
(int)(lparam.ToUInt32() & 0x0000FFFF),
|
||||||
|
(int)(lparam.ToUInt32() & 0xFFFF0000) >> 16);
|
||||||
if (mouse_about_to_enter)
|
if (mouse_about_to_enter)
|
||||||
{
|
{
|
||||||
Cursor.Current = Cursors.Default;
|
Cursor.Current = Cursors.Default;
|
||||||
|
@ -80,7 +88,7 @@ namespace OpenTK.Platform.Windows
|
||||||
return;
|
return;
|
||||||
|
|
||||||
case WindowMessage.MOUSEWHEEL:
|
case WindowMessage.MOUSEWHEEL:
|
||||||
mouse.Wheel += (msg.WParam.ToInt32() >> 16) / 120;
|
mouse.Wheel += (int)(wparam.ToUInt32() >> 16) / 120;
|
||||||
return;
|
return;
|
||||||
|
|
||||||
case WindowMessage.LBUTTONDOWN:
|
case WindowMessage.LBUTTONDOWN:
|
||||||
|
@ -96,7 +104,7 @@ namespace OpenTK.Platform.Windows
|
||||||
return;
|
return;
|
||||||
|
|
||||||
case WindowMessage.XBUTTONDOWN:
|
case WindowMessage.XBUTTONDOWN:
|
||||||
mouse[((msg.WParam.ToInt32() & 0xFFFF0000) >> 16) != (int)MouseKeys.XButton1 ? MouseButton.Button1 : MouseButton.Button2] = true;
|
mouse[((wparam.ToUInt32() & 0xFFFF0000) >> 16) != (int)MouseKeys.XButton1 ? MouseButton.Button1 : MouseButton.Button2] = true;
|
||||||
return;
|
return;
|
||||||
|
|
||||||
case WindowMessage.LBUTTONUP:
|
case WindowMessage.LBUTTONUP:
|
||||||
|
@ -113,7 +121,7 @@ namespace OpenTK.Platform.Windows
|
||||||
|
|
||||||
case WindowMessage.XBUTTONUP:
|
case WindowMessage.XBUTTONUP:
|
||||||
// TODO: Is this correct?
|
// TODO: Is this correct?
|
||||||
mouse[((msg.WParam.ToInt32() & 0xFFFF0000) >> 16) != (int)MouseKeys.XButton1 ? MouseButton.Button1 : MouseButton.Button2] = false;
|
mouse[((wparam.ToUInt32() & 0xFFFF0000) >> 16) != (int)MouseKeys.XButton1 ? MouseButton.Button1 : MouseButton.Button2] = false;
|
||||||
return;
|
return;
|
||||||
|
|
||||||
// Keyboard events:
|
// Keyboard events:
|
||||||
|
@ -132,7 +140,7 @@ namespace OpenTK.Platform.Windows
|
||||||
// In this case, both keys will be reported as pressed.
|
// In this case, both keys will be reported as pressed.
|
||||||
|
|
||||||
bool extended = (msg.LParam.ToInt64() & ExtendedBit) != 0;
|
bool extended = (msg.LParam.ToInt64() & ExtendedBit) != 0;
|
||||||
switch ((VirtualKeys)msg.WParam)
|
switch ((VirtualKeys)wparam)
|
||||||
{
|
{
|
||||||
case VirtualKeys.SHIFT:
|
case VirtualKeys.SHIFT:
|
||||||
// The behavior of this key is very strange. Unlike Control and Alt, there is no extended bit
|
// The behavior of this key is very strange. Unlike Control and Alt, there is no extended bit
|
||||||
|
@ -144,11 +152,14 @@ namespace OpenTK.Platform.Windows
|
||||||
// TODO: Not 100% reliable, when both keys are pressed at once.
|
// TODO: Not 100% reliable, when both keys are pressed at once.
|
||||||
if (ShiftRightScanCode != 0)
|
if (ShiftRightScanCode != 0)
|
||||||
{
|
{
|
||||||
if (((msg.LParam.ToInt32() >> 16) & 0xFF) == ShiftRightScanCode)
|
unchecked
|
||||||
|
{
|
||||||
|
if (((lparam.ToUInt32() >> 16) & 0xFF) == ShiftRightScanCode)
|
||||||
keyboard[Input.Key.ShiftRight] = pressed;
|
keyboard[Input.Key.ShiftRight] = pressed;
|
||||||
else
|
else
|
||||||
keyboard[Input.Key.ShiftLeft] = pressed;
|
keyboard[Input.Key.ShiftLeft] = pressed;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// Should only fall here on Windows 9x and NT4.0-
|
// Should only fall here on Windows 9x and NT4.0-
|
||||||
|
|
Loading…
Reference in a new issue