The first version is for use if you want to pass null (IntPtr.Zero) to both lpRect and lpKids.
[DllImport("user32.dll")]
static extern int TileWindows(IntPtr hwndParent, int wHow, IntPtr lpRect, int cKids, IntPtr lpKids);
This one is for non-null lpKids, but null lpRect.
[DllImport("user32.dll")]
static extern int TileWindows(IntPtr hwndParent, int wHow, IntPtr lpRect, int cKids, [MarshalAs(UnmanagedType.LPArray)]IntPtr[] lpKids);
You would need a different version again to pass in a real RECT to lpRect, but I've not tried that one myself.
Here are the constants:
const int MDITILE_VERTICAL = 0;
const int MDITILE_HORIZONTAL = 1;
User-Defined Types:
None.
Notes:
None.
Tips & Tricks:
Sample for VB.NET
Enables you to define a RECT and which windows to 'attack'!
Private Shared Function TileWindows(ByVal hwndParent As System.IntPtr, ByVal wHow As UInteger, ByVal lpRect As RECT, ByVal cKids As UInteger, ByVal lpKids() As System.IntPtr) As UShort
End Function
Private Shared Function GetWindowText(hWnd As IntPtr, lpString As StringBuilder, nMaxCount As Integer) As Integer
End Function
Private Shared Function GetWindowsTitle(hwnd As IntPtr) As String
Dim sb As New StringBuilder(1024)
GetWindowText(hwnd, sb, sb.Capacity)
Return sb.ToString
End Function
Private Sub TileClassMatch(className As String, inRect As RECT, _
partialMatch As Boolean)
Dim hwndLst As New List(Of IntPtr)
'Define the 'ad-hoc' routine as needed, e.g.:
Dim CB As New EnumWindowsProc(Function(hwnd As IntPtr, lParam As IntPtr)
Dim cln As String = GetWindowsTitle(hwnd)
If partialMatch Then
If className.ToLower.Contains(cln.ToLower) Then
hwndLst.Add(hwnd)
End If
Else
If className = cln Then hwndLst.Add(hwnd)
End If
Return True
End Function)
'Call it...
EnumWindows(CB, IntPtr.Zero)
If hwndLst.Count > 0 Then
Dim successCount As UShort = _
TileWindows(IntPtr.Zero, MDI_TILE.SKIPDISABLED, _
inRect, CUInt(hwndLst.Count), hwndLst.ToArray)
MessageBox.Show(String.Concat(successCount.ToString, " windows tiled in ", vbCrLf, _
"rectangle ", inRect.Left.ToString, ", ", inRect.Top.ToString, ", ", inRect.Right.ToString, _
", ", inRect.Bottom.ToString), "Tiling...", MessageBoxButtons.OK, MessageBoxIcon.Information)
End If
End Sub
An IntPtr is a pointer to a memory location (unmanaged) that adapts to the platform it is running on (64-bit, etc.) UNLIKE a standard int/Integer. You should always use this type for unmanaged calls that require it, even though an int will appear to work on your development machine.
1/13/2008 11:00:13 AM - tsahi-62.219.227.88
The SetLastError API
4/11/2011 3:33:35 PM - -139.149.31.230
Click to read this page
4/6/2008 2:23:14 PM - hlidftvbgb-88.114.46.202
ByVal is a VB keyword that specifies a variable to be passed as a parameter BY VALUE. In other words, if the function or sub changes the value of the internal variable, it does not change the value of the external variable that was passed to it.
4/25/2007 10:19:55 AM - josep1er@cmich.edu-141.209.229.179
Callback used by EnumWindows
6/14/2012 8:52:35 PM - -24.77.237.43
ByVal is a VB keyword that specifies a variable to be passed as a parameter BY VALUE. In other words, if the function or sub changes the value of the internal variable, it does not change the value of the external variable that was passed to it.
4/25/2007 10:19:55 AM - josep1er@cmich.edu-141.209.229.179
An IntPtr is a pointer to a memory location (unmanaged) that adapts to the platform it is running on (64-bit, etc.) UNLIKE a standard int/Integer. You should always use this type for unmanaged calls that require it, even though an int will appear to work on your development machine.
1/13/2008 11:00:13 AM - tsahi-62.219.227.88
TODO - a short description
3/16/2007 1:31:57 PM - 66.194.55.242
Click to read this page
4/6/2008 2:23:14 PM - hlidftvbgb-88.114.46.202
The SetLastError API
4/11/2011 3:33:35 PM - -139.149.31.230
An IntPtr is a pointer to a memory location (unmanaged) that adapts to the platform it is running on (64-bit, etc.) UNLIKE a standard int/Integer. You should always use this type for unmanaged calls that require it, even though an int will appear to work on your development machine.
1/13/2008 11:00:13 AM - tsahi-62.219.227.88
The CascadeWindows API
3/16/2007 2:22:27 PM - anonymous
Please edit this page!
Do you have...
helpful tips or sample code to share for using this API in managed code?
corrections to the existing content?
variations of the signature you want to share?
additional languages you want to include?
Select "Edit This Page" on the right hand toolbar and edit it! Or add new pages containing supporting types needed for this API (structures, delegates, and more).