Не могу правильно использовать функцию TileWindows - PullRequest
0 голосов
/ 07 апреля 2009

Я хочу использовать C # winforms, но похоже .NET Framework не поддерживает это. Поэтому я использовал функцию 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();

дескрипторы - это массив дескрипторов winforms, а Tile - просто перечисление мнений. Проблема в том, что после вызова этой функции все открытые окна на моем декстопе оказываются затронутыми, а не переданными дескрипторами массива. Есть предложения?

1 Ответ

0 голосов
/ 07 апреля 2009

Что такое 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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...