Fixed SetWindowPos function (IntPtr instead of int parameter).

Add NcCalcSizeOptions enum.
This commit is contained in:
the_fiddler 2009-02-13 21:45:50 +00:00
parent 501a728532
commit c6f5131491
2 changed files with 28 additions and 7 deletions

View file

@ -104,7 +104,7 @@ namespace OpenTK.Platform.Windows
[return: MarshalAs(UnmanagedType.Bool)] [return: MarshalAs(UnmanagedType.Bool)]
internal static extern bool SetWindowPos( internal static extern bool SetWindowPos(
IntPtr handle, IntPtr handle,
WindowPlacementOptions placement, IntPtr insertAfter,
int x, int y, int cx, int cy, int x, int y, int cx, int cy,
SetWindowPosFlags flags SetWindowPosFlags flags
); );
@ -2460,6 +2460,22 @@ namespace OpenTK.Platform.Windows
#region --- Enums --- #region --- Enums ---
#region
internal enum NcCalcSizeOptions
{
ALIGNTOP = 0x10,
ALIGNRIGHT = 0x80,
ALIGNLEFT = 0x20,
ALIGNBOTTOM = 0x40,
HREDRAW = 0x100,
VREDRAW = 0x200,
REDRAW = (HREDRAW | VREDRAW),
VALIDRECTS = 0x400
}
#endregion
#region internal enum DisplayModeSettingsEnum #region internal enum DisplayModeSettingsEnum
internal enum DisplayModeSettingsEnum internal enum DisplayModeSettingsEnum

View file

@ -88,6 +88,10 @@ namespace OpenTK.Platform.Windows
case WindowMessage.ACTIVATE: case WindowMessage.ACTIVATE:
break; break;
case WindowMessage.NCCALCSIZE:
// Need to update the client rectangle, because it has the wrong size on Vista with Aero enabled.
break;
case WindowMessage.WINDOWPOSCHANGED: case WindowMessage.WINDOWPOSCHANGED:
WindowPosition pos = (WindowPosition)Marshal.PtrToStructure(m.LParam, typeof(WindowPosition)); WindowPosition pos = (WindowPosition)Marshal.PtrToStructure(m.LParam, typeof(WindowPosition));
position.X = pos.x; position.X = pos.x;
@ -363,7 +367,7 @@ namespace OpenTK.Platform.Windows
"Could not create native window and/or context. Handle: {0}", "Could not create native window and/or context. Handle: {0}",
this.Handle)); this.Handle));
Functions.SetWindowPos(this.Handle, WindowPlacementOptions.TOP, Left, Top, rect.right - rect.left, Functions.SetWindowPos(this.Handle, IntPtr.Zero, Left, Top, rect.right - rect.left,
rect.bottom - rect.top, SetWindowPosFlags.SHOWWINDOW); rect.bottom - rect.top, SetWindowPosFlags.SHOWWINDOW);
context = new GraphicsContext(mode, window); context = new GraphicsContext(mode, window);
@ -509,7 +513,7 @@ namespace OpenTK.Platform.Windows
} }
Functions.ShowWindow(Handle, command); Functions.ShowWindow(Handle, command);
Functions.SetWindowPos(Handle, WindowPlacementOptions.TOP, 0, 0, new_width, new_height, flags); Functions.SetWindowPos(Handle, IntPtr.Zero, 0, 0, new_width, new_height, flags);
//windowState = value; //windowState = value;
} }
@ -549,8 +553,9 @@ namespace OpenTK.Platform.Windows
} }
Functions.SetWindowLong(Handle, GetWindowLongOffsets.STYLE, (IntPtr)(int)style); Functions.SetWindowLong(Handle, GetWindowLongOffsets.STYLE, (IntPtr)(int)style);
Functions.SetWindowPos(Handle, WindowPlacementOptions.TOP, 0, 0, 0, 0, SetWindowPosFlags.NOMOVE | Functions.SetWindowPos(Handle, IntPtr.Zero, 0, 0, 0, 0,
SetWindowPosFlags.NOSIZE | SetWindowPosFlags.FRAMECHANGED | SetWindowPosFlags.SHOWWINDOW); SetWindowPosFlags.NOMOVE | SetWindowPosFlags.NOSIZE | SetWindowPosFlags.NOZORDER | SetWindowPosFlags.NOACTIVATE |
SetWindowPosFlags.FRAMECHANGED | SetWindowPosFlags.SHOWWINDOW | SetWindowPosFlags.DRAWFRAME);
//windowBorder = value; //windowBorder = value;
} }
@ -576,7 +581,7 @@ namespace OpenTK.Platform.Windows
if (value <= 0) throw new ArgumentOutOfRangeException("Window width must be higher than zero."); if (value <= 0) throw new ArgumentOutOfRangeException("Window width must be higher than zero.");
//if (WindowState == WindowState.Fullscreen || WindowState == WindowState.Maximized) //if (WindowState == WindowState.Fullscreen || WindowState == WindowState.Maximized)
// throw new InvalidOperationException("Cannot resize a fullscreen or maximized window."); // throw new InvalidOperationException("Cannot resize a fullscreen or maximized window.");
Functions.SetWindowPos(Handle, WindowPlacementOptions.TOP, 0, 0, value, Height, SetWindowPosFlags.NOMOVE); Functions.SetWindowPos(Handle, IntPtr.Zero, 0, 0, value, Height, SetWindowPosFlags.NOMOVE);
} }
} }
@ -594,7 +599,7 @@ namespace OpenTK.Platform.Windows
set set
{ {
if (value <= 0) throw new ArgumentOutOfRangeException("Window height must be higher than zero."); if (value <= 0) throw new ArgumentOutOfRangeException("Window height must be higher than zero.");
Functions.SetWindowPos(Handle, WindowPlacementOptions.TOP, 0, 0, Width, value, SetWindowPosFlags.NOMOVE); Functions.SetWindowPos(Handle, IntPtr.Zero, 0, 0, Width, value, SetWindowPosFlags.NOMOVE);
} }
} }