无法正常使用TileWindows功能

时间:2009-04-07 09:23:52

标签: c# winapi

我想平铺C#winforms但似乎.Net框架不支持这个。所以我使用了Win32函数TileWindows。这是代码:

            GCHandle gcHandle = GCHandle.Alloc(handles, GCHandleType.Pinned);
            IntPtr arrayHandle = gcHandle.AddrOfPinnedObject();
            TileWindows(IntPtr.Zero,
                        (uint)(Tile.Vertical | Tile.SkipDisabled),
                        IntPtr.Zero,
                        (uint)handles.Length, ref arrayHandle);
            gcHandle.Free();

handle是winforms句柄的数组,Tile只是一个uint的枚举。问题是在调用此函数后,我的dekstop上的所有打开窗口都会受到影响而不是传递的数组句柄。有什么建议吗?

1 个答案:

答案 0 :(得分:0)

什么是handles?我假设它是一个窗口句柄数组

TileWindows如何定义(签名)?

我已经尝试过您的代码,从最后一个参数中删除关键字ref后它实际上有效。

        GCHandle gcHandle = GCHandle.Alloc(handles, GCHandleType.Pinned);
        IntPtr arrayHandle = gcHandle.AddrOfPinnedObject();
        TileWindows(IntPtr.Zero,
                    (uint)(Tile.Vertical | Tile.SkipDisabled),
                    IntPtr.Zero,
                    (uint)handles.Length, arrayHandle);
        gcHandle.Free();

带有函数签名:

     [DllImport("user32.dll")]
    static extern ushort TileWindows(IntPtr hwndParent, uint wHow, IntPtr lpRect,
       uint cKids, IntPtr lpKids);