None-Resize Window
martinsalo
Hello Forum,
how can I create a fixed sized window? I have adapted the "COR_DotNetForms" example for my AddIn. I have set Minimum and Maximum Size to the same values in Size. I have set Borderstyle to FixedSingle. But the form is resizeable!?
Thanks
Martin
martinsalo
I have added some Winapi Code to the form. No resizing und window-maximize is disabled:
// Get Parent Window:
IntPtr ParentHandle = WinAPI_GetParent(this.Handle);
// Retrieves styles information about the window:
int GWL_STYLE = -16; // Window styles request.
int dwStyle = WinAPI_GetWindowLong(ParentHandle , GWL_STYLE);
// Set new Styles: No resize, no maximize:
int WS_SIZEBOX = 0x00040000; // No window resize
int WS_MAXIMIZEBOX = 0x00010000; // No maximize button in menu bar.
dwStyle &= ~(WS_SIZEBOX | WS_MAXIMIZEBOX);
int retval = WinAPI_SetWindowLong(ParentHandle , GWL_STYLE , (int)dwStyle);
// Set size manually:
WinAPI_SetWindowPos(ParentHandle , (IntPtr)0 , 0 , 0 , 240 , 145 , SetWindowPosFlags.IgnoreMove);
#region WinApi Definitions
[DllImport("user32.dll" , EntryPoint = "SetWindowLongA" , ExactSpelling = true , CharSet = CharSet.Ansi , SetLastError = true)]
static extern int WinAPI_SetWindowLong(IntPtr hWnd , int nIndex , int dwNewLong);
[DllImport("kernel32.dll" , EntryPoint = "GetLastError" , ExactSpelling = true , CharSet = CharSet.Ansi , SetLastError = true)]
static extern uint WinAPI_GetLastError();
[DllImport("user32.dll" , EntryPoint = "GetWindowLongA" , ExactSpelling = true , CharSet = CharSet.Ansi , SetLastError = true)]
static extern int WinAPI_GetWindowLong(IntPtr hWnd , int nIndex);
[DllImport("user32.dll" , EntryPoint = "GetParent" , ExactSpelling = true , CharSet = CharSet.Unicode , SetLastError = true)]
static extern IntPtr WinAPI_GetParent(IntPtr hWnd);
[Flags()]
private enum SetWindowPosFlags : uint {
/// <summary>If the calling thread and the thread that owns the window are attached to different input queues,
/// the system posts the request to the thread that owns the window. This prevents the calling thread from
/// blocking its execution while other threads process the request.</summary>
/// <remarks>SWP_ASYNCWINDOWPOS</remarks>
AsynchronousWindowPosition = 0x4000 ,
/// <summary>Prevents generation of the WM_SYNCPAINT message.</summary>
/// <remarks>SWP_DEFERERASE</remarks>
DeferErase = 0x2000 ,
/// <summary>Draws a frame (defined in the window's class description) around the window.</summary>
/// <remarks>SWP_DRAWFRAME</remarks>
DrawFrame = 0x0020 ,
/// <summary>Applies new frame styles set using the SetWindowLong function. Sends a WM_NCCALCSIZE message to
/// the window, even if the window's size is not being changed. If this flag is not specified, WM_NCCALCSIZE
/// is sent only when the window's size is being changed.</summary>
/// <remarks>SWP_FRAMECHANGED</remarks>
FrameChanged = 0x0020 ,
/// <summary>Hides the window.</summary>
/// <remarks>SWP_HIDEWINDOW</remarks>
HideWindow = 0x0080 ,
/// <summary>Does not activate the window. If this flag is not set, the window is activated and moved to the
/// top of either the topmost or non-topmost group (depending on the setting of the hWndInsertAfter
/// parameter).</summary>
/// <remarks>SWP_NOACTIVATE</remarks>
DoNotActivate = 0x0010 ,
/// <summary>Discards the entire contents of the client area. If this flag is not specified, the valid
/// contents of the client area are saved and copied back into the client area after the window is sized or
/// repositioned.</summary>
/// <remarks>SWP_NOCOPYBITS</remarks>
DoNotCopyBits = 0x0100 ,
/// <summary>Retains the current position (ignores X and Y parameters).</summary>
/// <remarks>SWP_NOMOVE</remarks>
IgnoreMove = 0x0002 ,
/// <summary>Does not change the owner window's position in the Z order.</summary>
/// <remarks>SWP_NOOWNERZORDER</remarks>
DoNotChangeOwnerZOrder = 0x0200 ,
/// <summary>Does not redraw changes. If this flag is set, no repainting of any kind occurs. This applies to
/// the client area, the nonclient area (including the title bar and scroll bars), and any part of the parent
/// window uncovered as a result of the window being moved. When this flag is set, the application must
/// explicitly invalidate or redraw any parts of the window and parent window that need redrawing.</summary>
/// <remarks>SWP_NOREDRAW</remarks>
DoNotRedraw = 0x0008 ,
/// <summary>Same as the SWP_NOOWNERZORDER flag.</summary>
/// <remarks>SWP_NOREPOSITION</remarks>
DoNotReposition = 0x0200 ,
/// <summary>Prevents the window from receiving the WM_WINDOWPOSCHANGING message.</summary>
/// <remarks>SWP_NOSENDCHANGING</remarks>
DoNotSendChangingEvent = 0x0400 ,
/// <summary>Retains the current size (ignores the cx and cy parameters).</summary>
/// <remarks>SWP_NOSIZE</remarks>
IgnoreResize = 0x0001 ,
/// <summary>Retains the current Z order (ignores the hWndInsertAfter parameter).</summary>
/// <remarks>SWP_NOZORDER</remarks>
IgnoreZOrder = 0x0004 ,
/// <summary>Displays the window.</summary>
/// <remarks>SWP_SHOWWINDOW</remarks>
ShowWindow = 0x0040 ,
}
[DllImport("user32.dll" , EntryPoint = "SetWindowPos" , ExactSpelling = true , CharSet = CharSet.Unicode , SetLastError = true)]
static extern bool WinAPI_SetWindowPos(IntPtr hWnd , IntPtr hWndInsertAfter , int X , int Y , int cx , int cy , SetWindowPosFlags uFlags);
#endregion
Comments
Please sign in to leave a comment.