2009-04-07 14 views
0

C#winformsをタイル処理したいですが、.Netフレームワークがこれをサポートしていないようです。だから私はWin32関数TileWindowsを使いました。コードは次のとおりです。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は単なるuintの列挙型です。問題は、この関数を呼び出した後に、渡された配列ハンドルの代わりに、dekstop上の開いているウィンドウがすべて影響を受けることです。助言がありますか?

答えて

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); 
+0

うーん..私はそれを試していません。 – jfs

関連する問題