我想平铺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上的所有打开窗口都会受到影响而不是传递的数组句柄。有什么建议吗?
答案 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);